Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 982

 

Existe o seguinte código, que desenha uma caixa de entrada no gráfico com o texto "Take Profit" alinhado ao centro:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Edit();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EditDel();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает объект "Поле ввода"                                      | 
//+------------------------------------------------------------------+ 
void EditCreate(ENUM_BASE_CORNER corner,string name,int x,int y,int width,int height,string text,
                int font_size,ENUM_ALIGN_MODE align,bool read_only,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   string font="Consolas";
   color text_color=clrBlack;
   color border_clr=clrDimGray;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_EDIT,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_ALIGN,align);
      ObjectSetInteger(cid,name,OBJPROP_READONLY,read_only);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_color);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
      ChartRedraw(cid);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Edit()
  {
   long cid=ChartID();
   if(ObjectFind(cid,"edit tp")<0)
     {
      EditCreate(CORNER_LEFT_UPPER,"edit tp",50,50,150,20,"Take Profit",12,ALIGN_CENTER,true,clrBeige);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EditDel()
  {
   long cid=ChartID();
   ObjectDelete(cid,"edit tp");
  }
//+------------------------------------------------------------------+

Quando funciona em tempo real, funciona correctamente:

No testador de estratégias, o alinhamento está do lado esquerdo por alguma razão.


Em MT4, o código funciona correctamente tanto em tempo real como no Testador de Estratégia. Vejo tais truques apenas no MT5...

Qual poderá ser o problema?

 
Oleg Remizov:

Existe o seguinte código, que desenha uma caixa de entrada no gráfico com o texto "Take Profit" alinhado ao centro:

Quando funciona em tempo real, funciona correctamente:

No testador de estratégias, o alinhamento está do lado esquerdo por alguma razão.


Em MT4, o código funciona correctamente tanto em tempo real como no Testador de Estratégia. Vejo tais truques apenas no MT5...

Qual poderá ser o problema?

No testador do MT5, este já foi mencionado muitas vezes no fórum.

 

Boa tarde a todos. Cavalheiros, por favor aconselhem como lidar com o premir simultâneo do botão do teclado e do rato.Por exemplo, premir o botão desenha um objecto, e premir o mesmo + botão esquerdo do rato desenharia outro objecto.Mas acontece que quando se prime o botão do teclado e o botão do rato, 2 objectos são desenhados.

if(lparam==49)
 {
 ObjectCreate(0,"line",OBJ_TREND,0,time1,price1,time1+86400,price1);
 ChartRedraw(0);
 }
if(lparam==49 &&В MouseK==1)
 {
 ObjectCreate(0,"Marg",OBJ_LABEL,0,0,0);
 ObjectSetInteger(0,"Marg",OBJPROP_XDISTANCE,280); 
 ObjectSetInteger(0,"Marg",OBJPROP_YDISTANCE,20); 
 ChartRedraw(0);
 }  
 

Estou a trabalhar a partir do artigo seguinte:

https://www.mql5.com/ru/articles/4149

e há algumas coisas no código que eu não entendo, pode explicar o significado, por favor

1. Porque é utilizado o operador ::(resolução do âmbito)?

void OnStart()
  {
//---
   Test();
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Test                                                             |
//+------------------------------------------------------------------+
bool Test()
  {

   string pStream;
   string sources_filename="Websorce.txt";

   int hFile,iStringSize;

// read file contents 
   hFile=::FileOpen(sources_filename,FILE_TXT|FILE_READ|FILE_UNICODE);
   if(hFile==INVALID_HANDLE)
     {
      ::Print("error opening file "+sources_filename);
      return(false);
     }

   while(!::FileIsEnding(hFile))
     {


2. O que faz esta linha de código "_errCode |= código"? (sei que este operador é bitwise "ou" o mesmo que "_errCode =_errCode |code")


class JSONParser {
    private:
        int _pos;
        ushort _in[];
        int _len;
        string _instr;
        int _errCode;
        string _errMsg;
      

        void setError(int code=1,string msg="unknown error") {
          string _str = NULL;
            _errCode |= code;
Создание пользовательской новостной ленты в MetaTrader 5
Создание пользовательской новостной ленты в MetaTrader 5
  • www.mql5.com
В терминале MetaTrader 5 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
Olá, há um consultor na base do mt4 que pode ser usado como simulador de comércio manual no testador. Não é um mau simulador. Quero fazer uma pergunta: é possível fazer um formador EA multitempo. Posso utilizá-lo no MT4 ou no MT5?
 
bahtiyar:
Olá, há um consultor na base do mt4 que pode ser usado como simulador de comércio manual no testador. Não é um mau simulador. Quero fazer uma pergunta: é possível fazer um formador EA multitempo. Em MT4 ou em MT5?

Pode. Para MT5 também é multimoeda, mas com algumas limitações. Infelizmente, o testador não trabalha com gráficos. Mais exactamente, não permite a edição manual de objectos gráficos.

 
Alexey Viktorov:

Pode. E para mt5 é também multimoeda, mas com algumas limitações. Infelizmente, o testador não trabalha com gráficos. Mais precisamente, não lhe permite editar manualmente objectos gráficos.

Obrigado pela sua resposta Alexey! Respondeu ao que pode fazer. Quero esclarecer a minha pergunta. É possível fazer a visualização para poder analisar vários prazos, porque o testador será usado como um simulador de negociação manual? Em caso afirmativo, como posso fazer isto em geral7
 
bahtiyar:
Obrigado pela sua resposta Alexey! Respondeu ao que pode ser feito. Gostaria de esclarecer a minha pergunta. É possível fazer a visualização para que eu possa analisar vários prazos, porque o testador será utilizado como um simulador de negociação manual. se possível, como pode isto ser feito em termos gerais7

Nem pensar

 
bahtiyar:
Obrigado pela sua resposta Alexey! Respondeu ao que pode ser feito. Quero corrigir a minha pergunta. Posso analisar vários prazos na visualização, porque o testador será utilizado como um simulador de negociação manual?
Vitaly Muzichenko:

Nem pensar

Não o pode fazer no MT4. Pode ajustar os gráficos para que possa olhar através da história até à profundidade necessária.

No MT5 o testador carrega todos os símbolos e todos os TFs que são acedidos a partir do programa juntamente com os indicadores, se forem utilizados no código.

Mas em qualquer caso, será necessário um indicador especial para "saltar" sobre os gráficos de modo a não querer negociar. Ou a velocidade terá de ser tal que não será muito diferente da verdadeira.

 

Quanto é que a bandeira Optimize na configuração do meta-editor ajuda a acelerar a execução do programa? Tenho algo de lento teste... Que efeito tem isto Optimize?

Infelizmente, não posso usá-lo por causa do acidente ao adicionar instâncias ao objecto do CDictionary.