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

 
MakarFX:

Il n'émet aucune erreur.

Les erreurs peuvent également être algorithmiques, et pas seulement des erreurs d'exécution!

Vous avez besoin du code si vous voulez trouver la cause.

MakarFX:

Avec ces coordonnées, le bouton sort à l'envers, car la longueur du bouton est comptée à partir du point X.

Pourquoi avez-vous besoin d'un bouton aussi bizarre... ?

 
MakarFX:

Je peux suggérer l'option ExpertRemove() lorsqu'un profit ou une perte est atteint.

merci

Je l'ai lu, mais je ne comprends pas bien la logique des actions.

Lorsqu'un événement spécifique est atteint, le conseiller expert est désactivé et retiré du graphique, n'est-ce pas ?

 
Mihail Matkovskij:

Les erreurs peuvent également être algorithmiques, et pas seulement des erreurs d'exécution!

Vous avez besoin d'un code si vous voulez trouver la cause.

Pourquoi avez-vous besoin d'un bouton aussi bizarre... ?

J'ai écrit que je suis accidentellement tombé sur un tel bug.

voici le code... si cela vous intéresse

//+------------------------------------------------------------------+
//|                                                          BAG.mq4 |
//|                                           Copyright 2020, DrMak. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, DrMak."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   CreateButton(0,"Button_1",0,200,100,100,50,CORNER_RIGHT_UPPER," ","START","Arial Black",10,
   clrWhite,clrGreen,BORDER_SUNKEN,false,false,false,false,false,0);
   CreateButton(0,"Button_2",0,200,100,-100,-50,CORNER_RIGHT_UPPER," ","START","Arial Black",10,
   clrWhite,clrGreen,BORDER_SUNKEN,false,false,false,false,false,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"Button_");
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Создает кнопку                                                   |
//+------------------------------------------------------------------+
bool CreateButton(const long              chart_ID=0,               // ID графика
                  const string            name="Button",            // имя кнопки
                  const int               sub_window=0,             // номер подокна
                  const int               x=0,                      // координата по оси X
                  const int               y=0,                      // координата по оси Y
                  const int               width=50,                 // ширина кнопки
                  const int               height=18,                // высота кнопки
                  const int               corner=0,                 // угол графика для привязки
                  const string            tool="TOOLTIP",           // TOOLTIP
                  const string            text="Button",            // текст
                  const string            font="Arial",             // шрифт
                  const int               font_size=10,             // размер шрифта
                  const color             clr=clrBlack,             // цвет текста
                  const color             back_clr=C'236,233,216',  // цвет фона
                  ENUM_BORDER_TYPE        border_type=BORDER_FLAT,  // тип границы
                  const bool              state=false,              // нажата/отжата
                  const bool              back=false,               // на заднем плане
                  const bool              selection=false,          // выделить для перемещений
                  const bool              selected=false,           // выделить для перемещений
                  const bool              hidden=true,              // скрыт в списке объектов
                  const long              z_order=0)                // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим кнопку
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
     {
      Print(__FUNCTION__, ": не удалось создать кнопку! Код ошибки = ",GetLastError()); return(false);
     }
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
   ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tool);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border_type);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selected);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
 
законопослушный гражданин:

merci

Je l'ai lu, mais je ne comprends pas bien la logique de l'action.

lorsqu'un événement spécifique est atteint, le conseiller expert est désactivé et complètement retiré du graphique, n'est-ce pas ?

Oui
 
MakarFX:

J'ai écrit que je suis accidentellement tombé sur un tel bug.

Voici le code... si vous êtes intéressé.

Donc ici, aucun des boutons ne répondra. Le gestionnaireOnChartEvent est vide...

 
Mihail Matkovskij:

Donc ici, aucun des boutons ne répondra. Le gestionnaireOnChartEvent est vide...

essayez-le) un bouton sera pressé et l'autre ne le sera pas.
 
MakarFX:
essayez-le) un bouton appuie et l'autre ne le fait pas.

Qui fait ça d'ailleurs, fixe des dimensions négatives et pourquoi, je suis gêné de le demander... ?

 
MakarFX:
Oui

Je l'ai. Ça ne marchera pas pour moi.

vous pourriez revenir à la création d'une variable globale de sorte que lorsque le hibou est éteint, le lot est remis au début

au moins comme ceci

vous créezune variable globale

datetime Start;

int OnInit()
{
   Start=TimeCurrent();
.....................
}
void OnTick()
{
   if (!IsTradeAllowed()) 
   {
      DrawLABEL("Торговля",0,0,0,Red,"Торговля запрещена");
      Start=TimeCurrent();
      return;
   } 
.....................
}

et ensuite s'il n'y a pas d'ordres ouverts/fermés plus tard "Start"

Lots=Lot;
mais je ne sais toujours pas comment le créer correctement.
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
законопослушный гражданин:

Je l'ai. Ça ne marchera pas pour moi.

vous pourriez revenir à la création d'une variable globale de sorte que lorsque le hibou est éteint, le lot est remis au début

au moins comme ceci

vous créezune variable globale

et ensuite, s'il n'y a pas d'ordres ouverts/fermés, "Start".

mais je ne sais toujours pas comment le créer correctement.

Je vais vous faire un bouton)


 
Mihail Matkovskij:

Qui fait ça d'ailleurs, fixe des dimensions négatives et pourquoi, je suis gêné de le demander... ?

Je suis tombé sur ce bug par hasard et je me suis demandé