Breakout di un range
Forums › ProRealTime forum Italiano › Supporto ProOrder › Breakout di un range
- This topic has 4 replies, 2 voices, and was last updated 3 months ago by davidator.
-
-
09/05/2024 at 9:47 AM #237119
Buongiorno,
Nonostante in questi giorni abbia fatto dei notevoli progressi (considerando che con la programmazione sono una capra! :D), non riesco a creare un codice per testare un semplice breakout di un range.
Lo strumento è il DAX, timeframe 1h. Il range da considerare è quello che va dalle ore (formato h24) 2 alle 8. Il sistema va long se il breakout avviene nella candela delle 9, 10 o 11, stessa logica per lo short.
Stop al minimo (long) o massimo (short) del range. L’operazione viene chiusa automaticamente alle 17.
Non condivido alcun codice perchè le mie prove sono state del tutto fallimentari.
Grazie in anticipo per l’aiuto
09/05/2024 at 11:04 AM #237129Eccolo:
12345678910111213141516171819202122232425262728ONCE TradeON = 0IF (OpenTime = 020000) OR ((OpenTime > 020000) AND (OpenTime[1] < 020000)) THENmyHigh = highmyLow = lowTradeON = 1ENDIFIF (OpenTime >= 020000) AND (OpenTime <= 080000) THENmyHigh = max(myHigh,high)myLow = max(myLow,low)myRange = myHigh - myLowENDIFTimeEntry = ((OpenTime = 090000) OR (OpenTime = 100000) OR (OpenTime = 110000)) OR ((OpenTime > 090000) AND (OpenTime[1] < 090000)) OR ((OpenTime > 100000) AND (OpenTime[1] < 100000)) OR ((OpenTime > 110000) AND (OpenTime[1] < 110000))IF TimeEntry AND Not OnMarket AND TradeON THENIF close > myHigh THENBUY 1 Contract at MarketSET STOP PRICE myLowTradeON = 0ELSIF close < myLow THENSELLSHORT 1 Contract at MarketSET STOP PRICE myHighTradeON = 0ENDIFENDIFIF ((OpenTime = 170000) OR ((OpenTime > 170000) AND (OpenTime[1] < 170000))) THENSELL at MarketEXITSHORT at MarketENDIF1 user thanked author for this post.
09/05/2024 at 1:20 PM #237133Grazie Roberto, funziona.
Due piccoli appunti, lo stop vorrei che andasse nel minimo (long) o massimo (short) dell’intero range che va dalle 2 alle 8, al momento non capisco come stia funzionando.
Vorrei anche che il numero di operazioni al giorno fosse solo una, dunque se un’operazione raggiunge lo stop loss per quel giorno non verranno aperte altre posizioni.
E’ possibile far disegnare sul grafico il range con delle semplici linee orizzontali o questa operazione va fatta dagli indicatori?
09/05/2024 at 5:30 PM #237180Intanto, rileggendo il codice, mi sono accorto che la riga 9 è errata e va sostituita con questa:
1myLow = min(myLow,low)altrimenti considera il MINIMO più alto, non quello più basso, falsando il range.Questo dovrebbe mettere a posto i dati un pò “strani” che vedi.
Questo è il nuovo codice modificato, con la correzione, l’aggiunta della variabile OTD per una sola operazione al giorno e le 3 istruzioni grafiche (alla fine del codice) per vedere i dati. I prezzi li vedrai direttamente con delle linee sul grafico, mentra il range, essendo fuori scala, sarebbe quasi invisibile per cui lo vedrai in un’apposita finestra delle variabili:
12345678910111213141516171819202122232425262728293031ONCE TradeON = 0OTD = (Barindex - TradeIndex(1) > IntradayBarIndex) // Una sola operazione al giornoIF (OpenTime = 020000) OR ((OpenTime > 020000) AND (OpenTime[1] < 020000)) THENmyHigh = highmyLow = lowTradeON = 1ENDIFIF (OpenTime >= 020000) AND (OpenTime <= 080000) THENmyHigh = max(myHigh,high)myLow = min(myLow,low)myRange = myHigh - myLowENDIFTimeEntry = ((OpenTime = 090000) OR (OpenTime = 100000) OR (OpenTime = 110000)) OR ((OpenTime > 090000) AND (OpenTime[1] < 090000)) OR ((OpenTime > 100000) AND (OpenTime[1] < 100000)) OR ((OpenTime > 110000) AND (OpenTime[1] < 110000))IF TimeEntry AND Not OnMarket AND TradeON AND OTD THENIF close > myHigh THENBUY 1 Contract at MarketSET STOP PRICE myLowTradeON = 0ELSIF close < myLow THENSELLSHORT 1 Contract at MarketSET STOP PRICE myHighTradeON = 0ENDIFENDIFIF ((OpenTime = 170000) OR ((OpenTime > 170000) AND (OpenTime[1] < 170000))) THENSELL at MarketEXITSHORT at MarketENDIFgraphonprice myHigh AS "Highest" coloured("Blue")graphonprice myLow AS "Lowest" coloured("Red")graph myRange AS "Range" coloured("Green")Questo è l’indicatore per vedere il range in un nuovo pannello sotto il grafico (come MACD, ad esempio):
123456789101112IF (OpenTime = 020000) OR ((OpenTime > 020000) AND (OpenTime[1] < 020000)) THENmyHigh = highmyLow = lowENDIFIF (OpenTime >= 020000) AND (OpenTime <= 080000) THENmyHigh = max(myHigh,high)myLow = min(myLow,low)myRange = myHigh - myLowELSEmyRange = 0ENDIFRETURN myRange AS "Range"1 user thanked author for this post.
09/05/2024 at 11:21 PM #237195 -
AuthorPosts
Find exclusive trading pro-tools on