Buongiorno
Mi riallaccio a questo thread visto che l’argomento è più o meno lo stesso.
Visto che con PRT11 si possono fare vendite parziali volevo inserire un’istruzione nel trading system che:
- mi venda metà posizione ad un determinato guadagno (e funziona)
- sposti lo stop loss iniziale dal valore inserito a tradeprice. Qua mi blocco perchè il sistema modifica correttamente lo stop loss (lo vedo da graph), ma poi, la candela successiva alla vendità della metà, chiude interamente la posizione perchè “vede” ancora la condizione della prima metà. Come posso evitare che la “veda”?
if not onmarket then
halfposition=0
endif
if miecondizioni then
IF miecondizioni2 then
buy N shares AT MARKET
halfposition=1
SET STOP %LOSS 0.92
SET TARGET %PROFIT 0.6
else
if miecondizioni3 then
sellshort N shares at market
halfposition=1
SET STOP %LOSS 0.92
SET TARGET %PROFIT 0.6
endif
endif
endif
chiusuraparziale= (positionprice*10000*0.0045)
livellolong= (close-positionprice)*10000
livelloshort= (positionprice-close)*10000
If longonmarket and livellolong*pipsize > chiusuraparziale*pipsize then
sell partial shares at market
halfposition=2
endif
If shortonmarket and livelloshort*pipsize > chiusuraparziale*pipsize then
exitshort partial shares at market
halfposition=2
endif
If Not OnMarket Then
NewSL = 0
Else
If onmarket and partial Then
If halfposition=2 Then
NewSL = tradeprice
Endif
If NewSL > 0 Then
SELL at NewSL Stop
EXITSHORT at NewSL Stop
Endif
Endif
Endif
Per ogni domanda diversa (anche se lievemente) va creato un nuovo argomento.
Grazie 🙂
L’ho fatto io stavolta.
Aggiungi:
halfposition=0
tra la riga 43 e la 44.
Sposta le righe 45-48 (diventate 46-49) a subito dopo la 49 (divenuta 50).
Se è corretto come l’ho riscritto (credo di si) non funziona….. vedo da graph che il Newsl si attiva correttamente ma il sistema vede sempre l’istruzione iniziale “vendi metà posizione al raggiungimento di livellolong*pipsize > chiusuraparziale*pipsize” e quindi una/due barre dopo esce completamente.
In allegato esempio di quanto scrivo.
Entrata 15 contratti a 1.2098
Attivazione corretta di livellolong (verde) e chiusuraparziale (rosso)
Non appena livellolong è maggiore di chiusuraparziale viene venduta metà posizione (corretto) e si attiva il Newsl (blu).
A questo punto però il Ts vende l’ulteriore metà, non rispettando la condizione Newsl
if not onmarket then
halfposition=0
endif
if miacondizione1 then
IF miacondizione2 then
buy N shares AT MARKET
halfposition=1
SET STOP %LOSS 0.92
SET TARGET %PROFIT 0.6
else
if miacondizione3 then
sellshort N shares at market
halfposition=1
SET STOP %LOSS 0.92
SET TARGET %PROFIT 0.6
endif
endif
endif
chiusuraparziale= (positionprice*10000*0.0045)
livellolong= (close-positionprice)*10000
livelloshort= (positionprice-close)*10000
If longonmarket and livellolong*pipsize > chiusuraparziale*pipsize then
sell partial shares at market
halfposition=2
endif
If shortonmarket and livelloshort*pipsize > chiusuraparziale*pipsize then
exitshort partial shares at market
halfposition=2
endif
If Not OnMarket Then
NewSL = 0
Else
If onmarket and partial Then
If halfposition=2 Then
NewSL = tradeprice
halfposition=0
Endif
Endif
Endif
If NewSL > 0 Then
SELL at NewSL Stop
EXITSHORT at NewSL Stop
Endif
Perché manca AND Not OnMarket alle righe 6 e 12, per cui rieseguetutto il blocco IF…ENDIF quiando le condizioni sono vere, che se sei a mercato. L’avere messo DEFPARAM CumulateOrders = FALSE impeduisce di aprire altre posizioni, ma le righe vengono eseguite comunque, per cui riparte sempre da halfposition=1.
Ho inserito i 2 AND NOT ONMARKET ma non cambia nulla. L’operazione in allegato rimane invariata con la chiusura della seconda metà la barra successiva alla prima metà….
Ma è tecnicamente possibile, per semplificare, inserire un’istruzione:
se onmarket e partial=false allora Set Stop %loss 0.92, se onmarket e partial=true allora Set Stop %Loss=tradeprice?
No, TRADEPRICE è un prezzo, non una differenza.
Occorre il codice completo per verificare bene, indicando anche lo strumento, il timeframe, la data ed ora di apertura di un’operazione errata.
Sono riuscito a risolvere 🙂
If halfposition=1 then
If longonmarket and livellolong*pipsize > chiusuraparziale*pipsize then
sell partial shares at market
halfposition=2
endif
If shortonmarket and livelloshort*pipsize > chiusuraparziale*pipsize then
exitshort partial shares at market
halfposition=2
endif
If Not OnMarket Then
NewSL = 0
Else
If onmarket and halfposition=2 Then
NewSL = tradeprice
Endif
Endif
If NewSL > 0 Then
SELL at NewSL Stop
EXITSHORT at NewSL Stop
Endif
endif