Buonasera Roberto,
sto avendo problemi con IG Markets in quanto utilizzando il codice formulato da te con trailing step e trailing stop (una volta raggiunti i punti a cui dovrebbe attivarsi il trailing stop ed alzare lo stop) non mi fa entrare gli ordini di vendita stop, li ho anche chiamati e mi hanno detto che deve esserci una distanza minima , ok capisco ma a questo punto l’ordine di vendita stop non entrerà mai visto che il sistema ha avuto rifiutato l’ordine di vendita stop. Tu come fai? utilizzi i trailing ti chiedo un consiglio su come fare a risolvere il problema, grazie.
Non so quale sia il trailing stoip che usi, ma questo è quello di Nicolas, aggiornato con la DISTANZA:
//*********************************************************************************
// https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/
// (righe 17- 56)
//
//trailing stop function
IF (BarIndex - TradeIndex) >= 0 THEN //0
trailingstart = 20 //20 trailing will start @trailinstart points profit
trailingstep = 5 //5 trailing step to move the "stoploss"
distance = 7 //7 pips distance from caurrent price (if required by the broker)
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
IF LongOnMarket THEN
IF (close + distance) > newSL THEN
SELL AT newSL STOP
ELSIF (close - distance) < newSL THEN
SELL AT newSL LIMIT
ELSE
SELL AT Market
ENDIF
ELSIF ShortOnmarket THEN
IF (close + distance) < newSL THEN
EXITSHORT AT newSL STOP
ELSIF (close - distance) > newSL THEN
EXITSHORT AT newSL LIMIT
ELSE
EXITSHORT AT Market
ENDIF
ENDIF
ENDIF
ENDIF
//*********************************************************************************
ciao Roberto, lo ho provato in reale il trailing stop modificato da Nicolas con la distanza ma mi è successo che per 2 ingressi che doveva entrare non è entrato (mi ha fatto un suono ed è comparsa una linea verde sotto) ed al terzo è entrato, perchè?
Occorre:
- il codice
- lo strumento usato
- il TF
- data ed orario dell’operazione errata.
Devo poter replicare la tua operatività in modo esatto.
Buonasera Roberto scusami ti rispondo solo ora perchè ero fuori per dei giorni e non potevo connettermi. Come ti dicevo (spero ricordi) inserendo il codice di Nicolas fornitomi da te per il problema della distanza minima accettata dal broker IG riguardo lo spostamento del trailing stop ti invio tutte le informazioni che mi hai chiesto, ti posto il codice e ti dico che l’operazione in oggetto è sul Dow Jones Wall Street Cash 1 euro , su timeframe 5 minuti ed è del 12/08/2021 alle ore 18:01 è l’ingresso BUY , come sempre grazie.
//-------------------------------------------------------------------------
// Codice principale : Break in Limit DOW JONES 5 min
//-------------------------------------------------------------------------
// Definizione dei parametri del codice
DEFPARAM CumulateOrders = False // Posizioni cumulate disattivate
// HORAIRES
ONCE a1 = 1.0
startTime = 145000
endTime = 235500
// Condizioni per entrare su posizioni long
c1 = (high >= high[1])
IF time >= startTime and time <= endTime and c1 then
Buy 1 contract at high [1] LIMIT //entrata con ordine pendente LIMIT
Endif
// Stop e target
SET STOP PLOSS 317
SET TARGET PPROFIT 105 //395
//trailing stop function
IF (BarIndex - TradeIndex) >= 0 THEN //0
trailingstart = 25 //20 trailing will start @trailinstart points profit
trailingstep = 5 //5 trailing step to move the "stoploss"
distance = 8 //7 pips distance from caurrent price (if required by the broker)
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
IF LongOnMarket THEN
IF (close + distance) > newSL THEN
SELL AT newSL STOP
ELSIF (close - distance) < newSL THEN
SELL AT newSL LIMIT
ELSE
SELL AT Market
ENDIF
ELSIF ShortOnmarket THEN
IF (close + distance) < newSL THEN
EXITSHORT AT newSL STOP
ELSIF (close - distance) > newSL THEN
EXITSHORT AT newSL LIMIT
ELSE
EXITSHORT AT Market
ENDIF
ENDIF
ENDIF
ENDIF
//**********************************************************************
Buonasera Roberto,
hai avuto modo di provarlo? se aumento i punti di distanza dovrebbe risolversi il problema o c’è qualcos’altro che crea problema?
Il trailing stop non ha nessun effetto sull’entrate, riguarda le uscite.
Il 12/8 entra sulla candela delle 14:50 (in base alle condizioni rilevate su quella delle 14:45) edil trailing stop entra in funzione alle 22:20 ed alle 23:00 esce (la X di uscita è sulla candela successiva). Dopodiché entra ancora alle 23:10.
Non vedo problemi.
Prova ad aggiungere queste linee alla fine del codice per vedere i due prezzi (entrata e trailing stop) sul grafico:
graphonprice PositionPrice coloured(0,0,255,255)
graphonprice newSL coloured(255,0,0,255)
Ok Roberto provo a far così su Dowjones, su altri assets va bene comunque. Come sempre ti ringrazio e ti auguro un sereno fine settimana, ciao.
Ciao Roberto, senza aprire un altro topic sui trailingstop, ti volevo chiedere: A) se conosci (hai mai utilizzato e cosa ne pensi) di questi tipo di trailing stop trovato nel forum (riporto solo la parte long per semplicità).
In generale preferisco quello classico che riporti sopra, ma in alcuni Ts questo performa meglio.
B) se riesci a convertirlo in punti.
Grazie
once trailingstop = 1
if trailingstop then
trailingpercentlong = 0.35 // %
once acceleratorlong = 0.055
once steppercentlong = (trailingpercentlong/10)*acceleratorlong
if onmarket then
trailingstartlong = positionprice*(trailingpercentlong/100)
trailingsteplong = positionprice*(steppercentlong/100)
endif
IF NOT ONMARKET THEN
newSL=0
ENDIF
IF LONGONMARKET THEN
IF newSL=0 AND high-tradeprice(1)>=trailingstartlong THEN
newSL = tradeprice(1)+trailingsteplong
ENDIF
IF newSL>0 AND high-newSL>trailingsteplong THEN
newSL = newSL+trailingsteplong
ENDIF
ENDIF
IF newSL>0 THEN
SELL AT newSL STOP
ENDIF
endif
Adatta il trailing stop all’accumulo o vendita di posizioni seguendone il prezzo, per cui è impossibile convertirlo in pips, il prezzo resta tale, non si può convertire.
Tu cosa vuoi che sia espresso in pips?
Se era possibile volevo trasformare la percentuale in punti, come in altri trailing.
pointToReachLong = (close * PERCENTUALE / 100) / pointSize // %
pointTo ReachLong = PUNTI * pointSize // punti
Dov’è il codice del tuo esempio?
E’ quello riportato sopra, rif. 176958 ed è espresso in %. Se possibile volevo tradurlo in punti.
Non vedo codeste variabili. Quali righe sono?
Il mio era un esempio. La parte con le variabili d trasformare in punti, se possibile. è questa:
trailingpercentlong = 0.35 // %
once acceleratorlong = 0.055
once steppercentlong = (trailingpercentlong/10)*acceleratorlong
if onmarket then
trailingstartlong = positionprice*(trailingpercentlong/100)
trailingsteplong = positionprice*(steppercentlong/100)