Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1785

 
Nerd Trader #:
ne voient pas

Mais les autres peuvent voir(CHARTEVENT_OBJECT_CLICK)

 
Nerd Trader #:

Tout ce qui est brillant est simple.

Je l'aurais fait

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

Je le ferais.

Même solution. Mais cela ne fonctionnerait pas pour moi, car après avoir cliqué sur cette ligne, je dois supprimer la première ligne, en créer une autre, et faire en sorte qu'elle suive le curseur et soit supprimée après avoir cliqué dessus également. J'ai fait ça :

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

Bouton enfoncé - créer une ligne. Bouton pressé - supprimer. C'est si difficile à deviner ?

Vous pouvez également les afficher et les masquer afin de ne pas avoir à les créer et les supprimer en permanence.

 
Nerd Trader #:

C'est aussi une solution. Mais cela ne fonctionne pas pour moi, car après avoir cliqué sur cette ligne, je dois supprimer la première ligne, en créer une autre, et faire en sorte qu'elle suive le curseur et soit supprimée après avoir cliqué dessus également. Je l'ai fait :

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

Et je laisserais une vérification de l'objet avant de créer et de supprimer

 
MakarFX #:

quelque chose a mal tourné) le signal ne vient pas du tout. 0 transaction.

pourquoi en double ?

mes variables ressemblent à ceci :

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

C'est peut-être ça le problème ?

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

quelque chose a mal tourné) le signal ne vient pas du tout. 0 transaction.

pourquoi en double ?

mes variables ressemblent à ceci :

C'est peut-être ça le problème ?

Effacez ça.

double openPrice;   // цена открытия позиции
et dans le code, utilisez
openPrice();
 
законопослушный гражданин #:


Pourquoi le double ?


double - nombres décimaux

int - nombres entiers

 
MakarFX #:

Supprimez ça !

Et dans le code, utilisez

Merci ! Le signal a disparu !

 
MakarFX #:

double - nombres décimaux

int - nombres entiers

clairement