HELP !!!! convertire un indicatore da MT4 a MT5. - pagina 5

 

Ciao, sto cercando diconvertire un indicatore da mql4 a mql5. Fondamentalmente ho solo bisogno di una notifica sonora nell'MFI quando appare una barra rossa. Come faccio a collegare questo codice audio ora al nuovo mfi?

Ho allegato un esempio della vecchia versione funzionante:

File:
 

Dimmi il modo corretto, questo è un calcolo Heiken Ashi

È un ritaglio dello standard

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

La domanda sorge spontanea: se Open deve essere cercato dalla barra precedente, perché viene cercato dalla barra successiva nel codice?

È probabilmente corretto in questo modo, o sto fraintendendo qualcosa:

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Grazie!
 
Vitaly Muzichenko:

Dimmi il modo corretto, questo è un calcolo Heiken Ashi

È un ritaglio dello standard

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

La domanda sorge spontanea: se Open deve essere cercato dalla barra precedente, perché viene cercato dalla barra successiva nel codice?

Questo deve essere corretto, o sto fraintendendo qualcosa?

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Grazie!
In mql5, la direzione dell'indicizzazione delle barre è fatta di default. Pertanto, [i-1] sarà solo la prima barra a destra.
 
Vitaly Muzichenko:

Dimmi il modo corretto, questo è un calcolo Heiken Ashi

È un ritaglio dello standard

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

La domanda sorge spontanea: se Open deve essere cercato dalla barra precedente, perché viene cercato dalla barra successiva nel codice?

Probabilmente è il modo giusto o sto fraintendendo qualcosa:

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
Grazie!

Per vedere esattamente quale indice ha la barra più a destra e la più a sinistra del grafico, usate questo semplice metodo:

In qualsiasi indicatore, in MetaEditor, mettete un breakpoint sulla prima operazione dentro OnCakculate() (passo 1):

controllo dell'indicizzazione

Avviare il debug sui dati storici. Non appena iniziate il debugging sul vostro punto di interruzione, il debugging andrà in pausa. Poi aggiungete due espressioni all'osservazione: "time[rates_total-1]" e "time[0]" (passi 2 e 3). Ora possiamo facilmente vedere che in questa situazione (l'array time[] ha la direzione di indicizzazione predefinita, ArrayAsSeries non è stato applicato), l'elemento time[rates_total-1] sarà la barra più a destra nel grafico (passo 4).

Spero che questo metodo semplice e chiaro vi aiuti a controllare rapidamente la direzione dell'indicizzazione negli indicatori.

 
Alexey Viktorov:
In mql5 la direzione dell'indicizzazione delle barre è fatta di default. Quindi [i-1] sarà la prima barra da destra.

Ho capito approssimativamente, quindi non mi dimentico di usare ArraySetAsSeries.

La domanda è che in entrambi i codici mql4 e mql5 viene applicato lo stesso calcolo "i-1", perché la sottrazione se la formula dice barra precedente e non barra futura?

Vladimir Karputov:

Per vedere esattamente quale indice ha la barra più a destra e più a sinistra del grafico, usate questo semplice trucco:

In qualsiasi indicatore, in MetaEditor, mettete un breakpoint sulla prima operazione dentro OnCakculate() (passo 1):

Avviare il debug sui dati storici. Non appena iniziate il debugging sul vostro punto di interruzione, il debugging andrà in pausa. Poi aggiungete due espressioni all'osservazione: "time[rates_total-1]" e "time[0]" (passi 2 e 3). Ora possiamo facilmente vedere che in questa situazione (l'array time[] ha la direzione di indicizzazione predefinita, ArrayAsSeries non è stato applicato), l'elemento time[rates_total-1] sarà la barra più a destra nel grafico (passo 4).

Spero che questo metodo semplice e chiaro aiuti a controllare rapidamente la direzione dell'indicizzazione negli indicatori.

Grazie, non ne ero a conoscenza.

Avete qualche suggerimento sulla correttezza del calcolo?

 
Salve.
Ho bisogno di fare un avviso per l'indicatore CCI ARROWS.
Ho bisogno che segnali immediatamente dopo l'apparizione della freccia.
MT5
 

Ciao a tutti!!! Ho iniziato a modificare l'indicatore in MT5, ma non riesco a capire la funzione iTime, non riesco a farlo funzionare, qualcuno può dopilizzare l'indicatore in una condizione funzionante?????

L'indicatore legge il file, che si trova nella cartella MQL5\Files\evolution-dvoid\.

Dopo averlo scaricato, rinominalo in .csv

Grazie in anticipo.

 

Buongiorno a tutti, non sono un programmatore, ma uno dei miei amici dice che nel codice dell'indicatore Bill Williams'Market Facilitation Index (BW MFI) i calcoli non sono fatti strettamente secondo la formula classica: BW MFI = (ALTO - BASSO) / VOLUME E in più viene utilizzata una correzione aggiuntiva dei dati. Questo è infatti un errore, e di conseguenza l'indicatore visualizza dati errati!

