problema con una strategia a candela pattern
Forums › ProRealTime forum Italiano › Supporto ProOrder › problema con una strategia a candela pattern
- This topic has 3 replies, 2 voices, and was last updated 3 years ago by robertogozzi.
-
-
12/19/2020 at 2:41 AM #15437612345678910111213141516171819202122232425DEFPARAM CumulateOrders = falseDEFPARAM FLATBEFORE = 000000DEFPARAM FLATAFTER = 000000c5= adx[5]> 20//**********************************************************************// engulfing pattern rialzista (anche reversal day)C1=range[0]>=range[1] AND close[1]<open[1] AND close[0]>open[0] AND open[0]<=close[1] AND close[0]>=open[1]AND range[0]>averagetruerange[ B ](close)*1// engulfing pattern ribassista (anche reversal day)C2=range[0]>=range[1] AND close[1]>open[1] AND close[0]<open[0] AND open[0]>=close[1] AND close[0]<=open[1]AND range[0]>averagetruerange[ C ](close)*1//**********************************************************************// hammer rialzistaC3 = close[1]<open[1] AND open[0]>low[0]+(range*0.66) AND close[0]>low[0]+(range*0.66) AND range[0]>abs(open-close)*4 AND low[0]<low[1] AND range[0]>averagetruerange[ D ](close)*1// shooting star ribassistaC4 = close[1]>open[1] AND open[0]<high[0]-(range*0.66) AND close[0]<high[0]-(range*0.66) AND range[0]>abs(open-close)*4 AND high[0]>high[1] AND range[0]>averagetruerange[ E ](close)*1//**********************************************************************IF Not OnMarket [( C1 OR C3) AND C5] THENBUY 1 CONTRACT AT MARKETENDIFIF Not OnMarket [( C2 OR C4) AND C5] THENSELLSHORT 1 CONTRACT AT MARKETENDIFSET STOP pLOSS 50SET TARGET pPROFIT 100
Ciao Roberto, per favore potresti scoprire cosa non va? Il sistema gira, ma non apre e non chiude posizioni.
Se invece lo divido in due parti, C1 e C2,— C3 e C4, allora vanno entrambi, con TF h1 su 1k
Grazie e perdona la mia ridotta conoscenza di programmazione
12/19/2020 at 3:11 AM #154377Innanzitutto rimuovi (o commenta) le righe 2 e 3, dal momento che non indichi un orario è meglio non mettere niente, anche perché FLATAFTER=000000 dovrebbe impedire qualunque operatività (non l’ho provato), in quanto qualsiasi orario è > di 000000.
La linea 16 contiene due errori:
- manca AND dopo OnMarket
- NON devi usare le parentesi quadre, ma semplicemente altre tonde, per le espressioni, in quanto con le quadre servono come indice di OnMarket e produrrebbero condizioni sballate, scrivi quella riga (ma anche la 20), così:
1IF Not OnMarket AND (( C1 OR C3) AND C5) THEN01/12/2021 at 12:30 AM #157432Ciao Roberto
vorrei chiederti se su questo sistema si puo’ cambiare qualcosa?
magari scriverlo in forma piu’ corretta o altro?
TF usato h1 su uno storico di 1k candele, cioè 3 mesi
è gia’ live da inizio mese e ogni mese lo vorrei aggiornare per eventuali cambio di valori delle variabili.
Cosa ne pensi? Grazie
123456789101112131415161718192021222324252627282930DEFPARAM CumulateOrders = falsec7= adx[5]> A//**********************************************************************// engulfing pattern rialzista (anche reversal day)C1=range[0]>=range[1] AND close[1]<open[1] AND close[0]>open[0] AND open[0]<=close[1] AND close[0]>=open[1]AND range[0]>averagetruerange[ B ](close)*1// engulfing pattern ribassista (anche reversal day)C2=range[0]>=range[1] AND close[1]>open[1] AND close[0]<open[0] AND open[0]>=close[1] AND close[0]<=open[1]AND range[0]>averagetruerange[ B ](close)*1//**********************************************************************// hammer rialzistaC3 = close[1]<open[1] AND open[0]>low[0]+(range*0.66) AND close[0]>low[0]+(range*0.66) AND range[0]>abs(open-close)*4 AND low[0]<low[1] AND range[0]>averagetruerange[ C ](close)*1// shooting star ribassistaC4 = close[1]>open[1] AND open[0]<high[0]-(range*0.66) AND close[0]<high[0]-(range*0.66) AND range[0]>abs(open-close)*4 AND high[0]>high[1] AND range[0]>averagetruerange[ C ](close)*1//**********************************************************************// swing point low + one white soldier (rialzista)C5 = close[2]<open[2] AND low[2]>low[1] AND low[0]>low[1] AND close[0]>open[0] AND close[0]>high[1] AND high[2]>high[1] AND high[0]>high[1] AND high[0]>high[2] AND close[0]>open[2] AND close[0]>=low[0]+(range[1]*0.50) AND range[0]>averagetruerange[ D ](close)*1// swing point high + one white soldier (ribassista)C6 = close[2]>open[2] AND high[2]<high[1] AND high[0]<high[1] AND close[0]<open[0] AND close[0]<low[1] AND low[2]<low[1] AND low[0]<low[1] AND low[0]<low[2] AND close[0]<open[2] AND close[0]<=high[0]-(range[1]*0.50) AND range[0]>averagetruerange[ D ](close)*1//**********************************************************************IF Not OnMarket AND (( C1 OR C3 OR C5 ) AND C7) THENBUY 1 CONTRACT AT MARKETENDIFIF Not OnMarket AND (( C2 OR C4 OR C6 ) AND C7) THENSELLSHORT 1 CONTRACT AT MARKETENDIFSET STOP pLOSS SSET TARGET pPROFIT S01/12/2021 at 9:02 AM #157449Se è profittevole va bene, non entro nel merito. Direi che va bene che tu lo aggiorni con una certa frequenza, specialmente con un backtest così limitato.
Quando fai i backtest ti consiglio di farli su 200K barre (o almeno 100K), 1K è davvero poco!
Quanto al codice direi che in generale è abbastanza chiaro, però per il mio modo di programmare (ed anche per rendere l’esecuzione più efficiente) eviterei di mettere tutte quelle condizioni su una sola riga, oltre a rendere il codice più lento ed inefficiente sono anche difficili da individuare chiaramente e, di conseguenza, è più difficile farci eventuali modifiche. A me piace mettere le singole condizioni separatamente e poi, alla fine, farne il riepilogo in una condizione più generale, esempio:
12345c1 = ....c2 = ....c3 = ....c4 = ....Cond = c1 AND ((c2 OR c3) AND c4) -
AuthorPosts
Find exclusive trading pro-tools on