Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 162

 

Ho scritto l'indicatore più semplice in mql4, volevo tradurlo in mql5, e sto lottando da una settimana, ma non funziona! Mi stanno venendo i nervi, odio mql5 perché ho già scritto 88 linee di un semplice indicatore di 34 linee in mql5!

Ecco il codice su mql4:

#property indicator_separate_window
#property  indicator_level1 0
#property indicator_buffers 3

extern int kol_vo_bar = 15;
extern string Symbol_1 = "GBPJPY";
extern string Symbol_2 = "EURJPY";

double SpreadA[];
double SpreadB[];
double Spread[];

int init()
{
   SetIndexBuffer(0,SpreadA);
   SetIndexBuffer(1,SpreadB);
   SetIndexBuffer(2,Spread);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);
   return(0);
}

int start()
{
   int k;
   for(k = 0; k < iBars(Symbol_1,0); k++)
   {
            SpreadA[k] = iClose(Symbol_1,0,k)*100/iOpen(Symbol_1,0,k+kol_vo_bar)-100;
            SpreadB[k] = iClose(Symbol_2,0,k)*100/iOpen(Symbol_2,0,k+kol_vo_bar)-100;                  
            Spread[k] = SpreadA[k]-SpreadB[k];
   }
   return(0);
}

Ed ecco il codice su mql5:

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2
//--- plot Label2
#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

//--- input parameters
input int kol_vo_bar=96;
input string   Symbol_1="GBPJPY";
input string   Symbol_2="EURJPY";
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
double         Label3Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,Label2Buffer,INDICATOR_DATA);
   SetIndexBuffer(2,Label3Buffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   for(int k=0; k<Bars(_Symbol,_Period); k++)
   {
            Label1Buffer[k] = iClose(Symbol_1,PERIOD_CURRENT,k)*100/iOpen(Symbol_1,PERIOD_CURRENT,k)-100;
            Label2Buffer[k] = iClose(Symbol_2,PERIOD_CURRENT,k)*100/iOpen(Symbol_2,PERIOD_CURRENT,k)-100;                  
            Label3Buffer[k] = Label1Buffer[k]-Label2Buffer[k];
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
double iClose(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyClose(symbol,tf,index,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}
double iOpen(string symbol,ENUM_TIMEFRAMES tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   if(CopyOpen(symbol,tf,index+kol_vo_bar,1,Arr)>0)
        return(Arr[0]);
   else return(-1);
}

Lelinee dell'indicatore non sono visualizzate correttamente in MT5.

Cosa ho fatto di male?

Brava gente, aiutatemi, abbiate pietà di questo povero ragazzo, sono sull'orlo di una crisi, sinceramente. È un peccato che non si possa bestemmiare qui!

Moderatore, non bannarmi, prima dammi un avvertimento se qualcosa non va.

 

Stai ricalcolando tutte le barre disponibili ad ogni tick, il che è altamente sub-ottimale, ed è terribilmente lento.

 
zlodei:


Lelinee dell'indicatore non sono visualizzate correttamente in MT5.

Cosa ho scritto di sbagliato?

Dov'è il lavoro con PlotIndexXXX?

non vi ha permesso di leggere la documentazione e gli esempi?



Moderatore, non bannarmi, prima dammi un avvertimento se qualcosa non va.

Andate nel codebase e leggetelo, ci sono centinaia di esempi.
 
sergeev:

Dove si lavora con PlotIndexXXX?

Troppo pigro per leggere la documentazione e gli esempi?


Vai su codebase e leggilo. ci sono centinaia di esempi.

Mi chiedo perché questo sia necessario all'inizio del codice:

#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_SECTION
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  2

#property  indicator_label2  "Label2"
#property  indicator_type2   DRAW_SECTION
#property  indicator_color2  clrBlue
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  2

#property  indicator_label3  "Label3"
#property  indicator_type3   DRAW_HISTOGRAM
#property  indicator_color3  clrGray
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1

Tutte le proprietà per ogni linea sono specificate qui? O non è sufficiente per mql5, ora ho bisogno di scrivere le proprietà delle linee attraverso PlotIndex?

Ho letto molti esempi e documentazione, non ne capisco l'80%, per esempio, perché complicare le cose semplici?

Per esempio in mql4:

   SetIndexStyle(0,DRAW_SECTION,EMPTY,2,Red);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,2,Blue);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Gray);

In mql5 ora non posso nemmeno immaginare quanto possa richiedere specificare gli stili di linea, 50 linee probabilmente, e il risultato è 1 e lo stesso.

MQL5 è per i PROGRAMMATORI, MQL4 è per i TRADERS. Se vuoi controllare il sistema, programmalo con mql4, e se vuoi la stessa cosa con mt5, chiedi a un programmatore di farlo, o smetti di fare trading e passa del tempo a studiare mql5.

Con il rilascio di MT5, io, come trader, ho notato solo un miglioramento, è un tester a 64 bit con la possibilità di utilizzare tutti i core della CPU.

La complicazione del linguaggio mql non influenzerà in alcun modo i risultati del trading manuale o automatico. La complicazione del linguaggio è importante per i programmatori, sì - possiamo fare bei pulsanti e pannelli, integrare con tutti i tipi di strane WinAPI, ecc, ma non ha influenzato i risultati del trading. Quindi perché tutte queste difficoltà quando si può programmare in mql4, e controllarlo, ma c'è solo 1 GRANDE meno - non c'è un terminale x64 e un tester con la possibilità di usare tutti i core. Se facessero queste 2 cose - non ci sarebbe nessun prezzo per MT4. Ma non li faranno di proposito, in modo che non crei concorrenza per MT5 e la gente come me soffra o paghi.

Comunque grazie per la vostra attenzione, per l'"aiuto". Non commento, non andrò al ramo comunque, è solo la mia opinione, non di più, devo andare.

 
Sono nuovo qui. Puoi dirmi se posso scambiare i futures dell'indice rts in mt5? Come posso visualizzare un singolo grafico di quote dal 2009 a oggi?
 
sbr080:
Sono nuovo qui. Puoi dirmi se posso scambiare i futures dell'indice rts in mt5? Come faccio a stampare un grafico delle quotazioni dal 2009 a oggi?
Devi chiedere al tuo broker di darti il grafico adesivo.
 
barabashkakvn:
Chiedete al vostro broker di darvi un grafico incollato.
Posso incollarlo da solo?
 
sbr080:
posso incollarlo da solo?
No, solo un broker. Se lo fate da soli, dovrete scrivere il vostro indicatore.
 
barabashkakvn:
No, solo un broker. Se lo fai da solo, dovrai scrivere il tuo indicatore.
Grazie.
 
Potete consigliarmi se è possibile per un Expert Advisor visualizzare indicatori tecnici su un grafico con i parametri che utilizza? Cioè nello stesso modo in cui si usa la visualizzazione nello strategy tester. Non riesco a trovare questa informazione da nessuna parte.
Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Технические индикаторы - Документация по MQL5