Si prega di consigliare come risolvere questo errore nell'indicatore (rimuovere la correzione dei dati aggiuntivi) e ricevere
indicatore che funziona rigorosamente secondo la formula: BW MFI = (ALTO - BASSO) / VOLUME ?????


//+------------------------------------------------------------------+

//| MarketFacilitationIndex.mq5 |

//| Copyright 2009, MetaQuotes Software Corp.

//| http://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "2009, MetaQuotes Software Corp.

#proprietà link "http://www.mql5.com"

//--- impostazioni dell'indicatore

#proprietà indicator_separate_window

#proprietà indicator_buffers 2

#proprietà indicator_plots 1

#proprietà indicator_type1 DRAW_COLOR_HISTOGRAM

#property indicator_color1 Lime,SaddleBrown,Blue,Pink

#proprietà indicator_width1 2

//--- parametro di ingresso

input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; //volumi

//---- buffer

doppio ExtMFIBuffer[];

doppio ExtColorBuffer[];

//+------------------------------------------------------------------+

//| funzione di inizializzazione dell'indicatore personalizzato

//+------------------------------------------------------------------+

void OnInit()

{

//---- indicatori

SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA);

SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX);

//--- nome per DataWindow

IndicatorSetString(INDICATOR_SHORTNAME, "BWMFI");

//--- impostare la precisione

IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//----

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

void CalculateMFI(const int start,const int rates_total,

const double &high[],

const double &low[],

const long &volume[])

{

int i=inizio;

bool mfi_up=true,vol_up=true;

//--- calcolare i primi valori di mfi_up e vol_up

se(i>0)

{

int n=i;

mentre(n>0)

{

if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; break; }

if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=falso; break; }

//--- se i valori mfi sono uguali continua

n--;

}

n=i;

mentre(n>0)

{

if(volume[n]>volume[n-1]) { vol_up=true; break; }

if(volume[n]<volume[n-1]) { vol_up=falso; break; }

//--- se i volumi reali sono uguali continua

n--;

}

}

//---

while(i<rates_total && !IsStopped())

{

se(volume[i]==0)

{

if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];

altrimenti ExtMFIBuffer[i]=0;

}

altrimenti ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i];

//--- calcolare i cambiamenti

se(i>0)

{

if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;

if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=falso;

se(volume[i]>volume[i-1]) vol_up=true;

if(volume[i]<volume[i-1]) vol_up=falso;

}

//--- impostare i colori

if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;

if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;

if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;

if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;

i++;

}

}

//+------------------------------------------------------------------+

//| funzione di iterazione dell'indicatore personalizzata

//+------------------------------------------------------------------+

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[])

{

//---

int start=0;

//---

se(inizio<prev_calcolato) inizio=prev_calcolato-1;

//--- calcolare con tick o volumi reali

se(InpVolumeType==VOLUME_TICK)

CalculateMFI(start,rates_total,high,low,tick_volume);

else

CalculateMFI(start,rates_total,high,low,volume);

//--- normalizzare l'ultimo valore mfi

se(tassi_totale>1)

{

datetime ctm=TimeTradeServer(),lasttm=time[rates_total-1],nexttm=lasttm+datetime(PeriodSeconds());

if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)

{

double correction_koef=double(1+ctm-lasttm)/double(nexttm-lasttm);

ExtMFIBuffer[rates_total-1]*=correzione_koef;

}

}

//---

return(rates_total);

}

//+------------------------------------------------------------------+

 

Per favore, ditemi che tipo di codice è questo e come trasformarlo in un indicatore MT5?


//Questo è un indicatore basato sul volume. Assicuratevi di usare un ingresso di volume adeguato.


//Squat bars sono una battaglia tra i tori e gli orsi, con un sacco di acquisti e vendite ma poco movimento di prezzo.
/Una barra di squat sarà una delle prime tre o delle ultime tre barre l'85% delle volte alla fine di un trend.
//Sebbene tutte le tendenze finiscano con uno squat, tutti gli squat NON sono la fine di una tendenza.

studio("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((alto-basso)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) e (r_v > 0)
barcolor(squat_f ? blue : na)
 
Olexiy Polyakov:

Per favore, ditemi che tipo di codice è questo e come trasformarlo in un indicatore MT5?


//Questo è un indicatore basato sul volume. Assicuratevi di usare un ingresso di volume adeguato.


//Squat bars sono una battaglia tra i tori e gli orsi, con un sacco di acquisti e vendite ma poco movimento di prezzo.
/Una barra di squat sarà una delle prime tre o delle ultime tre barre l'85% delle volte alla fine di un trend.
//Sebbene tutte le tendenze finiscano con uno squat, tutti gli squat NON sono la fine di una tendenza.

studio("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((alto-basso)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) e (r_v > 0)
barcolor(squat_f ? blue : na)

BW MFI Squat bar, 3 buffer (se la memoria non mi inganna)
Motivazione: