Pattern di Gramza

Viewing 15 posts - 1 through 15 (of 54 total)
  • Author
    Posts
  • #44312 quote
    R05
    Participant
    Veteran

    Salve a tutti vi scrivo per chiedervi, gentilmente, aiuto per cercare di completare il seguente pattern che dovrebbe riproporre quello di Gramza. Mi servono due informazioni:

    • Come impostare lo stop loss qualche punto sotto il minimo/sopra il massimo della candela subito precedente a quella di entrata in posizione
    • Come impostare il trailing stop qualche punto sotto il minimo/sopra il massimo della candela successiva man mano che il trade guadagna

    Es.: time frame 15 minuti: entro in posizione long alle 9:15 e lo stop è qualche punto sotto il minimo della candela delle 9:00. Incomincio a guadagnare e alle 9:30 lo stop si dovrà spostare qualche punto sotto il minimo della candela delle 9:15 e così via.

    Grazie a chiunque mi aiuterà.

     

     

    defparam flatbefore = 080000

    defparam flatafter = 173000

    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate

     

    Hammer = (Close<Open AND (Open-Low) >= 2*(Open-Close))

    Hammer2 = (Close>Open AND (high-open) >= 2*(Close-Open))

    ShootingStar = (close>open and (high-close)>=2*(close-open))

    ShootingStar2 = (close<open and (close-low)>=2*(open-close))

    Candelarossa = (open>close)

    Candelaverde = (open<close)

     

    s = high

    t = high[1]

    z = high[2]

    stoploss = (close CROSSES UNDER low[1])

     

    // Condizioni per entrare su posizioni long

    IF NOT longOnMarket and s<t and t<z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelaverde) THEN

    buy 1 CONTRACTS at high+1 stop

    ENDIF

     

    s = low

    t = low[1]

    z = low[2]

    stoploss = (close CROSSES over high[1])

     

    // Condizioni per entrare su posizioni short

    IF NOT shortOnMarket and s>t and t>z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelarossa) THEN

    sellshort 1 CONTRACTS at low-1 stop

    ENDIF

     

    // Stop e target

    set stop ploss stoploss

    SET TARGET pPROFIT 10

    #44450 quote
    R05
    Participant
    Veteran

    Buon pomeriggio, nessuno mi può aiutare col pattern di Gramza?

    #44476 quote
    robertogozzi
    Moderator
    Master

    Per settare lo STOP LOSS iniziale:

    IF close > open THEN               //LONG
       MinLow   = low
       StopLoss = ((close - low) / pipsize) + 2  //2 pips sotto il minimo
    ELSE                               //SHORT
       MaxHigh  = high
       StopLoss = ((high - close) / pipsize) + 2 //2 pips sopra il massimo
    ENDIF
    .
    .
    SET STOP PLOSS StopLoss

    Per il TRAILING STOP, basta confrontare il minimo/massimo di ogni barra con le variabili (di cui sopra) ed eventualmente aggiornarle ed inserire l’ordine di STOP con il nuovo valore:

    IF LongOnMarket THEN         //per i LONG
       IF low > MinLow THEN      //verificare che sia un MINIMO più alto
          MinLow = Low           //aggiornare la variabile
       ENDIF
       SELL AT MinLow STOP       //aggiornare l'ordine di STOP ad ogni candela
    ENDIF
    IF ShortOnMarket THEN        //per gli SHORT
       IF high < MaxHigh THEN    //verificare che sia un MASSIMO più basso
          MaxHigh = high         //aggiornare la variabile
       ENDIF
       EXITSHORT AT MaxHigh STOP //aggiornare l'ordine di STOP ad ogni candela
    ENDIF

    Non l’ho verificato, devi testarlo tu.

    Gli ordini LIMIT e STOP (non quelli a mercato) vengono annullati automaticamente da ProOrder alla chiusura di ciascuna candela, in questo caso ogni 15 minuti, quindi vanno reinseriti di nuovo ad ogni candela, anche se non è stato fatto un nuovo massimo/minimo, questo per il trailing. Resta, invece, sempre valido l’rdine di STOP indicato inizialmente all’apertura dell’operazione.

    Per la tua riga di codice

    stoploss = (close CROSSES over high[1])

    non va bene, in quanto mette nella variabile “stoploss” un valore logico (0 oppure 1), in quanto gli assegna il valore vero/falso del fatto che CLOSE abbia un incrocio rialzista col MASSIMO precedente.

    Inoltre, sew ho ben capito cosa intendi per massimi/minimi precedenti, tu intendi quelli che precedono la candela d’entrata. Non c’è bisogno di mettere low [1] o high[1] o close[1], in quanto ogni strategia viene eseguita alla chiusura della candela (che quindi è quella corrente, non la precedente), ad esempio all 09:00 viene eseguita la tua strategia sul 15 minuti e le condizioni vengono testate sulla candela aperta alle 08:45:00, la precedente è quella delle 08:30:00. Il trade, se deve essere aperto, viene aperto SEMPRE all’apetrtura della candella a quella appena chiusa, quindi nell’esempio di cui sopra alle 09:00:00. E’ un pochino complicato all’inizio capire alcuni meccanismi di ProOrder.

    Riepilogando:  alle 09:00:00 viene eseguita la strategia verificando che le condizioni siano soddisfatte sulla candela delle 08:45:00 che si è appena chiusa e, in caso affermativo, viene aperta un’operazione Long/Short sulla candele delle 09:00:00 che sta per aprirsi.

    #44478 quote
    robertogozzi
    Moderator
    Master

    Scusami per qualche errore di battitura, in particolare la frase “Il trade, se deve essere aperto, viene aperto SEMPRE all’apetrtura della candella a quella appena chiusa,” va intesa come “”Il trade, se deve essere aperto, viene aperto SEMPRE all’apertura della candela successiva a quella appena chiusa,”.

    Roberto

    #44481 quote
    R05
    Participant
    Veteran

    Ci mancherebbe. Grazie, gentilissimo. Provo e ti faccio sapere

    #44483 quote
    R05
    Participant
    Veteran

    Un’altra gentilezza se possibile. Nel back test c’è la funzione Probacktest in modalità tick per tick che se spuntata mi cambia di molto i risultati del back test stesso.

    Non riesco a capire: deve spuntare la casella o devo lasciarla? Non vorrei che penso che una strategia vada bene e invece poi non è buona.

    Grazie.

    #44488 quote
    robertogozzi
    Moderator
    Master

    Purtroppo ProOreder, fino a fine 2016, aveva il problema dello Stop Loss e del Take Profit sulla stessa barra.

    In pratica quando capitava che nel corso della stessa barra ci fossero sia lo Stop Loss che il Take Profit, ProOrder prendeva per buono il Take Profit, anche se, nella realtà poteva essere successo che fosse stato colpito per primo lo Stop Loss, con ovvii risultati di backtest falsati!

    Questo per come era impostata la piattaforma. Dall’1/1/2017 con la nuova versione il problema è stato risolto aggiungendo quella dicitura che tu hai detto, da spuntare o meno.

    In realtà sarebbe bene (almeno sui timeframe maggiori) spuntarla sempre perché in tal modo quando capitano sia Stop Loss che Take Profit sulla stessa candela ProOrder la esamina tick per tick per vedere quale dei due viene colpito per primo, in modo da avere backtest affidabili. Questo però rallenta il sistema e quindi il backtest, inoltre tale modalità non può essere usata se il backtest parte da un pò di tempo indietro, ad esempio con il Daily mi pare si possano testare in quel modo solo gli ultimi 2-3 anni, non di più, per altri timeframe meno ancora.

    Quindi il backtest, senza quella spunta, è meno affidabile, a meno che tu non operi su timeframe brevi, forse dal 15 minuti in giù, non saprei, prova a fare i test con e senza la spunta, se il risultato non cambia significa che quel problema non c’è.

    Nelle prime fasi di scrittura di una strategia si può omettere la spunta per velocizzare il backtest, per poi aggiungerla nelle fasi finali.

    #44549 quote
    R05
    Participant
    Veteran

    Gent.mo Roberto ho provato a fare le modifiche che mi hai proposto ma purtroppo, per quanto riguarda lo stop, appena entro in posizione viene inserito sul massimo della candela in cui entro (a me servirebbe sul max della candela precedente) e poi quando va in trailing stop mi sposta lo stop subito sul massimo della candela successiva ma in questo modo deve andare per forza nella mia direzione altrimenti con un minimo ritracciamento lo stop viene preso subito.

    Sul codice seguente che mi hai proposto, siccome non partiva, ho riportato minlow=minlow e maxhigh=maxhigh, non so però se corretto (anche se mi fa partire il trading system).

    IF close > open THEN               //LONG
       MinLow   = low
       StopLoss = ((close low) / pipsize) + 2  //2 pips sotto il minimo
    ELSE                               //SHORT
       MaxHigh  = high
       StopLoss = ((high close) / pipsize) + 2 //2 pips sopra il massimo
    ENDIF

    Grazie per la disponibilità.

    #44557 quote
    robertogozzi
    Moderator
    Master

    L’istruzione

    buy 1 CONTRACTS at high+1 stop

    potrebbe non essere MAI eseguita, ad esempio su EurUsd che vale 1.1700 circa, perché aggiungendoci 1 diventa 2.1700 e NON si verificherà per un bel pò, mentre potrebbe andare bene con lo YEN od il DAX, ma è solo un caso. Per essere sicuro che funzioni sempre aggiungendo (o togliendo) 1 pip devi scrivere:

    buy 1 CONTRACTS at (high + (1 * pipsize)) stop

    è ProOrder che, conoscendo il valore di ogni pip per ciascuno strumento, fa i dovuti aggiustamenti.

    Con ancora un pò di tempo a disposizione proverò a fare ulteriori verifiche.

    #44564 quote
    robertogozzi
    Moderator
    Master

    Questo è il tuo codice come io l’ho modificato:

    defparam flatbefore     = 080000
    defparam flatafter      = 173000
    DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
    
    Hammer                  = (Close<Open AND (Open-Low) >= 2*(Open-Close))
    Hammer2                 = (Close>Open AND (high-open) >= 2*(Close-Open))
    ShootingStar            = (close>open and (high-close)>=2*(close-open))
    ShootingStar2           = (close<open and (close-low)>=2*(open-close))
    Candelarossa            = (open>close)
    Candelaverde            = (open<close)
    
    IF close > open THEN                         //LONG
       MinLow   = low
       StopLoss = ((close - low) / pipsize) + 2  //2 pips sotto il minimo
    ELSE                                         //SHORT
       MaxHigh  = high
       StopLoss = ((high - close) / pipsize) + 2 //2 pips sopra il massimo
    ENDIF
    
    s                       = high
    t                       = high[1]
    z                       = high[2]
    // Condizioni per entrare su posizioni long
    IF s<t and t<z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelaverde) THEN
       buy 1 CONTRACTS at (high + (1 * pipsize)) stop
    ENDIF
    
    s                       = low
    t                       = low[1]
    z                       = low[2]
    // Condizioni per entrare su posizioni short
    IF s>t and t>z and (hammer or hammer2 or ShootingStar or ShootingStar2 or candelarossa) THEN
       sellshort 1 CONTRACTS at (low - (1 * pipsize)) stop
    ENDIF
    
    // Stop e target
    set stop   ploss   stoploss
    SET TARGET pPROFIT 10
    //
    GRAPH StopLoss AS "SL"
    GRAPH MinLow   AS "Min"
    GRAPH MaxHigh  AS "Max"
    

    Ho aggiunto i calcoli dello StopLoss, come avevo suggerito, poi ho modificato gli IF long e short perché non serve verificarlo, in quanto con DEFPARAM CumulateOrders gli hai già impedito di eseguire più di un’operazione.

    Con le tre istruzioni GRAPH finali (puoi commentarle quando non vuoi usarle) puoi vedere i valori delle variabili.

    A me funziona, non m’interessa se profittevole o meno in quanto non sono entrato nel merito della logica. Questo lo devi fare tu.

    #44606 quote
    R05
    Participant
    Veteran

    Si scusa grazie col forex sbagliavo. Per il resto lo sto provando in demo e mi sembra tutto ok. Continuo a testarlo. Ho solo dovuto togliere graph perché mi dava errore (allego l’immagine).

    #44618 quote
    R05
    Participant
    Veteran

    Avrei anche un’altra richiesta, gentilmente, da fare. Vorrei cercare di sfruttare l’entrata su massimi e minimi tipo “turtle soup”: in pratica se ho un nuovo massimo a 20 periodi dovrei entrare short quando raggiunge il massimo precedente e posizionare lo stop sopra il massimo della candela di entrata in cui si è verificato il nuovo massimo. Allego il codice preso nella libreria a cui ho fatto delle modifiche: riesco ad entrare short sotto il minimo della candela precedente a 20 periodi e viceversa long ma mi mancano le seguenti due condizioni:

    • vorrei poter entrare anche durante la stessa barra al raggiungimento del minimo/massimo precedente come al punto 1 e al punto 2 dell’immagine allegata che è di oggi nel caso in cui la condizione si verifichi (so che proorder fa entrare alla barra successiva, ma non c’è un metodo per entrare nella candela al verificarsi della condizione e non entrare solo alla barra successiva?)
    • vorrei che lo stop sia sul max giornaliero (o della candela di setup) e la massima perdita deve essere pari a 30 euro altrimenti il trade non parte

    Ringrazio sempre della disponibilità.

     

    DEFPARAM CumulateOrders = False
    n = 2
    // Conditions pour ouvrir une position acheteuse
    c1 = close < lowest[20](low)[1]
    ctime = time > 060000 and time < 220000
     IF c1 AND ctime THEN
    BUY n CONTRACT AT lowest[20](low)[1] + 1 stop
    ENDIF
     
    // Conditions pour fermer une position acheteuse
    c3 = high > highest[5](high)[1]
     
    IF c3 THEN
    SELL AT MARKET
    ENDIF
     
    // Conditions pour ouvrir une position vendeuse
    c1 = close > highest[20](high)[1]
    ctime = time > 060000 and time < 220000
     
    IF c1 AND ctime THEN
    SELLSHORT n CONTRACT AT highest[20](high)[1] - 1 stop
    ENDIF
     
    // Conditions pour fermer une position vendeuse
    c3 = low > lowest[5](low)[1]
     
    IF c3 THEN
    EXITSHORT AT MARKET
    ENDIF
     
    // Stops et objectifs
    SET STOP LOSS 60
    set target pprofit 10
    
    #44632 quote
    robertogozzi
    Moderator
    Master

    No, si può entrare solo subito DOPO la chiusura della barra,  all’apertura della successiva. Questo almeno finché non verrà rilasciata una verione, speriamo entro fine anno, che sarà slegata al timeframe.

    Ricorda che

    AT lowest[20](low)[1] + 1

    Può andare bene per il dax o altri indici, o per coppie come UsdJpy, per le altre no, dovresti usare

    AT lowest[20](low)[1] + (1 * pipsize)

    Il massimo giornaliero, se sei sul daily, è semplicemente dato da

    high

    che è la chiusura della barra in corso, poi il trade, a condizioni verificate, verrà aperto all’apertura della successiva.

    Se usi un TF (TimeFrame) inferiore al giorno puoi anche avere il massimo/minimo giornaliero, sapendo quante candele sono passate, usando

    highest[](max)
       oppure
    lowest[](low)

    Se, ad esempio, sei su un TF ad 1 minuto e sono le 090000 ed il nuovo giorno è iniziato alle 000001, sai che sono trascorse 540 barre (9 ore per 60 barre ogni ora) ed indichi 60 nelle parentesi quadre.

    Per la perdita massima, basta che verifichi tu che i PIPS calcolati come Stop Loss non la superino, se sei sul MiniDAX, ad esmpio, dove 1 PIP = 1 Euro, verifica di non avere uno Stop Loss maggiore.

    Tieni presente che il broker prevede anche Stop Loss minimi, ad esempio IG chiede almeno 6 pips di Stop Loss per il DAX, quindi se indichi un valore inferiore il trade non viene eseguito, la strategia riceve un errore e ProOrder la termina e dovrai intervenire manualmente per farla ripartire.

    #44633 quote
    robertogozzi
    Moderator
    Master

    Ad ogni modo, sei vuoi cercare dettagli su un’istruzione, thread e post su un particolare tema, puoi usare il box di ricerca che sta sotto il tuo avatar, basta che ci vada sopra col mouse e si apre ed è subito in alto, come puoi vedere dalla foto allegata.

    Nicolas thanked this post
    #44635 quote
    robertogozzi
    Moderator
    Master

    Scusami, ma le righe 1, 2 e 3 precedenti vanno sostituite con

    highest[](high)
       oppure
    lowest[](low)
Viewing 15 posts - 1 through 15 (of 54 total)
  • You must be logged in to reply to this topic.

Pattern di Gramza


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
R05 @r05 Participant
Summary

This topic contains 53 replies,
has 5 voices, and was last updated by volpiemanuele
7 years, 7 months ago.

Topic Details
Forum: ProOrder: Trading Automatico & Backtesting
Language: Italian
Started: 08/21/2017
Status: Active
Attachments: 7 files
Logo Logo
Loading...