Aiuto per la codifica - pagina 422

 
Mastercash:
Ho impostato il parametro use moneymanagement a false.... ma per quanto riguarda i parametri Lots, non si tratta dei Lots ma del numero di ordini aperti. Non voglio che l'ea apra più di 5 ordini......in un dato momento, per questo ho impostato il parametro NumberofTrades a 5, sui parametri di input ma mi sfiderà comunque, e prenderà più di 5 ordini, minacciando così il mio moneymanagement!

Mastercash

Questo è il risultato di un test:

Come potete vedere non ha mai aperto più di 5 ordini per lo stesso simbolo e lo stesso numero magico allo stesso tempo

File:
5_test.gif  87 kb
 

Ok, capisco...solo non voglio che prenda più di 5 ordini per diversi simboli....e.g, diciamo che ci sono segnali di trading da 10 simboli negli ultimi 20 minuti....l'ea dovrebbe prendere solo i primi 5 segnali di trading, poi quando uno di questi cinque ordini si chiude, può prenderne un altro, assicurandosi che gli ordini in corso su vari simboli non superino i 5. Ma continua a superare i 5, non importa.....A volte prende 5 stessi ordini dallo stesso simbolo, che è anche sbagliato.

mladen:
Mastercash

Questo è il risultato del test:

Come potete vedere non ha mai aperto più di 5 ordini per lo stesso simbolo e lo stesso numero magico allo stesso tempo
 
Mastercash:
Ok, capisco...solo non voglio che prenda più di 5 ordini per diversi simboli....e.g, diciamo che ci sono segnali di trading da 10 simboli negli ultimi 20 minuti....l'ea dovrebbe prendere solo i primi 5 segnali di trading, poi quando uno di questi cinque ordini si chiude, può prenderne un altro, assicurandosi che gli ordini in corso su vari simboli non superino i 5. Ma continua a superare i 5, non importa.....A volte prende 5 stessi ordini dallo stesso simbolo, che è anche sbagliato.

Se vuoi che abbia al massimo 5 ordini su tutti i simboli, vai alla linea 144(if( OrderSymbol() != Symbol() ) continue;) e cancellala. E mantieni lo stesso numero magico per tutte le istanze su tutti i simboli (in modo che possa contare gli ordini aperti solo da quell'EA su tutti i simboli)

 

Ciao Mladen

Ho un bell'indi che non si rinfresca quando è impostato su un TF più alto.

Come puoi vedere sul grafico quando non lo modifico, rimane bloccato. Potresti aiutarmi a risolvere questo problema?

Aggiungo l'indicatore e uno screenshot

 
wolfsch:
Ciao Mladen

Ho un bell'indi che non si rinfresca quando è impostato su un TF più alto.

Come potete vedere sul grafico quando non lo modifico, rimane bloccato. Potreste aiutarmi a risolvere questo problema?

Aggiungo l'indicatore e uno screenshot

wolfsch

Questo può accadere solo nei backtest visivi (questo è un errore che metatrader non ha corretto per almeno 7-8 mesi, ed è un errore di metatrader non dell'indicatore) e succede a tutti gli indicatori multi time frame quando vengono testati visivamente.

Nell'uso normale funziona bene (l'ho testato proprio ora, per sicurezza, e tutto funziona come si suppone che funzioni sui grafici regolari)

 

Grazie, ci lavorerò sopra e ti risponderò......

mladen:
Se vuoi che abbia un massimo di 5 ordini su tutti i simboli, vai alla linea 144(if( OrderSymbol() != Symbol() ) continue;) e cancellala. E mantieni lo stesso numero magico per tutte le istanze su tutti i simboli (in modo che possa contare solo gli ordini aperti da quell'EA su tutti i simboli)
 
mladen:
TFI

Il buffer 3 è quello corretto (è il buffer "trend" che ha valori 1 per la pendenza verso l'alto e -1 per la pendenza verso il basso). Stai usando gli shift 1 e 2, quindi sta testando la prima barra chiusa.

La parte di codice relativa all'acquisto è corretta.

Hai tralasciato il

if(trendc!=trendp)

dalla parte venduta formica che potrebbe essere la causa del problema

Ciao Mladen,

grazie mille per il tuo aiuto. Ho cambiato il codice secondo

secondo il tuo suggerimento, il trading va bene, anche il calcolo dei pip va bene.

Ma ora non apre più posizioni corte (potrebbe essere anche una strategia ;-)).

Sta solo chiudendo le posizioni lunghe.

Potresti per favore consigliarmi ancora una volta?

extern double maxshorttrades = 2;

extern double maxlongtrades = 2;

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

//| BUY |

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

for (i=OrdersTotal()-1;i>=0; i--)

if(OrderType()==OP_BUY && OP_BUY<maxlongtrades) break; // Check Traded Positions.

{

if(trendc!=trendp)

{

if(trendc==1 && (CCIFilter<80)) // code for buy

OpenBuy();

return(0);

}

openedOrders++;

}

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

//| SELL |

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

for (i=OrdersTotal()-1;i>=0; i--)

if(OrderType()==OP_SELL && OP_SELL<maxshorttrades) break; // Check Traded Positions.

{

if(trendc!=trendp)

{

if(trendc==-1 && (CCIFilter>80)) // code for sell

OpenSell();

return(0);

}

openedOrders++;

}

}

Si prega di vedere lo screenshot allegato per i dettagli.

Grazie in anticipo!

Con cordiali saluti,

TFI

File:
backtest.jpg  163 kb
 
tfi_markets:
Ciao Mladen,

Grazie mille per l'aiuto. Ho cambiato il codice secondo

secondo il tuo suggerimento, sta facendo trading senza problemi, anche il calcolo dei pip va bene.

Ma ora non apre più posizioni corte (potrebbe essere anche una strategia ;-)).

