MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1080

 
Artyom Trishkin :

여기에서 가장 좋은 방법 은 도움말을 더 자주 읽는 것 입니다.

차트에 대해 획득/설정할 수 있는 지정된 속성 이 있습니다.

특히 - 마우스 왼쪽 버튼으로 그래프를 스크롤합니다 .

나는 문서에서 이 곳을 읽었다.

차트에 대해 CHART_EVENT_MOUSE_MOVE = 1이 설정되면 차트는 마우스 이동 메시지를 수신하고 CHART_EVENT_MOUSE_MOVE = 0이면 받지 않습니다. 이것은 분명합니다.
그러나 그것은 내 질문에 적용되지 않습니다 ... CHART_EVENT_MOUSE_MOVE에 어떤 값을 설정하든 AUTOSCROLL이 꺼져있을 때 항상 옵션이 있습니다.
창의 차트를 과거(시간 기준)로 "이동"하려면 마우스 왼쪽 버튼을 누르고 버튼을 놓지 않고 마우스를 오른쪽으로 이동합니다.
이 경우 창의 차트는 항상 이동됩니다.
그러나 Ctrl + F (십자선 호출)를 누르면 - 마우스 왼쪽 버튼을 누른 상태에서 차트 주위를 이동하면 빔이 보입니다.
도구 설명 형태로 옆에 십자형으로 끝나며 마우스 움직임에 대한 데이터와 현재 마우스 포인터가 있는 수준의 가격이 표시됩니다.
그리고 가장 중요한 것은 일정 자체가 현재 창에서 움직이지 않는다는 것입니다.

Crosshair를 켜지 않고 이 효과를 얻는 방법에 대해 묻고 있습니다.

추신: 화면에서 비디오를 가져와서 어떻게 보이는지 보여줄 수 있습니다.

 
Maksims Ignatovs :

나는 문서에서 이 곳을 읽었다.

차트에 대해 CHART_EVENT_MOUSE_MOVE = 1이 설정되면 차트는 마우스 이동 메시지를 수신하고 CHART_EVENT_MOUSE_MOVE = 0이면 받지 않습니다. 이것은 분명합니다.
그러나 그것은 내 질문에 적용되지 않습니다 ... CHART_EVENT_MOUSE_MOVE에 어떤 값을 설정하든 AUTOSCROLL이 꺼져있을 때 항상 옵션이 있습니다.
창의 차트를 과거(시간 기준)로 "이동"하려면 마우스 왼쪽 버튼을 누르고 버튼을 놓지 않고 마우스를 오른쪽으로 이동합니다.
이 경우 창의 차트는 항상 이동됩니다.
그러나 Ctrl + F (십자선 호출)를 누르면 - 마우스 왼쪽 버튼을 누른 상태에서 차트 주위를 이동하면 빔이 보입니다.
도구 설명 형태로 옆에 십자형으로 끝나며 마우스 움직임에 대한 데이터와 현재 마우스 포인터가 있는 수준의 가격이 표시됩니다.
그리고 가장 중요한 것은 일정 자체가 현재 창에서 움직이지 않는다는 것입니다.

Crosshair를 켜지 않고 이 효과를 얻는 방법에 대해 묻고 있습니다.

추신: 화면에서 비디오를 가져와서 어떻게 보이는지 보여줄 수 있습니다.

내가 대답하지 않았습니까?
차트에서 마우스로 무언가를 움직이면 그 순간 에 차트를 이동하는 것을 금지합니다. 마우스 버튼을 놓는 순간 차트 이동 이 허용되었습니다.

 

인덱싱을 사용하여 구조의 필드에 액세스할 수 있습니까? 1차원 배열은 어떻습니까? 구조체 필드의 배열을 생성할 수 있습니까?

