Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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:
Dimmi il modo corretto, questo è un calcolo Heiken Ashi
È un ritaglio dello standard
{
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:
Dimmi il modo corretto, questo è un calcolo Heiken Ashi
È un ritaglio dello standard
{
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?
Dimmi il modo corretto, questo è un calcolo Heiken Ashi
È un ritaglio dello standard
{
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:
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):
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.
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?
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?
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.
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.
BW MFI Squat bar, 3 buffer (se la memoria non mi inganna)