Sta solo chiudendo le posizioni lunghe.

Potresti per favore consigliarmi ancora una volta?

extern double maxshorttrades = 2;

extern double maxlongtrades = 2;

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

//| BUY |

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

for (i=OrdersTotal()-1;i>=0; i--)

if(OrderType()==OP_BUY && OP_BUY<maxlongtrades) break; // Check Traded Positions.

{

if(trendc!=trendp)

{

if(trendc==1 && (CCIFilter<80)) // code for buy

OpenBuy();

return(0);

}

openedOrders++;

}

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

//| SELL |

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

for (i=OrdersTotal()-1;i>=0; i--)

if(OrderType()==OP_SELL && OP_SELL<maxshorttrades) break; // Check Traded Positions.

{

if(trendc!=trendp)

{

if(trendc==-1 && (CCIFilter>80)) // code for sell

OpenSell();

return(0);

}

openedOrders++;

}

}

Si prega di vedere lo screenshot allegato per i dettagli.

Grazie in anticipo!

Con cordiali saluti,

TFI

TFI

Prova qualcosa del genere:

extern double maxshorttrades = 2;

extern double maxlongtrades = 2;

//-----------------------------------------------------

//

//-----------------------------------------------------

int clongs = 0;

int cshorts = 0;

for (i=OrdersTotal()-1;i>=0; i--)

{

if(OrderType()==OP_BUY) clongs++; // Check Long Traded Positions.

if(OrderType()==OP_SELL) cshorts++; // Check Short Traded Positions.

}

if(trendc!=trendp)

{

if(clongs < maxlongtrades && trendc== 1 && (CCIFilter<80)) OpenBuy();

if(cshorts 80)) OpenSell();

// Check the CCI condition

// it is not symetrical to buy condition

}

 

mladen,

Ho fatto il cambiamento nel numero 144 e ho unificato il numero magico, "MagicNumber" attraverso i simboli istanze....It è ora prendere un massimo di 5 operazioni alla volta, ma ora ripete le operazioni sullo stesso simbolo allo stesso tempo, ad esempio, se ricevere un segnale di trading SELL su EURUSD, sarà posto che EURUSD vendere ordine 5 volte. Vedi l'immagine dell'ordine live che ha preso così:

Mastercash:
Grazie, ci lavorerò sopra e vi farò sapere......
File:
apcorrimage.png  39 kb
 
Mastercash:
mladen, ho fatto il cambiamento nel numero 144 e ho unificato il numero magico, "MagicNumber" attraverso i simboli istanze....It è ora prendere un massimo di 5 operazioni alla volta, ma ora ripete le operazioni sullo stesso simbolo allo stesso tempo, ad esempio, se ricevere un segnale di trading SELL su EURUSD, sarà posto che EURUSD vendere ordine 5 volte. Vedi l'immagine dell'ordine live che ha preso in questo modo:

Questo non dipende da quella parte di codice

Devi aggiungere un controllo nel resto del codice per non aprire un ordine sulla stessa barra e sullo stesso simbolo