Buy limite al prezzo d'incrocio di medie mobili.

Viewing 15 posts - 1 through 15 (of 18 total)
  • Author
    Posts
  • #48673 quote
    maximus78
    Participant
    Senior

    Buonasera a tutti, vorrei impostare un ordine di acquisto limite sul prezzo d’incrocio a rialzo di 2 medie mobili (la breve che incrocia a rialzo quella a lungo periodo), in pratica comprare sul pullback ed impostare uno stop loss sotto tale livello.

    Qualcuno sa come fare?

    Grazie mille

    Massimo

    #48684 quote
    robertogozzi
    Moderator
    Master

    Non è chiarissima la tua richiesta, vuoi comprare al prezzo d’incrocio al rialzo delle due medie, oppure sul pullback?

    Devi però definire cos’è per te un pullback, un certo numero fisso di pips, oppure quale livello?

    Vuoi per caso comprare quando, dopo l’incrocio al rialzo, il prezzo tocca una media, quale delle due?

    Roberto

    #48699 quote
    maximus78
    Participant
    Senior

    Ciao Roberto,

    l’idea è che quando avviene un incrocio a rialzo per se: ema 5 crossover ema 20, voglio impostare un ordine di acquisto limite sul livello di prezzo dell’incrocio che resti in attesa per un n° di candele che imposto, per es: 50 periodi.

    Se il prezzo ritraccia e tocca il livello di prezzo d’incrocio compra (questo lo definisco un pullback).

    Quando entra in posizione imposta subito anche uno stop loss sotto il più basso minimo delle ultime candele prima e compresa dell’incrocio, es: ultime 10 barre (lowest [10](low)).

    In questo modo non compro sulla forza di movimento del prezzo ma attendo un ritracciamento per comprare.

    Poi vorrei impostare un trailing profit oppure un take profit basato sul prezzo d’entrata-stop loss.

    Ti allego un grafico che fa chiarezza per esempio.

    Grazie

    Max

    #48740 quote
    robertogozzi
    Moderator
    Master

    Ok, proverò a buttare giù qualcosa e ti farò sapere.

    Roberto

    #48797 quote
    robertogozzi
    Moderator
    Master

    Ho creato questa strategia per il DAX, TF h1:

    DEFPARAM CumulateOrders = false
    
    ONCE PositionSize       = 1
    ONCE Crossing           = 0                         //Inizializzare CROSSING a 0
    ONCE CrossingPrice      = 0
    ONCE MaxLookBack        = 5                         //Numero di candele da esaminare per il minimo da usare...
    ONCE StopLoss           = 0                         //...come Stop Loss dopo l'incrocio
    ONCE BarID              = 0                         //Numero della candela in cui avviene l'incrocio
    ONCE MaxWaitingBars     = 30                        //Numero max. di candela da attendere dopo l'incrocio
    ONCE MaxCandles         = 60                        //Uscire dopo questo numero di candele
    ONCE AvgType            = 2                         //2 = wma (media ponderata)
    
    IF (Barindex - Tradeindex) >= MaxCandles THEN       //Chiudere la posizione dopo un certo numero di candele
       SELL AT MARKET
    ENDIF
    
    IF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THEN
       Crossing             = 0                         //Redsettare le variabili al valore di default dopo...
       StopLoss             = 0                         //...l'apertura di un'operazione oppure dopo un certo...
       BarID                = 0                         //...numero di candele
       CrossingPrice        = 0
    ENDIF
    
    FastEma                 = Average[4,AvgType](close) //4
    SlowEma                 = Average[12,AvgType](close)//12
    
    IF FastEma CROSSES OVER SlowEma AND (NOT Crossing) THEN
       Crossing            = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = lowest[MaxLookBack](low)  //Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = close                     //Prezzo di entrata (ordine pendente)
    ENDIF
    
    //                LONG
    IF Crossing THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice + (CrossingPrice - StopLoss))  //TP = SL
       BUY PositionSize CONTRACTS AT CrossingPrice LIMIT               //Ordine pendente sul ritracciamento
    ENDIF
    //GRAPH CrossingPrice
    //GRAPH StopLoss
    //GRAPH (CrossingPrice + (CrossingPrice - StopLoss))
    //GRAPH Crossing
    //GRAPH BarID

    Ho dovuto mettere un limite al numero di barre, altrimenti l’operazione avrebbe potuto durare migliaia di ore!

    Inoltre tieni presente che il prezzo d’incrocio è sempre quello di chiusura della barra, perché ovviamente NON è possibile sapere se l’incrocio avviene dentro la barra ed esattamente a quale prezzo.

    Ho messo le medie Mobili in modo generico, così è sufficiente cambiare la variabile AVGTYPE per usare un metodo diverso di calcolo.

    Roberto

    #48818 quote
    maximus78
    Participant
    Senior

    Ciao Roberto, chiarissimo grazie mille.

    Se voglio fare anche la vendita allo scoperto, devo implementare il codice in questo modo?

    IF FastEma CROSSES UNDER SlowEma AND (NOT Crossing) THEN
       Crossing            = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = highest[MaxLookBack](high)  //Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = close                     //Prezzo di entrata (ordine pendente)
    ENDIF
     
    //                SHORT
    IF Crossing THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice - (StopLoss-CrossingPrice))  //TP = SL
       SELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT               //Ordine pendente sul ritracciamento
    ENDIF
    #48820 quote
    robertogozzi
    Moderator
    Master

    No, servono altre variabili e verifiche incrociate, in modo che se ad un incrocio al rialzo ne segue a breve uno al ribasso, occorre azzerare i segnali del primo.

    Ma stai tranquillo, la spiegazione è più complessa della realizzazione.

    Appena trovo 15 minuti domani faccio la modifica e la posto.

    maximus78 thanked this post
    #48826 quote
    maximus78
    Participant
    Senior

    Ah ok, grazie mille Roberto!

    #48873 quote
    robertogozzi
    Moderator
    Master

    Ho fatto le modifiche per aggiungere la vendita, provale (ovviamente i vari parametri, Medie, numero Barre, ecc…. devi aggiustarle te al tuo TF ed alle tua preferenze):

    DEFPARAM CumulateOrders = false
     
    ONCE PositionSize       = 1
    ONCE CrossingUP         = 0                         //Inizializzare CROSSING UP a 0
    ONCE CrossingDN         = 0                         //Inizializzare CROSSING DOWN a 0
    ONCE CrossingPrice      = 0
    ONCE MaxLookBack        = 5                         //Numero di candele da esaminare per il minimo da usare...
    ONCE StopLoss           = 0                         //...come Stop Loss dopo l'incrocio
    ONCE BarID              = 0                         //Numero della candela in cui avviene l'incrocio
    ONCE MaxWaitingBars     = 30                        //Numero max. di candela da attendere dopo l'incrocio
    ONCE MaxCandles         = 60                        //Uscire dopo questo numero di candele
    ONCE AvgType            = 2                         //2 = wma (media ponderata)
     
    IF (Barindex - Tradeindex) >= MaxCandles THEN       //Chiudere la posizione dopo un certo numero di candele
       SELL AT MARKET
       EXITSHORT AT MARKET
    ENDIF
     
    IF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THEN
       CrossingDN           = 0
       CrossingUP           = 0                         //Resettare le variabili al valore di default dopo...
       StopLoss             = 0                         //...l'apertura di un'operazione oppure dopo un certo...
       BarID                = 0                         //...numero di candele
       CrossingPrice        = 0
    ENDIF
     
    FastEma                 = Average[4,AvgType](close) //4
    SlowEma                 = Average[12,AvgType](close)//12
     
    //                LONG
    IF FastEma CROSSES OVER SlowEma AND (NOT CrossingUP) THEN
       CrossingDN          = 0                         //Azzerare eventuali precedenti incroci ribassisti
       CrossingUP          = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = lowest[MaxLookBack](low)  //Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = close                     //Prezzo di entrata (ordine pendente)
    ENDIF
    
    IF CrossingUP THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice + (CrossingPrice - StopLoss))  //TP = SL
       BUY PositionSize CONTRACTS AT CrossingPrice LIMIT               //Ordine pendente sul ritracciamento
    ENDIF
    
    //                SHORT
    IF FastEma CROSSES UNDER SlowEma AND (NOT CrossingDN) THEN
       CrossingUP          = 0                         //Azzerare eventuali precedenti incroci rialzisti
       CrossingDN          = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = highest[MaxLookBack](high) //Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = close                     //Prezzo di entrata (ordine pendente)
    ENDIF
    
    IF CrossingDN THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice + (CrossingPrice - StopLoss))  //TP = SL
       SELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT         //Ordine pendente sul ritracciamento
    ENDIF
    //GRAPH CrossingPrice
    //GRAPH StopLoss
    //GRAPH (CrossingPrice + (CrossingPrice - StopLoss))
    //GRAPH Crossing
    //GRAPH BarID

    Roberto

    Nicolas thanked this post
    #48993 quote
    maximus78
    Participant
    Senior

    Grande Roberto!! lo provo e ti faccio sapere!

    grazie per la disponibilità e la velocità di programmazione!

    Max

    #49378 quote
    maximus78
    Participant
    Senior

    Ciao Roberto, ho verificato i due sistemi, solo long e long/short ma purtroppo entra in posizione sulla candela successiva all’incrocio e non successivamente quando il prezzo ritraccia sul prezzo a cui è avvenuto l’incrocio.

    Sono da rivedere i codici, proverò a lavorarci su.

    Grazie comunque!

    #49472 quote
    Nicolas
    Keymaster
    Master

    non successivamente quando il prezzo ritraccia sul prezzo a cui è avvenuto l’incrocio.

    Dovrebbe essere perché Roberto ha usato ordini LIMIT.
    Quello che può succedere è che il prezzo sia troppo vicino per mettere l’ordine LIMIT o già sotto di esso per un ordine di acquisto ad esempio.
    Inoltre, tenere presente che il codice è letto solo una volta per bar e molte cose possono accadere tra 2 bar aperti.

    #49488 quote
    robertogozzi
    Moderator
    Master

    Come ha detto Nicolas, durante una candela di un’ora possono succedere molte cose!

    Ho variato il codice mettendo l’entrata a MERCATO, invece che con ordini LIMIT. Questo, però, può aggravare il problema, secondo me, perché entrare a mercato alla chiusura della barra, invece che con ordine limit, può farti entrare con molti PIPS di differenza!

    Inoltre, siccome può capitare che il prezzo ritracci subito,  ho aggiunto la variabile Bar2Elapse per stabilire che tu vuoi prendere per buono il ritracciamento solo DOPO “n” barre, quind puoi settarla a 0 per accettere anche un ritracciamento immediato, oppure quando tu ritieni più opportuno.

    DEFPARAM CumulateOrders = false
     
    ONCE PositionSize       = 1
    ONCE CrossingUP         = 0                         //Inizializzare CROSSING UP a 0
    ONCE CrossingDN         = 0                         //Inizializzare CROSSING DOWN a 0
    ONCE CrossingPrice      = 0
    ONCE MaxLookBack        = 5                         //Numero di candele da esaminare per il minimo da usare...
    ONCE StopLoss           = 0                         //...come Stop Loss dopo l'incrocio
    ONCE BarID              = 0                         //Numero della candela in cui avviene l'incrocio
    ONCE MaxWaitingBars     = 30                        //Numero max. di candela da attendere dopo l'incrocio
    ONCE MaxCandles         = 60                        //Uscire dopo questo numero di candele
    ONCE AvgType            = 2                         //2 = wma (media ponderata)
    ONCE Bar2Elapse         = 5                         //Numero di barre di attesa prima di entrare
     
    IF (Barindex - Tradeindex) >= MaxCandles THEN       //Chiudere la posizione dopo un certo numero di candele
       SELL AT MARKET
       EXITSHORT AT MARKET
    ENDIF
     
    IF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THEN
       CrossingDN           = 0
       CrossingUP           = 0                         //Resettare le variabili al valore di default dopo...
       StopLoss             = 0                         //...l'apertura di un'operazione oppure dopo un certo...
       BarID                = 0                         //...numero di candele
       CrossingPrice        = 0
    ENDIF
     
    FastEma                 = Average[4,AvgType](close) //4
    SlowEma                 = Average[12,AvgType](close)//12
     
    //                LONG
    IF FastEma CROSSES OVER SlowEma AND (NOT CrossingUP) THEN
       CrossingDN          = 0                         //Azzerare eventuali precedenti incroci ribassisti
       CrossingUP          = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = lowest[MaxLookBack](low)  //Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = close                     //Prezzo di entrata (ordine pendente)
    ENDIF
     
    IF CrossingUP AND (BarIndex - BarID) >= Bar2Elapse THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice + (CrossingPrice - StopLoss))  //TP = SL
       //BUY PositionSize CONTRACTS AT CrossingPrice LIMIT  //Ordine pendente sul ritracciamento   
       IF close >= CrossingPrice THEN
          BUY PositionSize CONTRACTS AT MARKET              //Ordine a mercato sul ritracciamento
       ENDIF
    ENDIF
    //                SHORT
    IF FastEma CROSSES UNDER SlowEma AND (NOT CrossingDN) THEN
       CrossingUP          = 0                         //Azzerare eventuali precedenti incroci rialzisti
       CrossingDN          = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = highest[MaxLookBack](high)//Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = close                     //Prezzo di entrata (ordine pendente)
    ENDIF
     
    IF CrossingDN AND (BarIndex - BarID) >= Bar2Elapse THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice + (CrossingPrice - StopLoss))  //TP = SL
       //SELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT       //Ordine pendente sul ritracciamento
       IF close <= CrossingPrice THEN
          SELLSHORT PositionSize CONTRACTS AT MARKET                   //Ordine a mercato sul ritracciamento
       ENDIF
    ENDIF
    //GRAPH CrossingPrice
    //GRAPH StopLoss
    //GRAPH (CrossingPrice + (CrossingPrice - StopLoss))
    //GRAPH Crossing
    //GRAPH BarID

    Roberto

    #49740 quote
    maximus78
    Participant
    Senior

    Ciao Ragazzi,

    allego i backtest x tutti e 3 i sistemi…i primi due, solo long and long/short limit comprano alla barra successiva all’incrocio, at market successivamente.

    Ho segnato con linee spesse blu dove avviene l’incrocio e quindi il livello che il prezzo che dovrebbe ritestare x entrare in posizione, con il cerchio dove il sistema entra in posizione (si vede dalle barre verde/rossa e frecce del backtest).

    Massimo

    #49767 quote
    robertogozzi
    Moderator
    Master

    Era dovuto al fatto che avevo preso come riferimento il prezzo della chiusura della candela in cui avveniuva l’incrocio, per cui entrava sempre all’apertura della successiva. Adesso ho variato il prezzo d’entrata sulla Media veloce, mi sembra vada meglio, prova

    DEFPARAM CumulateOrders = false
     
    ONCE PositionSize       = 1
    ONCE CrossingUP         = 0                         //Inizializzare CROSSING UP a 0
    ONCE CrossingDN         = 0                         //Inizializzare CROSSING DOWN a 0
    ONCE CrossingPrice      = 0
    ONCE MaxLookBack        = 5                         //Numero di candele da esaminare per il minimo da usare...
    ONCE StopLoss           = 0                         //...come Stop Loss dopo l'incrocio
    ONCE BarID              = 0                         //Numero della candela in cui avviene l'incrocio
    ONCE MaxWaitingBars     = 30                        //Numero max. di candela da attendere dopo l'incrocio
    ONCE MaxCandles         = 60                        //Uscire dopo questo numero di candele
    ONCE AvgType            = 2                         //2 = wma (media ponderata)
    ONCE Bar2Elapse         = 5                         //Numero di barre di attesa prima di entrare
     
    IF (Barindex - Tradeindex) >= MaxCandles THEN       //Chiudere la posizione dopo un certo numero di candele
       SELL AT MARKET
       EXITSHORT AT MARKET
    ENDIF
     
    IF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THEN
       CrossingDN           = 0
       CrossingUP           = 0                         //Resettare le variabili al valore di default dopo...
       StopLoss             = 0                         //...l'apertura di un'operazione oppure dopo un certo...
       BarID                = 0                         //...numero di candele
       CrossingPrice        = 0
    ENDIF
     
    FastEma                 = Average[4,AvgType](close) //4
    SlowEma                 = Average[12,AvgType](close)//12
     
    //                LONG
    IF FastEma CROSSES OVER SlowEma AND (NOT CrossingUP) THEN
       CrossingDN          = 0                         //Azzerare eventuali precedenti incroci ribassisti
       CrossingUP          = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = lowest[MaxLookBack](low)  //Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = FastEma  //close          //Prezzo di entrata (ordine pendente)
    ENDIF
     
    IF CrossingUP AND (BarIndex - BarID) >= Bar2Elapse THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice + (CrossingPrice - StopLoss))  //TP = SL
       //BUY PositionSize CONTRACTS AT CrossingPrice LIMIT  //Ordine pendente sul ritracciamento
       IF close >= CrossingPrice THEN
          BUY PositionSize CONTRACTS AT MARKET              //Ordine a mercato sul ritracciamento
       ENDIF
    ENDIF
    //                SHORT
    IF FastEma CROSSES UNDER SlowEma AND (NOT CrossingDN) THEN
       CrossingUP          = 0                         //Azzerare eventuali precedenti incroci rialzisti
       CrossingDN          = 1                         //Settare CROSSING ad 1 per segnalare l'avvenuto incrocio
       StopLoss            = highest[MaxLookBack](high)//Salvare il prezzo di Stop Loss
       BarID               = Barindex                  //Salvare il numero di candela dell'incrocio
       CrossingPrice       = FastEma  //close          //Prezzo di entrata (ordine pendente)
    ENDIF
     
    IF CrossingDN AND (BarIndex - BarID) >= Bar2Elapse THEN
       SET Stop   Loss   StopLoss
       SET Target Profit (CrossingPrice + (CrossingPrice - StopLoss))  //TP = SL
       //SELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT       //Ordine pendente sul ritracciamento
       IF close <= CrossingPrice THEN
          SELLSHORT PositionSize CONTRACTS AT MARKET                   //Ordine a mercato sul ritracciamento
       ENDIF
    ENDIF
    //GRAPH CrossingPrice
    //GRAPH StopLoss
    //GRAPH (CrossingPrice + (CrossingPrice - StopLoss))
    //GRAPH Crossing
    //GRAPH BarID

    Se tu preferissi fare l’pentrata sul prezzo della media lenta basta la riga dove c’è

    CrossingPrice = FastEma

    con

    CrossingPrice = SlowEma
Viewing 15 posts - 1 through 15 (of 18 total)
  • You must be logged in to reply to this topic.

Buy limite al prezzo d'incrocio di medie mobili.


ProOrder: Trading Automatico & Backtesting

New Reply
Author
author-avatar
maximus78 @maximus78 Participant
Summary

This topic contains 17 replies,
has 3 voices, and was last updated by maximus78
8 years, 3 months ago.

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