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

 
Nerd Trader # :
내가 볼 수 없어

하지만 다른 사람들은 ( CHARTEVENT_OBJECT_CLICK )

 
Nerd Trader # :

모든 독창적인 것은 간단합니다.

나는 그렇게 할 것이다

 void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
  {    
   if ( ObjectGetInteger ( 0 , "button_bs" , OBJPROP_STATE ))
     {
       int       x     =( int )lparam;
       int       y     =( int )dparam;
       datetime dt    = 0 ;
       double    price = 0 ;
       int       window= 0 ;
     
       if (id == CHARTEVENT_MOUSE_MOVE )
        {
         if ( ChartXYToTimePrice ( 0 ,x,y,window,dt,price))
           {
             if ( ObjectFind ( 0 , "H Line" )!=window)
              {
               ObjectCreate ( 0 , "H Line" , OBJ_HLINE ,window,dt,price);
              }
             else
             if ( ObjectMove ( 0 , "H Line" ,window,dt,price))
              {
               ChartRedraw ( 0 );
              }
           }
        }
     }
   else
     {
       ObjectDelete ( 0 , "H Line" );
     }
  }
 
MakarFX # :

나는 그렇게 할 것이다

또한 솔루션입니다. 그러나 이 옵션은 더 이상 나에게 적합하지 않습니다. 왜냐하면 이 줄을 클릭한 후 첫 번째 줄을 삭제하고 다른 줄을 만들어야 커서도 커서를 따라가고 클릭한 후에도 떠나기 때문입니다. 나는 이것을 좋아했다:

 void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
{
     datetime static dt        = 0 ;
     double    static price     = 0 ;
     int        static window    = 0 ;
     string    static line_name;


   if (id== CHARTEVENT_OBJECT_CLICK ){
    }
     //Нажатие кнопки создаёт line 1 
     if (sparam== "button" ){
      line_name = "line 1" ;
      CreateLine(line_name, clrGreen );
    }
     //Нажатие на line 1 удаляет line 1 и создаёт line 2 
     if (sparam== "line 1" ){
       ObjectDelete ( 0 ,line_name);
      line_name = "line 2" ;
      CreateLine(line_name, clrRed );
    }
     //Нажатие на line 2 удаляет line 2
     if (sparam== "line 2" ){
       ObjectDelete ( 0 ,line_name);
    }
  }

   if ( ObjectGetInteger ( 0 , "button" , OBJPROP_STATE )){
     int x = ( int )lparam;
     int y = ( int )dparam;
     if ( ChartXYToTimePrice ( 0 ,x,y,window,dt,price)){
       if (id == CHARTEVENT_MOUSE_MOVE ){
         if ( ObjectMove (line_name, 0 , 0 ,price))
           ChartRedraw ( ChartID ());
      }
    }
  }
}
 

버튼을 누르면 선이 생성됩니다. 버튼을 눌렀 습니다 - 삭제. 추측하기 너무 어렵습니까?

또한 지속적으로 생성 및 삭제되지 않도록 표시 및 숨길 수 있습니다.

 
Nerd Trader # :

또한 솔루션입니다. 그러나 이 옵션은 더 이상 나에게 적합하지 않습니다. 왜냐하면 이 줄을 클릭한 후 첫 번째 줄을 삭제하고 다른 줄을 만들어야 커서도 커서를 따라가고 클릭한 후에도 떠나기 때문입니다. 나는 이것을 좋아했다:

 void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
{
     datetime static dt        = 0 ;
     double    static price     = 0 ;
     int        static window    = 0 ;
     string    static line_name;


   if (id== CHARTEVENT_OBJECT_CLICK ){
    }
     //Нажатие кнопки создаёт line 1 
     if (sparam== "button" ){
      line_name = "line 1" ;
      CreateLine(line_name, clrGreen );
    }
     //Нажатие на line 1 удаляет line 1 и создаёт line 2 
     if (sparam== "line 1" ){
      line_name = "line 2" ;
       ObjectSetString ( 0 , "line 1" , OBJPROP_NAME ,line_name);
       ObjectSetInteger ( 0 ,line_name, OBJPROP_COLOR , clrRed );
    }
     //Нажатие на line 2 удаляет line 2
     if (sparam== "line 2" ){
       ObjectDelete ( 0 ,line_name);
    }
  }

   if ( ObjectGetInteger ( 0 , "button" , OBJPROP_STATE )){
     int x = ( int )lparam;
     int y = ( int )dparam;
     if ( ChartXYToTimePrice ( 0 ,x,y,window,dt,price)){
       if (id == CHARTEVENT_MOUSE_MOVE ){
         if ( ObjectMove (line_name, 0 , 0 ,price))
           ChartRedraw ( ChartID ());
      }
    }
  }
}

그리고 나는 생성하고 삭제하기 전에 객체의 존재에 대한 확인을 남길 것입니다.

 
MakarFX # :

뭔가 잘못되었습니다) 신호가 전혀 가지 않습니다. 0 거래.

왜 더블을 통해?

내 변수는 다음과 같습니다.

 // Параметры советника
input string   sParametersEA = "" ;     // Параметры советника
input double   Lot           = 0.01 ;   // Количество лотов
input double   LotControl    = 0.01 ;   // Контрольная лотность
input int      StopLoss      = 30 ;     // Уровень убытка
input int      TakeProfit    = 30 ;     // Уровень прибыли
input int      Deviation     = 20 ;     // Отступ цены входа
input int      Slippage      = 3 ;       // Проскальзование (в пунктах)
input int      Magic         = 1 ;       // Индентификатор советника
input double   K_Martin1     = 2.0 ;     // Множитель мартин 1
input double   K_Martin2     = 2.0 ;     // Множитель мартин 2
input double   K_Martin3     = 2.0 ;     // Множитель мартин 3
input int      OrdersClose   = 5 ;       // Ограничение лотности мартин1
input int      OrdersClose2  = 5 ;       // Ограничение лотности мартин2
input int      DigitsLot     = 2 ;       // Точность лотности
// Параметры индикатора
input string   ParametersMA  = "" ;     // Параметры индикатора
input int      PeriodMA      = 14 ;     // Период мувинга
input int      MovingShift   = 1 ;       // Сдвиг мувинга
// Глобальные переменные
string AC;
datetime Start;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
double openPrice;   // цена открытия позиции
//+-----------------------------------------------

이것이 문제가 될 수 있습니까?

 
законопослушный гражданин # :

뭔가 잘못되었습니다) 신호가 전혀 가지 않습니다. 0 거래.

왜 더블을 통해?

내 변수는 다음과 같습니다.

이것이 문제가 될 수 있습니까?

대담해

 double openPrice;   // цена открытия позиции
그리고 당신의 코드에서
openPrice();
 
законопослушный гражданин # :


왜 더블을 통해?


이중 - 십진수

정수 - 정수

 
MakarFX # :

대담해

그리고 당신의 코드에서

감사하다! 신호가 갔다!

 
MakarFX # :

이중 - 십진수

정수 - 정수

분명한