Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1555

 
MakarFX:

Ele não dá nenhum erro.

Os erros também podem ser algorítmicos, não apenas erros de tempo de execução!

Você precisa do código se quiser encontrar a causa.

MakarFX:

Com estas coordenadas o botão sai de cabeça para baixo, porque o comprimento do botão é contado +/- a partir do ponto X

Por que você precisa de um botão tão esquisito...?

 
MakarFX:

Eu posso sugerir a opção de ExpertRemove() quando um lucro ou prejuízo é alcançado

obrigado

Eu o li, mas não entendo totalmente a lógica das ações

Quando um evento específico é atingido, o Expert Advisor é desativado e removido do quadro, certo?

 
Mihail Matkovskij:

Os erros também podem ser algorítmicos, não apenas erros de tempo de execução!

Você precisa do código se quiser encontrar a causa.

Por que você precisa de um botão tão esquisito...?

Eu escrevi que acidentalmente tropecei em tal bug

aqui está o código... se você estiver interessado

//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+
 
законопослушный гражданин:

obrigado

Eu o li, mas não entendo bem a lógica de ação

quando um evento específico é atingido, o Expert Advisor é desativado e completamente removido do quadro, certo?

Sim
 
MakarFX:

Eu escrevi que acidentalmente tropecei em tal bug

aqui está o código... se você estiver interessado.

Portanto, aqui nenhum dos botões irá responder. O manipuladorOnChartEvent está vazio...

 
Mihail Matkovskij:

Portanto, aqui nenhum dos botões irá responder. O manipuladorOnChartEvent está vazio...

tente-o) um botão será pressionado e o outro não
 
MakarFX:
experimente) um botão pressiona e o outro não

Quem faz isso de qualquer forma, estabelece dimensões negativas e por quê, tenho vergonha de perguntar...?

 
MakarFX:
Sim

Entendi. Isso não vai funcionar para mim.

você poderia voltar a criar uma variável global para que, quando a coruja for desligada, o lote seja reinicializado para o início

ao menos assim

você criauma variável global

datetime Start;

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

e depois, se não houver ordens abertas/fechadas mais tarde "Start

Lots=Lot;
mas eu ainda não sei como criá-lo corretamente
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
законопослушный гражданин:

Entendi. Isso não vai funcionar para mim.

você poderia voltar a criar uma variável global para que, quando a coruja for desligada, o lote seja reiniciado para o início

ao menos assim

você criauma variável global

e depois, se não houver ordens abertas/fechadas mais tarde, "Start".

mas eu ainda não sei como criá-lo corretamente

Eu farei de você um botão)


 
Mihail Matkovskij:

Quem faz isso de qualquer forma, estabelece dimensões negativas e por quê, tenho vergonha de perguntar...?

Eu tropecei neste bug por acidente e me perguntei
Razão: