Sistema intraday

Viewing 9 posts - 1 through 9 (of 9 total)
  • Author
    Posts
  • #103852 quote
    R05
    Participant
    Veteran

    Gent.mi sto implementando un sistema intraday con le seguenti caratteristiche:

    • si usano le candele heikin ashi (per il momento con time frame a 5 minuti ma appena ho il sistema completo farò delle prove anche con altri time frame ed eventualmente altre condizioni) e quando si ha il minimo di giornata si entra long sopra il massimo della candela heikin ashi e, viceversa, quando si ha un massimo di giornata si entra short alla rottura del minimo della candela heikin ashi (vi allego un esempio, file con nome “cattura”).

    Il sistema è il seguente ed è tutto ok.

    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    // Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
    DEFPARAM FLATBEFORE = 090000
    // Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
    DEFPARAM FLATAFTER = 173000
    
    xClose = (Open+High+Low+Close)/4
     
    if(barindex>2) then
    xOpen = (xOpen[1] + xClose[1])/2
    endif
    
    // Condizioni per entrare su posizioni long
    c1 = dlow(0)
    c2 = low
    g1 = (c1=c2)
    
    IF g1 THEN
    BUY 1 CONTRACT AT xopen stop
    ENDIF
    
    // Condizioni per entrare su posizioni short
    c10 = dhigh(0)
    c20 = high
    g10 = (c10=c20)
    
    IF g10 THEN
    sellshort 1 CONTRACT AT xopen stop
    ENDIF
    
    // Stop e target
    SET STOP pLOSS 15
    SET TARGET pPROFIT 15
    

    Però vorrei chiedervi due cose:

    1. la prima, è che vorrei che il massimo e il minimo di giornata da prendere in considerazione siano quelli a partire dalle 8
    2. la seconda, è che quando si verifica ad esempio il massimo, dovendo entrare short alla rottura del minimo della candela in cui si è verificato, e dato che non sempre alla candela successiva si ha la rottura, si possa usare quella candela per almeno 5 barre successive (vi mostro un esempio per meglio capire; il file è quello col nome “esempio”)

    Vi ringrazio.

    Cattura-1.jpg Cattura-1.jpg esempio.jpg esempio.jpg
    #103859 quote
    robertogozzi
    Moderator
    Master

    Le righe 17 e 26 daranno rarissimamente segnali, perché che i valori siano esattamente uguali è quasi impossibile!

    A cosa to servono le candele HA se non le usi, tranne per l’entrata?

    Perché fai l’entrata sempre sull’open della candela HA, non volevi farlo alla rottura dei minimi/massimi?  In tal caso ti manca la definizione di xLow e xHigh.

    #103865 quote
    R05
    Participant
    Veteran

    Si Roberto grazie della risposta.

    • L’heikin ashi mi serve per entrare in posizione perchè ho notato che la candela è più ampia di quella corrispondente a candele giapponesi, quindi l’entrata è un pò ritardata ma forse più attendibile (è come se aspettasse una conferma in più).
    • Per quanto riguarda xhigh e xlow non so come ricavarli, anche se ho notato che nella stragrande maggioranza dei casi xopen coincide con xhigh o xlow a seconda, mentre il minimo della candela giapponese se è il valore più basso lo è anche per l’heikin ashi, infatti ho modificato il sistema nel seguente modo alle righe 20 e 29.
    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    // Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
    DEFPARAM FLATBEFORE = 090000
    // Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
    DEFPARAM FLATAFTER = 173000
    
    xClose = (Open+High+Low+Close)/4
     
    if(barindex>2) then
    xOpen = (xOpen[1] + xClose[1])/2
    endif
    
    // Condizioni per entrare su posizioni long
    c1 = dlow(0)
    c2 = low
    g1 = (c1=c2)
    
    IF g1 THEN
    BUY 1 CONTRACT AT max(xopen,high)+0.5 stop
    ENDIF
    
    // Condizioni per entrare su posizioni short
    c10 = dhigh(0)
    c20 = high
    g10 = (c10=c20)
    
    IF g10 THEN
    sellshort 1 CONTRACT AT min(xopen,low)-0.5 stop
    ENDIF
    
    // Stop e target
    SET STOP pLOSS 30
    SET TARGET pPROFIT 18
    
    • come ultima cosa, le operazioni le fa, ti allego il file. Le righe 17 e 26 sembrano incongruenti però mi spiego meglio con l’esempio seguente:
    c1 = dlow(0)
    c2 = low
    g1 = (c1=c2)
    Volevo scrivere, in modo sicuramente rozzo, che se c1 è il minimo a quel momento del giorno e c2 è il minimo della candela e quindi coincidono, allora il minimo della candela fatto registrare a quel momento è anche minimo della giornata.
    Solo così riuscivo a scriverlo, comunque le entrate me le fa giuste (ho allegato anche l’esempio di ieri).
    backtest.jpg backtest.jpg Esempio-30-luglio.jpg Esempio-30-luglio.jpg
    #103868 quote
    robertogozzi
    Moderator
    Master

    Questa è la definizione completa delle candele HA ( > 2 va bene ugualmente):

    if barindex > 1 then
       xClose  = (open+close+low+high)/4    //TotalPrice
       xOpen   = (xOpen[1]+xClose[1])/2
       haHigh  = Max(xOpen, xClose)
       haLow   = Min(xOpen, xClose)
       xHigh   = Max(High,haHigh)
       xLow    = Min(Low,haLow)
       xRange  = abs(xClose - xOpen)
    else
       xClose  = (open+close+low+high)/4    //TotalPrice
       xOpen   = (Open[1]+Close[1])/2
       haHigh  = Max(xOpen, xClose)
       haLow   = Min(xOpen, xClose)
       xHigh   = Max(High,haHigh)
       xLow    = Min(Low,haLow)
       xRange  = abs(xClose - xOpen)
    endif

    dovrai togliere ciò che non t’interessa. Ad ogni modo, se ti funziona com’è adesso non cambiare niente, almeno finché tutto non va come ti aspetti.

    Aggiungere/modificare cose quando ancora c’è qualcosa da risolvere complica sicuramente la vita.

    Bene, adesso ho capito che significa quel segno “=”. E’ corretto.

    #103872 quote
    robertogozzi
    Moderator
    Master

    Per il minimo/massimo di giornata dalle 8, puoi scrivere:

    // inizia con i nuovi valori alle 8 di ogni giorno
    IF time = 080000 THEN
       Minimo  = low             //o xLow
       Massimo = high            //o xHigh
    ENDIF
    // aggiorna i valori ogni candela (alle 8 saranno invariati, uguali a sopra)
    Minimo  = min(Minimo,low)    //anche qui puoi usare le HA
    Massimo = max(Massimo,high)  //anche qui puoi usare le HA

    dopodiche Fai riferimento a questi due valori e non più a DLOW e DHIGH.

    Però non devi entrare dopo le 8 almeno, altrimenti ti entra subito, perché alle 8 i valori LOW e HIGH saranno uguali a MINIMO e MASSIMO.

    #103873 quote
    robertogozzi
    Moderator
    Master

    Ti consiglio di usare + 0.5 * pipsize e – 0.5 * pipsize. Perché se lavori solo sul DAX può andare bene anche così, il rapporto Pip/Prezzo è 1:1, ma su altri srumenti può essere 1:10000. Indicando PipSize lasci che se ne preoccupi ProOrder e crei un codice portabile su tutti gli strumenti.

    Quanto all’altro punto, quando si verificano le condizioni devi salvarti il prezzo d’ingresso in una variabile, diversa tra Long e Short (e devi metterlo a zero quando sarai a mercato), dopodiché ogni candela piazzi nuovamente l’ordine pendente finché lo vuoi tu, con la condizione:

    IF PrezzoIngressoLong THEN
       BUY 1 CONTRACT AT PrezzoIngressoLong stop
    ENDIF
    #103895 quote
    R05
    Participant
    Veteran

    Grazie Roberto, gentilissimo. Ho modificato il sistema come di seguito.

    // Definizione dei parametri del codice
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    // Il sistema cancellerà tutti gli ordini in attesa e chiuderà tutte le posizioni a 0:00. Dopo l'orario "Flat Before" non saranno piazzati nuovi ordini o posizioni.
    DEFPARAM FLATBEFORE = 090000
    // Cancellare tutti gli ordini in attesa e chiudere tutte le posizioni all'orario "Flat After"
    DEFPARAM FLATAFTER = 173000
    
    once miopatternlong = 0
    once miopatternshort = 0
    
    IF OnMarket THEN
    miopatternlong = 0                    //resettare la variabile al valore iniziale, se a mercato
    ENDIF
    IF miopatternlong THEN
    IF (BarIndex - miopatternlong) > 5 THEN
    miopatternlong = 0                 //resettare la variabile al valore iniziale dopo n candele
    ENDIF
    ENDIF
    
    IF OnMarket THEN
    miopatternshort = 0                    //resettare la variabile al valore iniziale, se a mercato
    ENDIF
    IF miopatternshort THEN
    IF (BarIndex - miopatternshort) > 5 THEN
    miopatternshort = 0                 //resettare la variabile al valore iniziale dopo n candele
    ENDIF
    ENDIF
    
    
    
    xClose = (Open+High+Low+Close)/4
     
    if(barindex>2) then
    xOpen = (xOpen[1] + xClose[1])/2
    endif
    
    // inizia con i nuovi valori alle 8 di ogni giorno
    IF time = 080000 THEN
    Minimo  = low             //o xLow
    Massimo = high            //o xHigh
    ENDIF
    // aggiorna i valori ogni candela (alle 8 saranno invariati, uguali a sopra)
    Minimo  = min(Minimo,low)    //anche qui puoi usare le HA
    Massimo = max(Massimo,high)  //anche qui puoi usare le HA
    
    // Condizioni per entrare su posizioni long
    c1 = minimo
    c2 = low
    g1 = (c1=c2)
    
    IF g1 THEN
    miopatternlong=barindex
    Ingressolong = max(xopen,high)
    ENDIF
    
    if miopatternlong then
    BUY 1 CONTRACT AT ingressolong+0.5*pipsize stop
    endif
    
    // Condizioni per entrare su posizioni short
    c10 = massimo
    c20 = high
    g10 = (c10=c20)
    
    IF g10 THEN
    miopatternshort=barindex
    Ingressoshort= min(xopen,low)
    ENDIF
    
    if miopatternshort then
    sellshort 1 CONTRACT AT Ingressoshort -0.5*pipsize stop
    endif
    
    // Stop e target
    SET STOP pLOSS 30
    SET TARGET pPROFIT 18
    

    Solo una conferma le righe 15 e 24 mi tengono aperta la condizione per le 5 candele successive alla condizione di setup? In allegato ti metto ciò che mi fa il sistema: la prima operazione è corretta, ma le altre successive non le riesco a capire. Praticamente raggiunto il target della prima operazione, che poi è l’unica che dovrebbe essere fatta, mi fa aprire a catena anche le altre.

    Cattura-2.jpg Cattura-2.jpg
    #103905 quote
    robertogozzi
    Moderator
    Master

    Si, le righe 15 e 24 sono corrette.

    L’altro problema potrebbe essere perché esce sulla stessa barra e OnMarket non ha modo di sapere che è già entrato a mercato per eseguire le righe 12 e 21 e si ferma solo dopo 5 barre.

    Prova a modificare le righe 11 e 20 così:

    If OnMarket or STRATEGYPROFIT <> STRATEGYPROFIT[1] Then

    in questo modo capisce di essere entrato e uscito perché STRATEGYPROFIT è diverso dalla barra precedente.

    #103942 quote
    R05
    Participant
    Veteran

    Ok grazie Roberto. Ho modificato le righe 11 e 20 come hai detto tu. Risolto. Grazie

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

Sistema intraday


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
R05 @r05 Participant
Summary

This topic contains 8 replies,
has 2 voices, and was last updated by R05
6 years, 6 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 07/31/2019
Status: Active
Attachments: 5 files
Logo Logo
Loading...