그래서 아이디어는 이것입니다. 구조가 있다

 struct MyStruct { int qw; double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{ int qw[ 5 ]; double qe[ 5 ];}; MyStruct1 qr1;

또한 함수에 구조체를 전달할 때 각 요소를 이름으로 별도로 참조해야 합니다.

qr.qw qr.qe 등 이 비즈니스를 하나의 스레드로 처리하고 이를 하나의 스레드로 처리하면 작동하지 않는 것이 당연합니다. 다음과 같이 이러한 요소를 저장할 필드 배열을 만들고 싶습니다.

Massiv[ 2 ];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

결과적으로 인덱싱을 사용하여 이러한 요소에 액세스할 수 있으며 물론 두 번째 구조는 이미 루프에 배치될 수 있으며 qw qe는 루프를 통해 이미 처리될 수 있습니다.

이런게 가능할까요, 예전에 인터넷에서 그런 기록을 봤는데 제가 사이트를 잃어버려서 뭔가 잘못 이해한게 아닐까요? typedef 열거형 합집합 매크로가 이 문제에 도움이 될 수 있습니까?

 
Artyom Trishkin :
내가 대답하지 않았습니까?
차트에서 마우스로 무언가를 움직이면 그 순간 에 차트를 이동하는 것을 금지합니다. 마우스 버튼을 놓는 순간 차트 이동이 허용되었습니다.

차트에서 아무 것도 움직이지 않습니다. CHART_EVENT_MOUSE_MOVE = 0으로 설정하면 도움이 되지 않습니다. 차트를 계속 이동할 수 있습니다.
그래픽 처리를 비활성화하는 방법
ChartNavigate 잘 모르겠습니다. 그리고 문서에서 찾지 못했습니다.
동시에 "십자선"은 어떻게 든이 문제에 대처합니다. 그래서 제가 묻습니다 - 어떻게?
당신은 나에게 대답합니다 - CHART_EVENT_MOUSE_MOVE에 대해 원하는 값을 설정하십시오. 나는 시도했다 - 그것은 도움이되지 않습니다.
CHART_EVENT_MOUSE_MOVE 값에 대해 차트에서 마우스 왼쪽 버튼을 누른 상태에서 마우스를 움직이기만 하면 마우스로 차트를 앞뒤로 이동할 수 있습니다.
동시에 마우스를 수평으로 이동하는 방향에 따라 마우스를 오른쪽으로 이동하면 창에서 차트가 이동합니다 - 차트가 왼쪽(역사의 과거로)으로 이동,
그리고 마우스를 왼쪽으로 움직이면 현재 막대가 나타날 때까지 차트가 미래로 이동합니다. 그런 다음 마우스를 사용하여 창에서 왼쪽으로 이동하려고 하면 아무 것도 표시되지 않습니다. 그러나 이것은 이해할 수 있습니다.
그러나
ChartNavigate를 사용하여 창의 차트를 과거의 특정 날짜로 재정렬하는 경우 - 어떤 상황에서도(차트에서 클릭 및 마우스 움직임으로 조작 없음) 내가 보는 차트 부분이 이동하지? 이를 위해 구체적으로 무엇을 해야 합니까?


 
Maksims Ignatovs :

차트에서 아무 것도 움직이지 않습니다. CHART_EVENT_MOUSE_MOVE = 0으로 설정하면 도움이 되지 않습니다. 차트를 계속 이동할 수 있습니다.
그래픽 처리를 비활성화하는 방법
ChartNavigate 잘 모르겠습니다. 그리고 문서에서 찾지 못했습니다.


 ChartSetInteger ( 0 , CHART_MOUSE_SCROLL , 0 ); // Выключим прокрутку графика
 
좋은 오후, 표시기를 수정하십시오. 버튼을 통해 서버 시간을 표시해야 합니다. 단, 원래 위치의 버튼이 표시되어야 합니다.
다음은 나를 위해 작동하지 않은 것입니다.
 #property copyright "Copyright 2014, ForexDE"
#property link        ""
#property version    "1.00"
#property strict
#property indicator_chart_window

string s1= "" ;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{

   PutButton( "B" , 50 , 50 , "KNOPKA" );
   
   if (DayOfWeek()== 1 )
      s1= "Понедельник  /  " ;
   if (DayOfWeek()== 2 )
      s1= "Вторник  /  " ;
   if (DayOfWeek()== 3 )
      s1= "Среда  /  " ;
   if (DayOfWeek()== 4 )
      s1= "Четверг  /  " ;
   if (DayOfWeek()== 5 )
      s1= "Пятница  /  " ;
   if (DayOfWeek()== 6 )
      s1= "Суббота  /  " ;
   if (DayOfWeek()== 0 )
      s1= "Воскресенье  /  " ;

   ObjectCreate ( "WeekDay1" , OBJ_LABEL , 0 , 0 , 0 );          
   ObjectSet( "WeekDay1" , OBJPROP_CORNER , CORNER_RIGHT_LOWER );
   ObjectSet( "WeekDay1" , OBJPROP_XDISTANCE , 5 );
   ObjectSet( "WeekDay1" , OBJPROP_YDISTANCE , 2 );
   ObjectSet( "WeekDay1" , OBJPROP_SELECTABLE , false );
   ObjectSet( "WeekDay1" , OBJPROP_HIDDEN , true );
   ObjectSet( "WeekDay1" , OBJPROP_ANCHOR , ANCHOR_RIGHT_LOWER );
   ObjectSet( "WeekDay1" , OBJPROP_COLOR ,Black);
   ObjectSet( "WeekDay1" , OBJPROP_SELECTABLE , false );
   ObjectSet( "WeekDay1" , OBJPROP_SELECTED , false );
   ObjectSetText( "WeekDay1" ,s1+ TimeToString (CurTime(), TIME_DATE )+ "  -  " + TimeToString (CurTime(), TIME_SECONDS ), 13 , "Arial" ,Red);
   
   return ( INIT_SUCCEEDED );
}
/****************Custom indicator iteration function*****************/
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
 {
 
   if (DayOfWeek()== 1 )
      s1= "Понедельник  /  " ;
   if (DayOfWeek()== 2 )
      s1= "Вторник  /  " ;
   if (DayOfWeek()== 3 )
      s1= "Среда  /  " ;
   if (DayOfWeek()== 4 )
      s1= "Четверг  /  " ;
   if (DayOfWeek()== 5 )
      s1= "Пятница  /  " ;
   if (DayOfWeek()== 6 )
      s1= "Суббота  /  " ;
   if (DayOfWeek()== 0 )
      s1= "Воскресенье  /  " ;
 
   ObjectSetText( "WeekDay1" ,s1+ TimeToString (CurTime(), TIME_DATE )+ "  -  " + TimeToString (CurTime(), TIME_SECONDS ), 13 , "Arial" ,Red);

   return (rates_total);
 } /*******************************************************************/

/********************************************************************/
void OnChartEvent ( const int id,         // идентификатор события
                   const long & lparam,   // параметр события типа long
                   const double & dparam, // параметр события типа double
                   const string & sparam   // параметр события типа string
                 )
 {

   if (id == CHARTEVENT_CLICK )
   {
   
         if (! ObjectGetInteger ( 0 , "B" , OBJPROP_STATE , false ))
           {
   ObjectSet( "WeekDay1" , OBJPROP_XDISTANCE , 7000 ); // скрываю 
           }
         else
           {
   ObjectSet( "WeekDay1" , OBJPROP_XDISTANCE , 5 );     // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton( string name, int x, int y, string text)
  {
   ObjectCreate ( 0 ,name, OBJ_BUTTON , 0 , 0 , 0 );
//--- установим координаты кнопки
   ObjectSetInteger ( 0 ,name, OBJPROP_XDISTANCE ,x);
   ObjectSetInteger ( 0 ,name, OBJPROP_YDISTANCE ,y);
//--- установим размер кнопки
   ObjectSetInteger ( 0 ,name, OBJPROP_XSIZE , 80 );
   ObjectSetInteger ( 0 ,name, OBJPROP_YSIZE , 30 );
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger ( 0 ,name, OBJPROP_CORNER , 2 );
//--- установим текст
   ObjectSetString ( 0 ,name, OBJPROP_TEXT ,text);
//--- установим шрифт текста
   ObjectSetString ( 0 ,name, OBJPROP_FONT , "Arial" );
//--- установим размер шрифта
   ObjectSetInteger ( 0 ,name, OBJPROP_FONTSIZE , 12 );
//--- установим цвет текста
   ObjectSetInteger ( 0 ,name, OBJPROP_COLOR ,Red);
//--- установим цвет фона
   ObjectSetInteger ( 0 ,name, OBJPROP_BGCOLOR ,White);
//--- установим цвет границы
   ObjectSetInteger ( 0 ,name, OBJPROP_BORDER_COLOR ,Blue);
  }
 

vebster005 :
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

구체적으로 무엇이 당신에게 효과가 없었습니까? 즉, 그들 자신의 말로 그들이하고 싶었던 것 ...

버튼이 만들어지고 눌리면 화면 밖으로 나간다(넓지 않은 경우)

결과에 만족하지 못하는 이유는 무엇입니까?

 
Maxim Kuznetsov :

구체적으로 무엇이 당신에게 효과가 없었습니까? 즉, 그들 자신의 말로 그들이하고 싶었던 것 ...

버튼이 만들어지고 눌리면 화면 밖으로 나간다(넓지 않은 경우)

결과에 만족하지 못하는 이유는 무엇입니까?

버튼을 눌렀을 때 시간이 사라지고 바로 나타났다는 사실은 계산기에

 
Maxim Kuznetsov :

구체적으로 무엇이 당신에게 효과가 없었습니까? 즉, 그들 자신의 말로 그들이하고 싶었던 것 ...

버튼이 만들어지고 눌리면 화면 밖으로 나간다(넓지 않은 경우)

결과에 만족하지 못하는 이유는 무엇입니까?

터미널에서와 같이 몇 초와 다른 모든 작업을 수행하는 결과를 얻을 수 있고 버튼을 비활성화할 수 있습니까?
버튼을 끄면 (화면에서 제거) 시간이 다시 나타납니다.

 
vebster005 :

터미널에서와 같이 몇 초 및 기타 모든 작업을 수행할 수 있는 결과를 얻을 수 있고 버튼을 비활성화할 수 있습니까?
버튼을 끄면 (화면에서 제거) 시간이 다시 나타납니다.

여기에서 많은 사람들이 거의 모든 결과를 얻을 수 있습니다.

다른 사람에게 부탁하지 말고 스스로 달성하려고 노력하는 것이 중요합니다. 여기 도움은 항상 준비되어 있지만 당신을 위해 하는 것이 아니라 돕기 위한 것입니다.