Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 982

 

C'è il seguente codice, che disegna una casella di input sul grafico con il testo "Take Profit" allineato al 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 funziona in tempo reale, funziona correttamente:

Nel tester di strategia, l'allineamento è sul lato sinistro per qualche motivo.


In MT4, il codice funziona correttamente sia in tempo reale che nello Strategy Tester. Vedo tali trucchi solo in MT5...

Quale può essere il problema?

 
Oleg Remizov:

C'è il seguente codice, che disegna una casella di input sul grafico con il testo "Take Profit" allineato al centro:

Quando funziona in tempo reale, funziona correttamente:

Nel tester di strategia, l'allineamento è sul lato sinistro per qualche motivo.


In MT4, il codice funziona correttamente sia in tempo reale che nello Strategy Tester. Vedo tali trucchi solo in MT5...

Quale può essere il problema?

Nel tester di MT5, è stato già menzionato molte volte sul forum.

 

Buon pomeriggio a tutti. Signori, per favore consigliate come gestire la pressione simultanea del pulsante della tastiera e del pulsante del mouse.Per esempio, premendo il pulsante disegna un oggetto, e premendo lo stesso + il pulsante sinistro del mouse si disegna un altro oggetto.Ma risulta che quando si preme il pulsante della tastiera e il pulsante del mouse, vengono disegnati 2 oggetti.

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

Sto lavorando dal seguente articolo:

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

e ci sono un paio di cose nel codice che non capisco, per favore spiega il significato

1. Perché si usa l'operatore ::(risoluzione dell'ambito)?

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. cosa fa questa linea di codice "_errCode |= code"? (So che questo operatore è bitwise "or" lo stesso di "_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 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
Ciao c'è un advisor nella base per mt4 che può essere usato come un simulatore di trading manuale nel tester. Non è un cattivo simulatore. Voglio fare una domanda: è possibile fare un allenatore EA multitemporale. Posso usarlo su MT4 o su MT5?
 
bahtiyar:
Ciao c'è un advisor nella base per mt4 che può essere usato come un simulatore di trading manuale nel tester. Non è un cattivo simulatore. Voglio fare una domanda: è possibile fare un allenatore EA multitemporale. Su MT4 o su MT5?

Si può. Per MT5 è anche multicurrency, ma con alcune limitazioni. Purtroppo, il tester non funziona con la grafica. Più esattamente, non permette di modificare manualmente gli oggetti grafici.

 
Alexey Viktorov:

È possibile. E per mt5 è anche multivaluta, ma con alcune limitazioni. Purtroppo, il tester non funziona con la grafica. Più precisamente, non permette di modificare manualmente gli oggetti grafici.

Grazie per la tua risposta Alexey! Hai risposto a ciò che si può fare. Voglio chiarire la mia domanda: è possibile fare la visualizzazione in modo che io possa analizzare diversi timeframe, perché il tester sarà usato come un simulatore di trading manuale? Se sì, come posso farlo in generale7
 
bahtiyar:
Grazie per la tua risposta Alexey! Hai risposto a ciò che si può fare. Vorrei chiarire la mia domanda: è possibile fare la visualizzazione in modo che io possa analizzare diversi timeframe, perché il tester sarà usato come un simulatore di trading manuale. se possibile, come si può fare in termini generali7

Non c'è modo

 
bahtiyar:
Grazie per la tua risposta Alexey! Hai risposto a ciò che si può fare. Posso analizzare diversi timeframe nella visualizzazione, perché il tester sarà usato come un simulatore di trading manuale?
Vitaly Muzichenko:

Non c'è modo

Non è possibile farlo su MT4. È possibile regolare i grafici in modo da poter guardare attraverso la storia fino alla profondità necessaria.

Su MT5 il tester carica tutti i simboli e tutti i TF a cui si accede dal programma insieme agli indicatori se sono utilizzati nel codice.

Ma in ogni caso, avrete bisogno di un indicatore speciale per "saltare" sui grafici in modo da non voler fare trading. Oppure la velocità dovrà essere tale da non differire molto da quella reale.

 

Quanto aiuta il flag Optimize nella configurazione del meta-editor a velocizzare l'esecuzione del programma? Ho una specie di test lento... Quanto effetto ha questo Optimize?

Sfortunatamente, non posso usarlo a causa del crash quando si aggiungono istanze all'oggetto CDictionary.

Motivazione: