![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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 Mladen,
Grazie per la spiegazione, ma cosa intendi per valore delle prime barre chiuse? È il valore delle prime barre chiuse o le barre correnti o dopo? E il significato di current+0 o current+1?
saluti
Terrance
Terrance
MODE_MAIN significa che stai leggendo il valore della linea stocastica. MODE_SIGNAL significa che stai leggendo il valore della linea del segnale stocastico.
Per quanto riguarda SHIFT: è lo stesso per ogni indicatore (anche quelli personalizzati). Per esempio: SHIFT=0 significa il valore della barra corrente, SHIFT=1 significa il valore della prima barra chiusa e così via......
Terrance
La barra attuale non è ancora, per definizione, una barra chiusa
La prima barra prima della barra attuale è la prima barra chiusa
Ciao Mladen,
Grazie per la spiegazione, ma cosa intendi per valore della prima barra chiusa? È il valore della prima barra chiusa o la barra corrente o dopo? E il significato di current+0 o current+1?
saluti
TerranceCiao Mladen,
Quindi ho ragione di dire che:
corrente+0 è uguale al valore 0,
corrente+1 è uguale al valore 1,
current+2 è uguale al valore 2,
e così via..... per SHIFT?
Ad es:
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); è uguale a iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);
Ho ragione a dire così?
Saluti
Terrance
Terrance
La barra attuale non è ancora, per definizione, una barra chiusa
La prima barra prima della barra attuale è la prima barra chiusa...
Terrance
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); è l'attuale
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); è il primo chiuso (precedente)
...
...
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); è il più vecchio sul grafico
PS: in questo post hai sime più informazioni sulle barre : https://www.mql5.com/en/forum/173124
Ciao Mladen,
Quindi ho ragione di dire che:
current+0 è uguale al valore 0,
current+1 è uguale al valore 1,
current+2 è uguale al valore 2,
e così via..... per SHIFT?
Ad es:
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 1); è uguale a iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1);
Ho ragione a dire così?
Saluti
TerranceCiao Mladen,
Grazie per il grande aiuto come sempre!![](https://c.mql5.com/forextsd/smiles/smile.png)
Saluti
Terrance
Terrance
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 0); è la corrente
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, 1); è il primo chiuso (precedente)
...
...
iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Bars-1); è il più vecchio sul grafico
PS: in questo post hai sime più informazioni sui bar: https: //www.mql5.com/en/forum/173124Alcuni problemi
Ciao a tutti,
Ho testato il mio codice ed è quasi pronto. Ho alcune domande che spero possiate aiutarmi.
Ho messo questo in int init():
if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)
{
Alert("ERRORE- BARRE INSUFFICIENTI PER CALCOLARE LA SMA SULGRADO GIORNALIERO");
return(0);
}
Lo SlowMAPeriod è 200. Quando faccio il backtest dal 01.01.2009 solleva questo errore anche se posso vedere chiaramente sul mio grafico che ci sono abbastanza barre per calcolare la 200SMA dal 2008. Mi manca qualcosa qui?
2. Piazzo operazioni sul grafico H4 ma solo nella direzione del trend giornaliero. Disegno i valori utilizzando il seguente codice:
SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
Poi, quando cerco una posizione lunga, faccio riferimento ad essa usando
if (FastMACurrent > SlowMACurrent && ... etc ... )
Questo è corretto perché non sembra filtrare correttamente i miei trade?
3. Uso anche un filtro di tendenza sul grafico H4 prendendo posizioni lunghe solo quando il prezzo ha superato il massimo precedente degli ultimi 120 periodi (e poi rimane sopra il minimo dei 120 periodi). Uso questo codice:
Donchian_Low = Low;
Donchian_High = High;
static bool UpTrend = FALSE;
static bool DownTrend = FALSE;
se (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}
if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}
Poi uso il seguente codice (diciamo per posizioni lunghe):
if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... )
Ma non sembra funzionare perché quando controllo il mio grafico backtestato contro un canale di Donchian di 120 periodi non si lega. Qualche idea?
Grazie in anticipo.
...
1. Posizionatelo all'inizio della funzione start(). Init è inaffidabile quando si tratta di dati come Bars
2. Questa condizione è vera ogni volta che FastMACurrent > SlowMACurrent. È quello che volevi o forse stai cercando degli incroci?
3. Probabilmente è in relazione con il punto 2. Devi "restringere" le condizioni in cui gli ordini possono essere inseriti poiché in questo modo copre troppe possibilità
Ciao a tutti,
Ho testato il mio codice ed è molto vicino. Ho alcune domande che spero possiate aiutarmi.
Ho messo questo in int init():
if (Bars < D1FastMAPeriod || Bars < D1SlowMAPeriod)
{
Alert("ERRORE- BARRE INSUFFICIENTI PER CALCOLARE LA SMA SULGRAFICO GIORNALIERO");
return(0);
}
Lo SlowMAPeriod è 200. Quando faccio il backtest dal 01.01.2009 solleva questo errore anche se posso vedere chiaramente sul mio grafico che ci sono abbastanza barre per calcolare la 200SMA dal 2008. Mi manca qualcosa qui?
2. Piazzo operazioni sul grafico H4 ma solo nella direzione del trend giornaliero. Disegno i valori utilizzando il seguente codice:
SlowMACurrent = iMA(Symbol(), PERIOD_D1, D1SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
FastMACurrent = iMA(Symbol(), PERIOD_D1, D1FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
Poi, quando cerco una posizione lunga, faccio riferimento ad essa usando
if (FastMACurrent > SlowMACurrent && ... etc ... )
Questo è corretto perché non sembra filtrare correttamente i miei trade?
3. Uso anche un filtro di tendenza sul grafico H4 prendendo posizioni lunghe solo quando il prezzo ha superato il massimo precedente degli ultimi 120 periodi (e poi rimane sopra il minimo dei 120 periodi). Uso questo codice:
Donchian_Low = Low;
Donchian_High = High;
static bool UpTrend = FALSE;
static bool DownTrend = FALSE;
se (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}
if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}
Poi uso il seguente codice (diciamo per posizioni lunghe):
if (FastMACurrent > SlowMACurrent && UpTrend == TRUE && DownTrend == FALSE ... etc ... )
Ma non sembra funzionare perché quando controllo il mio grafico backtestato contro un canale di Donchian di 120 periodi non si lega. Qualche idea?
Grazie in anticipo.Ciao mladen,
1. OK lo farà.
2. Sì, è vero, non voglio entrare dalla croce, ma solo usarla per un filtro lungo/corto sui grafici a breve termine, per esempio se la MA veloce è sopra la MA lenta sul grafico giornaliero, voglio solo che consideri le posizioni lunghe sul grafico H4. Quindi penso di aver codificato questo correttamente?
3. Non sono sicuro di sapere cosa intendi, ma ho messo questo sotto init start()
bool statico UpTrend = FALSE;
static bool DownTrend = FALSE;
se (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}
if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}
Dovrei mettere le variabili statiche bool all'inizio per renderle globali? Potrebbe essere questa la causa?
...
3. Cosa succede quando Chiedi a Donchian_Low (che è la maggior parte delle volte). Le vostre variabili statiche mostrano ancora il "vecchio" stato anche se non è più valido (eredita lo stato e in questo modo segnala che è sopra o sotto anche quando non lo è più). Controllate se è questo che vi causa problemi
Ciao mladen,
1. OK andrà bene.
2. Sì, è vero, non voglio entrare al di fuori dell'incrocio, lo uso solo per un filtro lungo/corto su grafici a breve termine, per esempio se la MA veloce è sopra la MA lenta sul grafico giornaliero, voglio solo che consideri le posizioni lunghe sul grafico H4. Quindi penso di aver codificato questo correttamente?
3. Non sono sicuro di sapere cosa intendi, ma ho messo questo sotto init start()
bool statico UpTrend = FALSE;
static bool DownTrend = FALSE;
se (Ask > Donchian_High) {UpTrend = TRUE; DownTrend = FALSE;}
if (Bid < Donchian_Low) {UpTrend = FALSE; DownTrend = TRUE;}
Dovrei mettere le variabili statiche bool all'inizio per renderle globali? Potrebbe essere questa la causa?Buona osservazione. Darò un'occhiata a questo.
Una domanda sulle funzioni, è possibile chiamare una funzione all'interno di una funzione? Per esempio, ho questa funzione
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
se (... etc
Poi più tardi la chiamo
double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)