Buy limite al prezzo d'incrocio di medie mobili.
Forums › ProRealTime forum Italiano › Supporto ProOrder › Buy limite al prezzo d'incrocio di medie mobili.
- This topic has 17 replies, 3 voices, and was last updated 7 years ago by maximus78.
-
-
10/08/2017 at 10:13 PM #48673
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
10/09/2017 at 1:35 AM #48684Non è 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
10/09/2017 at 6:39 AM #48699Ciao 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
10/09/2017 at 10:42 AM #48740Ok, proverò a buttare giù qualcosa e ti farò sapere.
Roberto
10/09/2017 at 5:43 PM #48797Ho creato questa strategia per il DAX, TF h1:
Solo LONG, sul Pullback1234567891011121314151617181920212223242526272829303132333435363738394041424344DEFPARAM CumulateOrders = falseONCE PositionSize = 1ONCE Crossing = 0 //Inizializzare CROSSING a 0ONCE CrossingPrice = 0ONCE MaxLookBack = 5 //Numero di candele da esaminare per il minimo da usare...ONCE StopLoss = 0 //...come Stop Loss dopo l'incrocioONCE BarID = 0 //Numero della candela in cui avviene l'incrocioONCE MaxWaitingBars = 30 //Numero max. di candela da attendere dopo l'incrocioONCE MaxCandles = 60 //Uscire dopo questo numero di candeleONCE AvgType = 2 //2 = wma (media ponderata)IF (Barindex - Tradeindex) >= MaxCandles THEN //Chiudere la posizione dopo un certo numero di candeleSELL AT MARKETENDIFIF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THENCrossing = 0 //Redsettare le variabili al valore di default dopo...StopLoss = 0 //...l'apertura di un'operazione oppure dopo un certo...BarID = 0 //...numero di candeleCrossingPrice = 0ENDIFFastEma = Average[4,AvgType](close) //4SlowEma = Average[12,AvgType](close)//12IF FastEma CROSSES OVER SlowEma AND (NOT Crossing) THENCrossing = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = lowest[MaxLookBack](low) //Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = close //Prezzo di entrata (ordine pendente)ENDIF// LONGIF Crossing THENSET Stop Loss StopLossSET Target Profit (CrossingPrice + (CrossingPrice - StopLoss)) //TP = SLBUY PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoENDIF//GRAPH CrossingPrice//GRAPH StopLoss//GRAPH (CrossingPrice + (CrossingPrice - StopLoss))//GRAPH Crossing//GRAPH BarIDHo 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
10/09/2017 at 9:45 PM #48818Ciao Roberto, chiarissimo grazie mille.
Se voglio fare anche la vendita allo scoperto, devo implementare il codice in questo modo?
12345678910111213IF FastEma CROSSES UNDER SlowEma AND (NOT Crossing) THENCrossing = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = highest[MaxLookBack](high) //Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = close //Prezzo di entrata (ordine pendente)ENDIF// SHORTIF Crossing THENSET Stop Loss StopLossSET Target Profit (CrossingPrice - (StopLoss-CrossingPrice)) //TP = SLSELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoENDIF10/09/2017 at 9:56 PM #48820No, 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.
1 user thanked author for this post.
10/09/2017 at 10:01 PM #4882610/10/2017 at 9:18 AM #48873Ho 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):
Long + Short123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263DEFPARAM CumulateOrders = falseONCE PositionSize = 1ONCE CrossingUP = 0 //Inizializzare CROSSING UP a 0ONCE CrossingDN = 0 //Inizializzare CROSSING DOWN a 0ONCE CrossingPrice = 0ONCE MaxLookBack = 5 //Numero di candele da esaminare per il minimo da usare...ONCE StopLoss = 0 //...come Stop Loss dopo l'incrocioONCE BarID = 0 //Numero della candela in cui avviene l'incrocioONCE MaxWaitingBars = 30 //Numero max. di candela da attendere dopo l'incrocioONCE MaxCandles = 60 //Uscire dopo questo numero di candeleONCE AvgType = 2 //2 = wma (media ponderata)IF (Barindex - Tradeindex) >= MaxCandles THEN //Chiudere la posizione dopo un certo numero di candeleSELL AT MARKETEXITSHORT AT MARKETENDIFIF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THENCrossingDN = 0CrossingUP = 0 //Resettare le variabili al valore di default dopo...StopLoss = 0 //...l'apertura di un'operazione oppure dopo un certo...BarID = 0 //...numero di candeleCrossingPrice = 0ENDIFFastEma = Average[4,AvgType](close) //4SlowEma = Average[12,AvgType](close)//12// LONGIF FastEma CROSSES OVER SlowEma AND (NOT CrossingUP) THENCrossingDN = 0 //Azzerare eventuali precedenti incroci ribassistiCrossingUP = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = lowest[MaxLookBack](low) //Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = close //Prezzo di entrata (ordine pendente)ENDIFIF CrossingUP THENSET Stop Loss StopLossSET Target Profit (CrossingPrice + (CrossingPrice - StopLoss)) //TP = SLBUY PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoENDIF// SHORTIF FastEma CROSSES UNDER SlowEma AND (NOT CrossingDN) THENCrossingUP = 0 //Azzerare eventuali precedenti incroci rialzistiCrossingDN = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = highest[MaxLookBack](high) //Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = close //Prezzo di entrata (ordine pendente)ENDIFIF CrossingDN THENSET Stop Loss StopLossSET Target Profit (CrossingPrice + (CrossingPrice - StopLoss)) //TP = SLSELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoENDIF//GRAPH CrossingPrice//GRAPH StopLoss//GRAPH (CrossingPrice + (CrossingPrice - StopLoss))//GRAPH Crossing//GRAPH BarIDRoberto
1 user thanked author for this post.
10/10/2017 at 9:37 PM #4899310/14/2017 at 8:48 PM #49378Ciao 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!
10/16/2017 at 7:38 AM #49472non 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.10/16/2017 at 8:26 AM #49488Come 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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869DEFPARAM CumulateOrders = falseONCE PositionSize = 1ONCE CrossingUP = 0 //Inizializzare CROSSING UP a 0ONCE CrossingDN = 0 //Inizializzare CROSSING DOWN a 0ONCE CrossingPrice = 0ONCE MaxLookBack = 5 //Numero di candele da esaminare per il minimo da usare...ONCE StopLoss = 0 //...come Stop Loss dopo l'incrocioONCE BarID = 0 //Numero della candela in cui avviene l'incrocioONCE MaxWaitingBars = 30 //Numero max. di candela da attendere dopo l'incrocioONCE MaxCandles = 60 //Uscire dopo questo numero di candeleONCE AvgType = 2 //2 = wma (media ponderata)ONCE Bar2Elapse = 5 //Numero di barre di attesa prima di entrareIF (Barindex - Tradeindex) >= MaxCandles THEN //Chiudere la posizione dopo un certo numero di candeleSELL AT MARKETEXITSHORT AT MARKETENDIFIF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THENCrossingDN = 0CrossingUP = 0 //Resettare le variabili al valore di default dopo...StopLoss = 0 //...l'apertura di un'operazione oppure dopo un certo...BarID = 0 //...numero di candeleCrossingPrice = 0ENDIFFastEma = Average[4,AvgType](close) //4SlowEma = Average[12,AvgType](close)//12// LONGIF FastEma CROSSES OVER SlowEma AND (NOT CrossingUP) THENCrossingDN = 0 //Azzerare eventuali precedenti incroci ribassistiCrossingUP = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = lowest[MaxLookBack](low) //Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = close //Prezzo di entrata (ordine pendente)ENDIFIF CrossingUP AND (BarIndex - BarID) >= Bar2Elapse THENSET Stop Loss StopLossSET Target Profit (CrossingPrice + (CrossingPrice - StopLoss)) //TP = SL//BUY PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoIF close >= CrossingPrice THENBUY PositionSize CONTRACTS AT MARKET //Ordine a mercato sul ritracciamentoENDIFENDIF// SHORTIF FastEma CROSSES UNDER SlowEma AND (NOT CrossingDN) THENCrossingUP = 0 //Azzerare eventuali precedenti incroci rialzistiCrossingDN = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = highest[MaxLookBack](high)//Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = close //Prezzo di entrata (ordine pendente)ENDIFIF CrossingDN AND (BarIndex - BarID) >= Bar2Elapse THENSET Stop Loss StopLossSET Target Profit (CrossingPrice + (CrossingPrice - StopLoss)) //TP = SL//SELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoIF close <= CrossingPrice THENSELLSHORT PositionSize CONTRACTS AT MARKET //Ordine a mercato sul ritracciamentoENDIFENDIF//GRAPH CrossingPrice//GRAPH StopLoss//GRAPH (CrossingPrice + (CrossingPrice - StopLoss))//GRAPH Crossing//GRAPH BarIDRoberto
10/17/2017 at 9:24 PM #49740Ciao 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
10/18/2017 at 8:18 AM #49767Era 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869DEFPARAM CumulateOrders = falseONCE PositionSize = 1ONCE CrossingUP = 0 //Inizializzare CROSSING UP a 0ONCE CrossingDN = 0 //Inizializzare CROSSING DOWN a 0ONCE CrossingPrice = 0ONCE MaxLookBack = 5 //Numero di candele da esaminare per il minimo da usare...ONCE StopLoss = 0 //...come Stop Loss dopo l'incrocioONCE BarID = 0 //Numero della candela in cui avviene l'incrocioONCE MaxWaitingBars = 30 //Numero max. di candela da attendere dopo l'incrocioONCE MaxCandles = 60 //Uscire dopo questo numero di candeleONCE AvgType = 2 //2 = wma (media ponderata)ONCE Bar2Elapse = 5 //Numero di barre di attesa prima di entrareIF (Barindex - Tradeindex) >= MaxCandles THEN //Chiudere la posizione dopo un certo numero di candeleSELL AT MARKETEXITSHORT AT MARKETENDIFIF OnMarket OR ((BarIndex - BarID) >= MaxWaitingBars) THENCrossingDN = 0CrossingUP = 0 //Resettare le variabili al valore di default dopo...StopLoss = 0 //...l'apertura di un'operazione oppure dopo un certo...BarID = 0 //...numero di candeleCrossingPrice = 0ENDIFFastEma = Average[4,AvgType](close) //4SlowEma = Average[12,AvgType](close)//12// LONGIF FastEma CROSSES OVER SlowEma AND (NOT CrossingUP) THENCrossingDN = 0 //Azzerare eventuali precedenti incroci ribassistiCrossingUP = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = lowest[MaxLookBack](low) //Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = FastEma //close //Prezzo di entrata (ordine pendente)ENDIFIF CrossingUP AND (BarIndex - BarID) >= Bar2Elapse THENSET Stop Loss StopLossSET Target Profit (CrossingPrice + (CrossingPrice - StopLoss)) //TP = SL//BUY PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoIF close >= CrossingPrice THENBUY PositionSize CONTRACTS AT MARKET //Ordine a mercato sul ritracciamentoENDIFENDIF// SHORTIF FastEma CROSSES UNDER SlowEma AND (NOT CrossingDN) THENCrossingUP = 0 //Azzerare eventuali precedenti incroci rialzistiCrossingDN = 1 //Settare CROSSING ad 1 per segnalare l'avvenuto incrocioStopLoss = highest[MaxLookBack](high)//Salvare il prezzo di Stop LossBarID = Barindex //Salvare il numero di candela dell'incrocioCrossingPrice = FastEma //close //Prezzo di entrata (ordine pendente)ENDIFIF CrossingDN AND (BarIndex - BarID) >= Bar2Elapse THENSET Stop Loss StopLossSET Target Profit (CrossingPrice + (CrossingPrice - StopLoss)) //TP = SL//SELLSHORT PositionSize CONTRACTS AT CrossingPrice LIMIT //Ordine pendente sul ritracciamentoIF close <= CrossingPrice THENSELLSHORT PositionSize CONTRACTS AT MARKET //Ordine a mercato sul ritracciamentoENDIFENDIF//GRAPH CrossingPrice//GRAPH StopLoss//GRAPH (CrossingPrice + (CrossingPrice - StopLoss))//GRAPH Crossing//GRAPH BarIDSe tu preferissi fare l’pentrata sul prezzo della media lenta basta la riga dove c’è
1CrossingPrice = FastEmacon
1CrossingPrice = SlowEma -
AuthorPosts
Find exclusive trading pro-tools on