Ciao, ho convertito l'indicatore da Metatrader 4 a Metatrader 5, ma ora mostra le frecce nei posti sbagliati come in Metatrader 4 sul timeframe minuto. Ho fatto un errore da qualche parte o è a causa delle diverse quotazioni sul grafico a minuti delle versioni 4 e 5 del terminale di un broker?
#property strict#property indicator_chart_window#property indicator_buffers2#property indicator_plots2#property indicator_color1clrBlue#property indicator_color2clrRed#property indicator_width11#property indicator_width21//+------------------------------------------------------------------+double SignalBufferRed[];
double SignalBufferBlue[];
datetime TimeAlert=0;
ENUM_TIMEFRAMES tf0,tf1,tf2,tf3,tf4,tf5; // Было интint S=0;
//+------------------------------------------------------------------+intOnInit()
{
SetIndexBuffer(0,SignalBufferBlue);
SetIndexBuffer(1,SignalBufferRed);
//--- задать рисование линии PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_ARROW);
//--- задание стиля для рисования линии PlotIndexSetInteger(0,PLOT_ARROW,233);
//--- задать рисование линии PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_ARROW);
//--- задание стиля для рисования линии PlotIndexSetInteger(1,PLOT_ARROW,234);
PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,5);
PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-5);
//--- установим в качестве пустого значения 0 PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- установим в качестве пустого значения 0 PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
tf0=Period();
tf1=next_period(tf0+1);
tf2=next_period(tf1+1);
tf3=next_period(tf2+1);
tf4=next_period(tf3+1);
tf5=next_period(tf4+1);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,// обработано баров на предыдущем вызове constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i,limit;
limit=rates_total-prev_calculated-1;
if(rates_total<1) return(0);
double d=(high[1]-low[1]+high[2]-low[2])/2;
for(i=limit; i>=0; i--)
{
if(S<1 && NormalizeDouble(open[i]-close[i],_Digits)<0 &&
NormalizeDouble(iOpen(NULL,tf1,iBarShift(NULL,tf1,time[i],false))-iClose(NULL,tf1,iBarShift(NULL,tf1,time[i],false)),_Digits)<0 &&
NormalizeDouble(iOpen(NULL,tf2,iBarShift(NULL,tf2,time[i],false))-iClose(NULL,tf2,iBarShift(NULL,tf2,time[i],false)),_Digits)<0 &&
NormalizeDouble(iOpen(NULL,tf3,iBarShift(NULL,tf3,time[i],false))-iClose(NULL,tf3,iBarShift(NULL,tf3,time[i],false)),_Digits)<0 &&
NormalizeDouble(iOpen(NULL,tf4,iBarShift(NULL,tf4,time[i],false))-iClose(NULL,tf4,iBarShift(NULL,tf4,time[i],false)),_Digits)<0 &&
NormalizeDouble(iOpen(NULL,tf5,iBarShift(NULL,tf5,time[i],false))-iClose(NULL,tf5,iBarShift(NULL,tf5,time[i],false)),_Digits)<0)
{
SignalBufferBlue[i]=low[i]-d;
...
S=1;
}
if(S>-1 && NormalizeDouble(open[i]>close[i],_Digits)>0 &&
NormalizeDouble(iOpen(NULL,tf1,iBarShift(NULL,tf1,time[i],false))-iClose(NULL,tf1,iBarShift(NULL,tf1,time[i],false)),_Digits)>0 &&
NormalizeDouble(iOpen(NULL,tf2,iBarShift(NULL,tf2,time[i],false))-iClose(NULL,tf2,iBarShift(NULL,tf2,time[i],false)),_Digits)>0 &&
NormalizeDouble(iOpen(NULL,tf3,iBarShift(NULL,tf3,time[i],false))-iClose(NULL,tf3,iBarShift(NULL,tf3,time[i],false)),_Digits)>0 &&
NormalizeDouble(iOpen(NULL,tf4,iBarShift(NULL,tf4,time[i],false))-iClose(NULL,tf4,iBarShift(NULL,tf4,time[i],false)),_Digits)>0 &&
NormalizeDouble(iOpen(NULL,tf5,iBarShift(NULL,tf5,time[i],false))-iClose(NULL,tf5,iBarShift(NULL,tf5,time[i],false)),_Digits)>0)
{
SignalBufferRed[i]=high[i]+d;
...
S=-1;
}
}
return(rates_total);
}
//+------------------------------------------------------------------+ENUM_TIMEFRAMES next_period(int per) // Было инт
{
if(per > PERIOD_W1) return(PERIOD_MN1); // Былы цифры вместо период_if(per > PERIOD_D1) return(PERIOD_W1); // Былы цифры вместо период_if(per > PERIOD_H4) return(PERIOD_D1); // Былы цифры вместо период_if(per > PERIOD_H1) return(PERIOD_H4); // Былы цифры вместо период_if(per > PERIOD_M30) return(PERIOD_H1); // Былы цифры вместо период_if(per > PERIOD_M15) return(PERIOD_M30); // Былы цифры вместо период_if(per > PERIOD_M5) return(PERIOD_M15); // Былы цифры вместо период_if(per > PERIOD_M1) return(PERIOD_M5); // Былы цифры вместо период_if(per == PERIOD_M1) return(PERIOD_M1); // Былы цифры вместо период_return(Period());
}
//+------------------------------------------------------------------+
Yevgen Butov: Ciao, ho rielaborato l'indicatore da metatrader 4 a metatrader 5, ma ora mostra le frecce nei posti sbagliati come in metatrader 4 su un periodo minuto. Ho fatto un errore da qualche parte o è a causa delle diverse quotazioni sul grafico a minuti delle versioni 4 e 5 del terminale di un broker?
Fate un semplice test nell'indicatore MQL5 e MQL4 - stampate il tempo della barra #0:
Aggiunto questo testo a OnCalculate, l'ora della barra cambia ogni minuto ora, ma ora nessuna freccia. Quale potrebbe essere l'errore?
Non hai capito bene. Confrontare i valori stampati. Confronta il tempo della barra #0 e il tempo della barra #rates_total-1. Confronta sia lì che lì...
Buon pomeriggio!
Sai come costruire un indicatore per il mercato?
Ho un file con estensione .mq5 e alcuni file include con estensione .mqh.
Per quanto ho capito, non è possibile allegare .mqh al file .mqh tramite risorse, dovrei davvero convertire tutto in un unico file manualmente?
E se ci fosse una nuova versione:? È pazzesco +)))
Grazie.
Si invia il file compilato (.ex5) al Mercato. Questo file conterrà già tutti i vostri file di inclusione.
Una contro domanda: "Perché avete bisogno di assegnare esplicitamente un simbolo qui?
Se usate questa funzione, dovete assegnare un simbolo a m_symbol in OnInit:
In questo caso, se si esegue l'EA sul simbolo "EURUSD.m", "EURUSD.m" sarà automaticamente impostato per m_symbol.
Il fatto è che Expert Advisor è in bilico su un simbolo diverso. E ho bisogno di aggiornare le quotazioni per EURUSD.m
Ho trovato questa soluzione ma penso che sia sbagliata
Questo è il punto, l'EA è in bilico su un simbolo diverso. E ho bisogno di aggiornare le quotazioni per EURUSD.m
Ho trovato questa soluzione ma non credo che sia giusta
Gente, per favore consigliatemi!!!
Come può la funzione TimeCurrent() passare i valori di ore e minuti alle variabili in modo che possano lavorare con questi valori?
O per esempio voglio passare ore e minuti con la stringa (12:15) e passare 12 e 15 alle variabili. Come fare?Gente, per favore consigliatemi!!!
Come può la funzione TimeCurrent() passare i valori di ore e minuti alle variabili in modo da poter lavorare con questi valori?
O per esempio voglio passare l'ora e i minuti con la stringa (12:15) e passare 12 e 15 alle variabili. Come fare?TimeToStruct
TimeToStruct
Ciao, ho rielaborato l'indicatore da metatrader 4 a metatrader 5, ma ora mostra le frecce nei posti sbagliati come in metatrader 4 su un periodo minuto. Ho fatto un errore da qualche parte o è a causa delle diverse quotazioni sul grafico a minuti delle versioni 4 e 5 del terminale di un broker?
Fate un semplice test nell'indicatore MQL5 e MQL4 - stampate il tempo della barra #0:
Questo aiuterà a capire come stanno le cose...
Fate un semplice test nell'indicatore MQL5 e MQL4 - stampate il tempo della barra #0:
Questo aiuterà a capire come stanno le cose...
Aggiunto questo testo a OnCalculate, l'ora della barra cambia ogni minuto ora, ma ora non ci sono più frecce. Quale potrebbe essere l'errore?
Aggiunto questo testo a OnCalculate, l'ora della barra cambia ogni minuto ora, ma ora nessuna freccia. Quale potrebbe essere l'errore?
Non hai capito bene. Confrontare i valori stampati. Confronta il tempo della barra #0 e il tempo della barra #rates_total-1. Confronta sia lì che lì...