Split posizione e TrP a breakeven
Forums › ProRealTime forum Italiano › Supporto ProOrder › Split posizione e TrP a breakeven
- This topic has 20 replies, 2 voices, and was last updated 3 years ago by MauroPro.
-
-
09/15/2021 at 9:47 AM #177605
Ciao Roberto, potresti controllare questo TS su UsdJpy a 15 minuti, che utilizza uno split della posizione ed un trailing a pareggio, ma non chiude correttamente la seconda parte della posizione?
Per chiarezza posto un immagine dello stesso TS con trailing a pareggio senza split della posizione (TS A), che funziona correttamente (rif. immagine operazione del 2-3 settembre 2021)
senza trailing a pareggio e con split della posizione (TS B), che funziona correttamente
con trailing a pareggio e con split della posizione (TS C) che NON funziona correttamente: splitta correttamente la prima parte della posizione, ma chiude subito la seconda parte, mentre dovrebbe chiuderla dove c’è la freccia marrone nell’immagine.
Grazie
Defparam cumulateorders = false
positionSize = 1
//————————————
ratio = 0.6
period = 8
startTime = 210000
endTime = 231500
cTime = time >= startTime and time <= endTime
exitLongTime = 210000
exitShortTime = 80000
//——————————————————————————————-
if time = startTime then
range2H = highest[Period](high) – lowest[Period](low) //2H
chiusura = close //chiusura barra delle 20:45, opera dalle 21:00
endif
if cTime and dayOfWeek <>5 then
buy positionSize contracts at chiusura – range2H*ratio limit
sellshort positionSize contract at chiusura + range2H*ratio limit
endif
//—————————————————————————-
if time = exitLongTime then
sell at market
endif
if time = exitShortTime then
exitShort at market
endif
//————————————————————–
SET STOP PLOSS 30
SET TARGET PPROFIT 15
//———————————————————-
pointToReachBreakeven=10*pointSize //Trp a breakeven
if not onmarket then
breakeven=0
endif
if longOnMarket and close-tradePrice>=pointToReachBreakEven then
breakeven=1
endif
if shortOnMarket and tradePrice-close>=pointToReachBreakeven then
breakeven=1
endif
if breakeven=1 then
sell at tradePrice STOP
exitShort at tradePrice STOP
endif
//———————————————————————————————————————
once partialcloseGain = 1
If partialcloseGain then
ONCE PerCent = 0.5
ONCE PerCentGain = 0.0009 //=0.09%
ONCE MinLotSize = 0.5
ExitQuantity = abs(CountOfPosition) * PerCent
LeftQty = max(MinLotSize,abs(CountOfPosition) – ExitQuantity)
CloseQuantity = abs(CountOfPosition) – LeftQty
IF Not OnMarket THEN
Flag = 1
ENDIF
IF partialcloseGain AND LongOnMarket and close >= (PositionPrice * (1 + PerCentGain)) AND Flag THEN
SELL CloseQuantity Contracts AT Market
Flag = 0
endif
IF partialcloseGain AND ShortOnMarket and close <= (PositionPrice * (1 – PerCentGain)) AND Flag THEN
exitshort CloseQuantity Contracts AT Market
Flag = 0
endif
endif09/15/2021 at 11:44 AM #177624L’immagine non è di UsdJpy.
Ti spiace dirmi la data e ora candela dove l’operazione in questione è stata aperta?
09/15/2021 at 12:25 PM #17763009/15/2021 at 5:47 PM #177665Ecco un altra immagine dell’ operazione sopra riportata. Il problema comunque è nella formula in generale che non chiude a breakeven la metà della posizione restante. Probabilmente i due codici (snippet) non vanno semplicemente assemblati come ho scritto.
Il mercato è UsdJpy a 15 minuti, come si vede meglio nella nuova immagine (la seconda metà della posizione dovrebbe essere chiusa a breakeven dove ho inserito la X rossa).
09/15/2021 at 6:08 PM #177670Perché quando lui esce con metà posizione piazza anche l’ordine per uscire con l’altra metà (righe 42 e 43), solo che evidentemente non c’è la distanza minima dal prezzo (chiude a 110.017 ed il prezzo d’entrata è 109.939), quindi esce subito, a mercato.
Non mi pare ci siano altre cause.
Quando si usano ordini pendenti è sempre bene prevedere una distanza minima (putroppo cambia durante il giorno, specialmente in orari notturni, devi cercare di mettere quella richiesta da IG, magari con 1 punto o 2 in più) e fare anche una verifica che l’ordine sia STOP o LIMIT.
09/15/2021 at 6:41 PM #177673Ciao Roberto, non sono sicuro che sia questa la causa, Per me non funzionano i due codici insieme.
Guarda quest’altro esempio, come mai qui, che non chiude subito la posizione come sopra, poi non esce con la seconda parte a breakeven (X viola), ma molto dopo (rettangolo arancione) ? (operazione di lunedi 13 settembre ore 23).
Non mi sembra che qui ci siano problemi di distanza, altrimenti il Ts avrebbe chiuso subito la posizione, come nell’esempio precedente.
09/16/2021 at 9:44 AM #177695Perché al primo massimo raggiunto dal prezzo, il profitto era meno di pointToReachBreakeven, poi sarebbe stato maggiore, ma hai usato TRADEPRICE (che è sempre l’ultimo prezzo, in questo caaso la chiusura di mezza posizione) invece di POSITIONPRICE.
Aggiungi queste righe al tuo codice, ti aiuteranno a scoprire più agevolmente gli errori:12345678910111213graph breakevengraph positionsizegraph ExitQuantitygraph LeftQtygraph CloseQuantitygraph Flaggraph PositionPrice * PositionPerf / PipSizegraph pointToReachBreakevengraph (close - PositionPrice)graph (close - TradePrice)graphonprice (PositionPrice * (1 + PerCentGain)) coloured(0,128,0,150)graphonprice (PositionPrice * (1 - PerCentGain)) coloured(0,0,255,255)graphonprice (PositionPrice + pointToReachBreakeven) coloured(0,0,0,255)1 user thanked author for this post.
09/16/2021 at 10:45 AM #177702Finalmente con positionPrice funziona! Non avrei mai immaginato di usare positionPrice nello split delle posizioni (di solito si usa per conoscere il prezzo medio di più posizioni).
Un ultima cosa: siccome SL, TP e TrP sono in punti, all’inizio avevo provato ad aggiungere il codice dello split delle posizioni vincenti in punti e non in percentuale (usando “PipsGain ” 10 come è 10 punti il trailing a pareggio), ma non funzionava forse per i punti decimali delle valute(?) forse per il MinLotSize(?)
Riusciresti a scrivere 10 punti in “PipsGain” (dove c’è XXX) nella formula sotto riportata dello split gain delle posizioni vincenti in punti (òa formula è verificata per gli indici, mai usata per le valute).
once partialcloseGain = 1 // splittare una posizione VINCENTE in punti
If partialcloseGain then
ONCE PerCent = 0.5
PipsGain = XXX
ONCE MinLotSize = 0.5
ExitQuantity = abs(CountOfPosition) * PerCent
LeftQty = max(MinLotSize,abs(CountOfPosition) – ExitQuantity)
CloseQuantity = max(0,abs(CountOfPosition) – LeftQty)
TempGain = PositionPerf * PositionPrice / PipSize
IF Not OnMarket THEN
Flag = 1
ENDIF
IF partialcloseGain AND LongOnMarket and TempGain >= PipsGain*pipsize AND Flag THEN
SELL CloseQuantity Contracts AT Market
Flag = 0
endif
IF partialcloseGain AND ShortOnMarket and TempGain >= PipsGain*pipsize AND Flag THEN
exitshort CloseQuantity Contracts AT Market
Flag = 0
endif
endif09/16/2021 at 11:05 AM #177710Basta che metti 10, però non usare, più sotto, PipsGain*pipsize, ma solo PipsGain, perché il profitto è già in Pips.
09/16/2021 at 7:40 PM #177745Ho provato e verificato che in questo modo il codice funziona bene anche con i punti.
Un ultima precisazione, questa modifica (l’eliminazione di *pipsize ) va fatta solo per le valute, oppure anche per gli indici (riguarda cioè proprio la formula dello splitPosition a punti)?
09/16/2021 at 8:17 PM #177747Per gli indici non occorrerebbe, perché hanno un rapporto Prezzo:Pip di 1:1, però se un giorno vuoi utilizzare quel codice su una coppia valutaria o altro, sarebbe meglio che tu la facessi. È solo una questione di portabilità del codice.
Ad ogni modo, se certamente l’utilizzerai solo con indici non occorre,
Nel caso di TempGain = PositionPerf * PositionPrice / PipSize, c’è già il profitto, espresso in prezzo (TempGain = PositionPerf * PositionPrice), che viene convertito in pips, in modo da essere confrontato con i Pips.
Se scrivi TempGain >= PipsGain*pipsize, converti PipsGain in prezzo dopo avere già convertito TempGain in pips, rendendo il confronto impossibile.
Comunque è solo una spiegazione, confermo, come hai detto tu, che con gli indici non serve, perché dividere o moltiplicare per 1 non altera nessun risultato.
1 user thanked author for this post.
09/16/2021 at 8:23 PM #17774809/24/2021 at 8:49 AM #178270Ciao Roberto, nel codice iniziale (riporto sotto la parte interessata) cosa devo aggiungere per far entrare comunque il TS con un ordine a mercato (poco prima del limite temporale impostato) nel caso non venga preso l’ordine limite? Ho fatto delle prove, ma senza successo. Grazie
1234567891011121314ratio = 0.6period = 8startTime = 210000endTime = 231500cTime = time >= startTime and time <= endTime//-------------------------------------------------------------------------------------------if time = startTime thenrange2H = highest[Period](high) - lowest[Period](low)chiusura = closeendifif cTime and dayOfWeek <>5 thenbuy positionSize contracts at chiusura - range2H*ratio limitsellshort positionSize contract at chiusura + range2H*ratio limitendif09/24/2021 at 9:28 AM #178277Gli dici di entrare, in alternativa all’ordine pendente, alla fine del tempo:
123456789if cTime and dayOfWeek <>5 thenif (Time = EndTime) AND Not OnMarket THENbuy positionSize contracts at Market//sellshort positionSize contract at Marketelsebuy positionSize contracts at chiusura - range2H*ratio limitsellshort positionSize contract at chiusura + range2H*ratio limitendifendifIo ho messo entrambe le righe, BUY e SELLSHORT, però ne ho commentata una perché entrambe non possono entrare a mercato. Tu puoi mettere un ulteriore IF…ENDIF per verificare le condizioni in base alle quali fare entrare l’una o l’altra.
09/24/2021 at 10:33 AM #178285Ho separato il buy – sell, ma puoi controllare (mi sembra che entra sempre short at market).
if time = startTime then
range2H = highest[Period](high) – lowest[Period](low) //2H
chiusura = close //chiusura barra delle 20:45, opera dalle 21:00
endifif cTime and dayOfWeek <>5 then
if (time = endTime) and not onMarket then
buy positionSize contracts at market
else
buy positionSize contracts at chiusura – range2H*ratio limit
endif
endifif cTime and dayOfWeek <>5 then
if (time = endTime) and not onMarket then
sellShort positionSize contracts at market
else
sellshort positionSize contract at chiusura + range2H*ratio limit
endif
endif -
AuthorPosts
Find exclusive trading pro-tools on