R05Participant
Veteran
Buonasera a tutti, vi chiedo, gentilmente, aiuto per un sistema che segua il seguente metodo:
- time frame orario
- si prendono in considerazione il massimo e il minimo della prima ora, quella delle 8
- si attende la chiusura di una candela sopra o sotto il massimo o il minimo
- si apre la posizione: quindi, se ad esempio il massimo della prima ora del dax è 13300 e in una qualsiasi candela successiva, al massimo alle 17:00 (dopo l’apertura americana) il prezzo chiude sopra questo massimo si compra subito alla candela successiva; viceversa per lo short.
- lo stop 5 punti sopra il massimo o sotto il minimo
- primo target l’estensione della candela della prima ora dove si chiude parte della posizione; poi si segue in trailing stop
Mi aiutereste?
Provo a scriverti una strategia. Tuttavia PRT non consente la chiusura parziale di posizioni.
Eccola, però non ho capito dove mettere il Target Profit, per cui ho indicato i punti interrogativi, mettici te quello che vuoi, o dimmi esattamente cosa significa estenzione della barra delle 8.
DEFPARAM CumulateOrders = false
DEFPARAM FlatAfter = 180000 //Puoi indicare una data oltre la quale le posizioni aperte vengono chiuse
IF time = 090000 THEN //Al termine della candela dell8 rileva Minimo/Massimo
Massimo = high
Minimo = low
ENDIF
IF time >= 090000 AND time <= 170000 THEN
IF close > Massimo THEN
SET STOP LOSS Minimo - (5 * pipsize)
SET TARGET PROFIT ???
BUY 1 CONTRACTS AT MARKET
ELSIF close > Massimo THEN
SET STOP LOSS Massimo + (5 * pipsize)
SET TARGET PROFIT ???
SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
ENDIF
R05Participant
Veteran
Grazie Roberto, gentilissimo. Per estensione intendo il range della prima ora.
Ho provato il codice però va solo long.
R05Participant
Veteran
Vedendo meglio fa anche più operazioni al giorno. L’operazione è unica o meglio una sola long e una sola short al giorno, nel senso che se prima ad esempio di mattina c’è il setup per il long va long, ma se nel pomeriggio c’è il setup per lo short può andare anche short.
Eccola, l’ho provata sul DAX ad 1 ora e funziona:
DEFPARAM CumulateOrders = false
DEFPARAM FlatAfter = 180000 //Puoi indicare una data oltre la quale le posizioni aperte vengono chiuse
ONCE Rialzo = 1 //Predisporre affinché possa fare tradare LONG
ONCE Ribasso = 1 //Predisporre affinché possa fare tradare SHORT
IF IntraDayBarIndex = 0 THEN
Rialzo = 1 //All'inizio del giorno resettare le variabili al valore di default
Ribasso = 1
ENDIF
IF time = 090000 THEN //Al termine della candela dell8 rileva Minimo/Massimo
Massimo = high
Minimo = low
Profitto = range
ENDIF
IF time >= 090000 AND time <= 170000 THEN
IF close > Massimo AND Rialzo THEN
SET STOP LOSS Minimo - (5 * pipsize)
SET TARGET PROFIT Profitto
BUY 1 CONTRACTS AT MARKET
Rialzo = 0 //Settare la variabile a ZERO per impedire ulteriori operazioni LONG
ELSIF close > Massimo AND Ribasso THEN
SET STOP LOSS Massimo + (5 * pipsize)
SET TARGET PROFIT Profitto
SELLSHORT 1 CONTRACTS AT MARKET
Ribasso = 0 //Settare la variabile a ZERO per impedire ulteriori operazioni SHORT
ENDIF
ENDIF
R05Participant
Veteran
Ti ringrazio tanto Roberto. Ho notato due cose:
- non chiude la posizione in stop sotto il minimo o sopra il massimo di 5 punti
- non apre sempre la posizione: ad esempio il 7, 9, 10 e 13 novembre pur essendoci il setup il sistema rimane fermo
Scusami, ma le righe 15 e 20 erano identiche (sia per i LONG che per gli SHORT). Non me n’ero accorto dopo il copia e incolla che avevo fatto!!!!
Ho fatto anche una modifica alle righe 17 e 22.
Adesso fa anche i trade mancanti che avevi segnalato.
Fai ulteriori verifiche e fammi sapere.
DEFPARAM CumulateOrders = false
DEFPARAM FlatAfter = 180000 //Puoi indicare una data oltre la quale le posizioni aperte vengono chiuse
ONCE Rialzo = 1 //Predisporre affinché possa fare tradare LONG
ONCE Ribasso = 1 //Predisporre affinché possa fare tradare SHORT
IF IntraDayBarIndex = 0 THEN
Rialzo = 1 //All'inizio del giorno resettare le variabili al valore di default
Ribasso = 1
ENDIF
IF time = 090000 THEN //Al termine della candela dell8 rileva Minimo/Massimo
Massimo = high
Minimo = low
Profitto = range * pipsize
ENDIF
IF time >= 090000 AND time <= 170000 THEN
IF close > Massimo AND Rialzo THEN
SET STOP LOSS Minimo - (5 * pipsize)
SET TARGET PROFIT close + Profitto
BUY 1 CONTRACTS AT MARKET
Rialzo = 0 //Settare la variabile a ZERO per impedire ulteriori operazioni LONG
ELSIF close < Minimo AND Ribasso THEN
SET STOP LOSS Massimo + (5 * pipsize)
SET TARGET PROFIT close - Profitto
SELLSHORT 1 CONTRACTS AT MARKET
Ribasso = 0 //Settare la variabile a ZERO per impedire ulteriori operazioni SHORT
ENDIF
ENDIF
Modifica la riga 14 così:
IF time >= 090000 AND time <= 170000 AND (not OnMarket) THEN
perché ho notato che cambia il backtest, probabilmente entro l’orario specificato, anche se siamo già a mercato, può darsi che lo SL e TP vengano comunque valutati e magari cambiati anche ad operazione in corso. Non ne sono certo, ma qualcosa cambia tra la riga com’era sul mio post precedente e come l’ho messa adesso.
Per il resto mi sembra funzioni tutto correttamente.
R05Participant
Veteran
Grazie Roberto, ho notato però che chiude le operazioni tutte alle 18:00, è come se lo stop loss e il target profit non li considerasse.
Forsze è perché non raggiunge quel livello di prezzo, almeno a me è sembrato così.
Magari ci sarà bisogno di testarla per un pò per verificarlo bene.
R05Participant
Veteran
Ok grazie Roberto, farò delle prove.
Eccola, l’ho provata sul DAX ad 1 ora e funziona:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
DEFPARAM CumulateOrders = false DEFPARAM FlatAfter = 180000 //Puoi indicare una data oltre la quale le posizioni aperte vengono chiuse ONCE Rialzo = 1 //Predisporre affinché possa fare tradare LONG ONCE Ribasso = 1 //Predisporre affinché possa fare tradare SHORT IF IntraDayBarIndex = 0 THEN Rialzo = 1 //All’inizio del giorno resettare le variabili al valore di default Ribasso = 1 ENDIF IF time = 090000 THEN //Al termine della candela dell8 rileva Minimo/Massimo Massimo = high Minimo = low Profitto = range ENDIF IF time >= 090000 AND time <= 170000 THEN IF close > Massimo AND Rialzo THEN SET STOP LOSS Minimo – (5 * pipsize) SET TARGET PROFIT Profitto BUY 1 CONTRACTS AT MARKET Rialzo = 0 //Settare la variabile a ZERO per impedire ulteriori operazioni LONG ELSIF close > Massimo AND Ribasso THEN SET STOP LOSS Massimo + (5 * pipsize) SET TARGET PROFIT Profitto SELLSHORT 1 CONTRACTS AT MARKET Ribasso = 0 //Settare la variabile a ZERO per impedire ulteriori operazioni SHORT ENDIF ENDIF |
Buongiorno, sto facendo un sistema simile, e vorrei che gli ordini non fossero market ma al prezzo massimo della chiusura della prima ora. Ho guardato il backtest ed i prezzi vengono invece eseguiti al prezzo massimo della barra precedente a quella che esegue l’ordine. Come andrebbe scritto un codice del genere in questa strategia?
La logica sembra corretta, l’esaminerò con più tempo.
Quello che è errato è il settaggio del Target e dello Stop.
PROFIT e LOSS vogliono che sia indicata una distanza in prezzo, ad esempio 0.0080, PPROFIT e PLOSS vogliono che la distanza sia indicata in Pips, ad esempio 80. Mentre tu indichi un prezzo, non una differenza.
La logica sembra corretta, l’esaminerò con più tempo.
Quello che è errato è il settaggio del Target e dello Stop.
PROFIT e LOSS vogliono che sia indicata una distanza in prezzo, ad esempio 0.0080, PPROFIT e PLOSS vogliono che la distanza sia indicata in Pips, ad esempio 80. Mentre tu indichi un prezzo, non una differenza.
nella mia il profit va bene a punti, ma ho visto che i buy lumit e gli ordini non vengonono rispettati come dovrebbero