Breakout di un range

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #237119 quote
    davidator
    Participant
    Junior

    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

    #237129 quote
    robertogozzi
    Moderator
    Master

    Eccolo:

    ONCE TradeON = 0
    IF (OpenTime = 020000) OR ((OpenTime > 020000) AND (OpenTime[1] < 020000)) THEN
       myHigh  = high
       myLow   = low
       TradeON = 1
    ENDIF
    IF (OpenTime >= 020000) AND (OpenTime <= 080000) THEN
       myHigh  = max(myHigh,high)
       myLow   = max(myLow,low)
       myRange = myHigh - myLow
    ENDIF
    TimeEntry = ((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 THEN
       IF close > myHigh THEN
          BUY 1 Contract at Market
          SET STOP PRICE myLow
          TradeON = 0
       ELSIF close < myLow THEN
          SELLSHORT 1 Contract at Market
          SET STOP PRICE myHigh
          TradeON = 0
       ENDIF
    ENDIF
    IF ((OpenTime = 170000) OR ((OpenTime > 170000) AND (OpenTime[1] < 170000))) THEN
       SELL      at Market
       EXITSHORT at Market
    ENDIF
    davidator thanked this post
    #237133 quote
    davidator
    Participant
    Junior

    Grazie 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?

    #237180 quote
    robertogozzi
    Moderator
    Master

    Intanto, rileggendo il codice, mi sono accorto che la riga 9 è errata e va sostituita con questa:

     myLow   = 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:

    ONCE TradeON = 0
    OTD          = (Barindex - TradeIndex(1) > IntradayBarIndex)  // Una sola operazione al giorno
    IF (OpenTime = 020000) OR ((OpenTime > 020000) AND (OpenTime[1] < 020000)) THEN
       myHigh  = high
       myLow   = low
       TradeON = 1
    ENDIF
    IF (OpenTime >= 020000) AND (OpenTime <= 080000) THEN
       myHigh  = max(myHigh,high)
       myLow   = min(myLow,low)
       myRange = myHigh - myLow
    ENDIF
    TimeEntry = ((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 THEN
       IF close > myHigh THEN
          BUY 1 Contract at Market
          SET STOP PRICE myLow
          TradeON = 0
       ELSIF close < myLow THEN
          SELLSHORT 1 Contract at Market
          SET STOP PRICE myHigh
          TradeON = 0
       ENDIF
    ENDIF
    IF ((OpenTime = 170000) OR ((OpenTime > 170000) AND (OpenTime[1] < 170000))) THEN
       SELL      at Market
       EXITSHORT at Market
    ENDIF
    graphonprice 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):

    IF (OpenTime = 020000) OR ((OpenTime > 020000) AND (OpenTime[1] < 020000)) THEN
       myHigh  = high
       myLow   = low
    ENDIF
    IF (OpenTime >= 020000) AND (OpenTime <= 080000) THEN
       myHigh  = max(myHigh,high)
       myLow   = min(myLow,low)
       myRange = myHigh - myLow
    ELSE
       myRange = 0
    ENDIF
    RETURN myRange AS "Range"
    davidator thanked this post
    #237195 quote
    davidator
    Participant
    Junior

    Perfetto.

    Grazie mille Roberto!

Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.

Breakout di un range


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
davidator @davidator Participant
Summary

This topic contains 4 replies,
has 2 voices, and was last updated by davidator
1 year, 6 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 09/05/2024
Status: Active
Attachments: No files
Logo Logo
Loading...