Come codificare? - pagina 301

 

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

mladen:
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

tkuan77:
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

Terrance
 

Ciao 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

mladen:
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

tkuan77:
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

Terrance
 

Ciao Mladen,

Grazie per il grande aiuto come sempre!

Saluti

Terrance

mladen:
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/173124
 

Alcuni 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à

crsnape@btinternet.com:
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

crsnape@btinternet.com:
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)