MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1785

 
Nerd Trader # :
görmüyorum

Ama diğerleri görüyor ( CHARTEVENT_OBJECT_CLICK )

 
Nerd Trader # :

Ustaca olan her şey basittir.

bunu yapardım

 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 # :

bunu yapardım

Ayrıca bir çözüm. Ancak bu seçenek artık benim için uygun değil, çünkü bu satıra tıkladıktan sonra ilkini silip başka bir tane oluşturmanız gerekiyor ve böylece imleci de takip ediyor ve üzerine tıkladıktan sonra çıkıyor. şöyle yaptım:

 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 ());
      }
    }
  }
}
 

Düğmeye basılır - bir çizgi oluştururuz. Düğmeye basıldı - sil. Tahmin etmek çok mu zor?

Ayrıca sürekli oluşturup silmemek için gösterip gizleyebilirsiniz.

 
Nerd Trader # :

Ayrıca bir çözüm. Ancak bu seçenek artık benim için uygun değil, çünkü bu satıra tıkladıktan sonra ilkini silip başka bir tane oluşturmanız gerekiyor ve böylece imleci de takip ediyor ve üzerine tıkladıktan sonra çıkıyor. şöyle yaptım:

 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 ());
      }
    }
  }
}

Ve oluşturmadan ve silmeden önce nesnenin varlığının kontrolünü bırakırdım.

 
MakarFX # :

bir şeyler ters gitti) sinyal hiç gitmiyor. 0 anlaşma.

ve neden çift aracılığıyla?

değişkenlerim şöyle görünür:

 // Параметры советника
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;   // цена открытия позиции
//+-----------------------------------------------

Bu bir sorun olabilir mi?

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

bir şeyler ters gitti) sinyal hiç gitmiyor. 0 anlaşma.

ve neden çift aracılığıyla?

değişkenlerim şöyle görünür:

Bu bir sorun olabilir mi?

bu cüretkar

 double openPrice;   // цена открытия позиции
ve kod kullanımınızda
openPrice();
 
законопослушный гражданин # :


ve neden çift aracılığıyla?


çift - ondalık sayılar

int - tam sayılar

 
MakarFX # :

bu cüretkar

ve kod kullanımınızda

teşekkür etmek! sinyal gitti!

 
MakarFX # :

çift - ondalık sayılar

int - tam sayılar

açık