Strategia US Crude Oil Cross Average- Differenza posizioni MTF
Forums › ProRealTime forum Italiano › Supporto ProOrder › Strategia US Crude Oil Cross Average- Differenza posizioni MTF
- This topic has 7 replies, 2 voices, and was last updated 1 year ago by Simon.
-
-
01/29/2023 at 11:32 AM #208618
Buongiorno a tutti,
allego una strategia su petrolio realizzata mixando parte di alcuni codici trovati sul forum per cui ringrazio molto gli autori.
La strategia gira su timeframe 10 minuti, ma vorrei fare delle prove per l’ottimizzazione del trailing stop a 1 minuto, ma su 1 minuto ottengo pochissime entrate a mercato e completamente diverse dal timeframe a 10 minuti.
Come mai? Il codice non dovrebbe dare esattamente gli stessi segnali di entrata e poi eventualmente gestire diversamente le uscite in base al trailing stop su 10M o 1M?
Ringrazio anticipatamente per i chiarimenti e per eventuali implementazioni per migliorare il sistema.
TS Us Crude 10M Cross Average - MTF123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123//-------------------------------------------------------------------------// Codice principale : 2023 USCrude10M-1m CrossAver V2//-------------------------------------------------------------------------//-------------------------------------------------------------------------DEFPARAM cumulateOrders = False // Cumulating positions deactivatedefparam preloadbars=1000ONCE enc2 = 28.0ONCE enc3 = 22.0ONCE slL = 190.0ONCE slS = 310.0ONCE stp2 = 60.0ONCE stp3 = 90.0ONCE ts = 30.0ONCE tsp = 2.0timeframe(10 minutes, updateonclose)once StartE = 5000 //start time for opening positionsonce StartL = 203000 //ending time for opening positions (only trading in the morning)once N = 1 // number of contractsonce Period = 15 //period1 // // set fixed to limit possible combinations of optimisationsonce Period2 = 15 // period2 second set of 69 averages // // set fixed to limit possible combinations of optimisations//once r2= 50Series = (open+high+low+Close)/4 // kind of close of a barSeriesv2 = (open+high+low+Close)/4 // kind of close of a barOTD = Barindex - TradeIndex(3) > IntradayBarIndex//---------------------------------------AFR = -0.02232324*Series[0]+0.02268676*Series[1]+0.08389067*Series[2]+0.14630380*Series[3]+0.19282649*Series[4]+0.21002638*Series[5]+0.19282649*Series[6]+0.14630380*Series[7]+0.08389067*Series[8]+0.02268676*Series[9]-0.02232324*Series[10]-0.04296564*Series[11]-0.03980614*Series[12]-0.02082171*Series[13]+0.00243636*Series[14]+0.01950580*Series[15]+0.02460929*Series[16]+0.01799295*Series[17]+0.00470540*Series[18]-0.00831985*Series[19]-0.01544722*Series[20]-0.01456262*Series[21]-0.00733980*Series[22]+0.00201852*Series[23]+0.00902504*Series[24]+0.01093067*Series[25]+0.00766099*Series[26]+0.00145478*Series[27]-0.00447175*Series[28]-0.00750446*Series[29]-0.00671646*Series[30]-0.00304016*Series[31]+0.00143433*Series[32]+0.00457475*Series[33]+0.00517589*Series[34]+0.00336708*Series[35]+0.00034406*Series[36]-0.00233637*Series[37]-0.00352280*Series[38]-0.00293522*Series[39]-0.00114249*Series[40]+0.00083536*Series[41]+0.00215524*Series[42]+0.00604133*Series[43]-0.00013046*Series[44]//-----------------------------------------------Period2 = MAX(Period2, 1)NumBars = 4LR = LinearRegression[NumBars](Seriesv2)AFRV2 = ExponentialAverage[Period2](LR)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////LongFilter = ((dclose(1)<(dclose(2)-dclose(2)*0.5*0.01))) and ((Dopen(0)-dlow(0))>((dopen(1)-dlow(1))*3))=0ShortFilter= abs(dopen(5)-dclose(1))>0.5*(Dhigh(5)-dlow(1)) and (dclose(1)<dclose(2) and dclose(2)<dclose(3) and dopen(0)<dclose(1))=0/////////////////////////////////////wAFR = exponentialaverage[30](AFR) ///for smoothing the AFR, to reduce market noicewAFRv2 = exponentialaverage[30](AFRv2) ///for smoothing the AFRv2, to reduce market noiceRsiLong = Rsi[14](close) < 47RsiShort = Rsi[14](close) > 24if time >= StartE And time <= StartL and OTD and longfilter then //and not onmarket thenIF wAFR > wAFRv2 and wAFR[1] < wAFRv2[1] And RsiLong thenbuy 1 contract AT MARKETSET STOP PLOSS sll//180elsif wAFR < wAFRv2 and wAFR[1] > wAFRv2[1] And RsiShort and Shortfilter thensellshort 1 contract at marketSET STOP PLOSS sls//300endifendif//_________________________________________________________________________________________________________________________________timeframe (default)IF TS<>0 THEN//trailing stop functionIF NOT ONMARKET THENTrailingStart = TS //20 trailing will start @trailinstart points profitTrailingStep = tsp //5 trailing step to move the "stoploss"Distance = 50 //7 pips Distance from caurrent price (if required by the broker)PointsToKeep = 1 //1 pips to be gained when breakeven is setnewSL = 0 //reset the stoploss valueStep2 = stp2//60Encr2 = Enc2//15Step3 = Stp3//90Encr3 = Enc3//10ELSEPips = PositionPerf * PositionPrice / PipSizeIF (Pips >= Step2) THEN //15 punti di step dopo 60 di profittoTrailingStep = Encr2ENDIFIF (Pips >= step3) THEN //30 punti di step dopo 120 di profittoTrailingStep = Encr3ENDIFENDIFIF (BarIndex - TradeIndex) >= 0 THEN //0//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND high-TradePrice(1)>=(TrailingStart*PipSize+PointsToKeep*PipSize) THENnewSL = TradePrice(1)+TrailingStep*PipSize+PointsToKeep*PipSizeENDIF//next movesIF newSL>0 AND close-newSL>=TrailingStep*PipSize THENnewSL = newSL+TrailingStep*PipSizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND TradePrice(1)-low>=(TrailingStart*PipSize+PointsToKeep*PipSize) THENnewSL = TradePrice(1)-TrailingStep*PipSize+PointsToKeep*PipSizeENDIF//next movesIF newSL>0 AND newSL-close>=TrailingStep*PipSize THENnewSL = newSL-TrailingStep*PipSizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENIF LongOnMarket THENIF (close + Distance) > newSL THENSELL AT newSL STOPELSIF (close - Distance) < newSL THENSELL AT newSL LIMITELSESELL AT MarketENDIFELSIF ShortOnmarket THENIF (close + Distance) < newSL THENEXITSHORT AT newSL STOPELSIF (close - Distance) > newSL THENEXITSHORT AT newSL LIMITELSEEXITSHORT AT MarketENDIFENDIFENDIFENDIF//**************************************ENDIF01/29/2023 at 12:46 PM #208634Dalle tue foto non si capisce bene quale siano i TF usati, le unità ed il periodo di backtest.
Ad ogni modo, ciascun timeframe produce risultati diversi, indipendentemente che all’interno tu abbia codificato le condizioni sullo stesso TF (10 minuti), per i seguenti motivi:
ogni TF ha uno storico diverso, 10K unità di 10 minuti sono diverse da 10K unità di 1 minuto, ecc…
Il trailing stop su TF più bassi fa in modo che alcune operazioni escano prima che su un TF più alto, per cui possono essere aperte posizioni diverse in quanto su quello più alto ci può essere un’operazione in corso, mentre su quello basso, venendo chiusa prima un’operazione, la strategia ha il tempo per aprirne un’altra, se ci sono le condizioni.
Inoltre il TS se l’hai ottimizzato per il 10 minuti, su 1 minuto darà risultati diversi, e viceversa.
Inoltre utilizzi Dclose, Dhigh ecc… che fanno riferimento ai dati giornalieri passati, una barra giornaliera necessita di 1440 barre di 1 minuto, oppure 288 di 5 minuti o 144 da 10 minuti.
Non è possibile fare confronti efficaci.
01/29/2023 at 2:29 PM #208657Grazie Roberto per la celerissima risposta, allego nuove immagini per chiarire meglio.
Nelle immagini ho utilizzato 200 K barre a 1 minuto che partono da luglio 2022 e lo stesso periodo di partenza per le barre a 10 minuti.
Non mi spiego come nel grafico delle barre a 1 minuto, dove teoroicamente ci dovrebbero essere più operazioni, ce ne sono molto meno e in alcuni mesi non entra a mercato.
Grazie
01/29/2023 at 3:03 PM #208669Devi mettere entrambi i grafici, sia del 10 minuti che di 1 minuto, fare i backtest su ciascuno (dalle stesse date, iniziale e finale) e verificare se le condizioni di entrata sono valide in entrambi i grafici nello stesso momento.
01/29/2023 at 5:23 PM #208688Roberto scusa se ti stolkerizzo, ho fatto esattamente come dici tu. Ho eseguito il backtest su 2 grafici che iniziano e finiscono nelle stesse date (inizio 18 Luglio 2022 fine a ultima data), le condizioni di entrata del grafico a 1 minuto dovrebbero essere esattamente quelle del 10 minuti, non avendo variato nulla nel codice e in particolare nella parte di codice relativa al timeframe 10 minuti dove sono inserite. Cosa mi sfugge? Cosa impedisce al sistema di aprire le posizioni eseguendone solo 4 al posto di 80?
Grazie
01/29/2023 at 5:23 PM #20869201/29/2023 at 7:33 PM #208697Spostala riga 26 (dove c’è OTD) immediatamente PRIMA della 15 (dopo tutti le righe con ONCE) in modo che sia all’interno del timeframe di default. Una curiosità, perché per OTD usi (3) invece di niente, oppure di (1)?
C’è anche, secondo me, da spostare ENDIF della riga 77 alla riga immediatamante successiva alla 121.
La riga 78 funziona anche così, se c’è 0, ma sarebbe meglio spostarla tra la la 69 e la 70.
01/29/2023 at 8:41 PM #208699Grande Roberto!!
Il problema era OTD = Barindex – TradeIndex(3) > IntradayBarIndex impostato a 3, codice copiato che limitava a 3 operazioni al giorno ma che aveva probabilmente senso su altri timeframes.
Ho spostato e impostato la linea di codice otd con TradeIndex(0) e ora funziona correttamente!
Ho spostato anche l’endif.
Grazie mille, hai visto subito il problema, sei un mago.
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on