Split posizione e TrP a breakeven

Forums ProRealTime forum Italiano Supporto ProOrder Split posizione e TrP a breakeven

Viewing 15 posts - 1 through 15 (of 21 total)
  • #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
    endif

    #177624

    L’immagine non è di UsdJpy.

    Ti spiace dirmi la data e ora candela dove l’operazione in questione è stata aperta?

     

     

    #177630

    L’operazione e’ aperta il 2 settembre dopo le 21 e chiusa la mattina del 3 settembre. E’ tutto indicato nell’immagine.

    #177665

    Ecco 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).

     

    #177670

    Perché 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.

     

     

    #177673

    Ciao 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.

     

    #177695

    Perché 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:

    1 user thanked author for this post.
    #177702

    Finalmente 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
    endif

    #177710

    Basta che metti 10, però non usare, più sotto, PipsGain*pipsize, ma solo PipsGain, perché il profitto è già in Pips.

     

    #177745

    Ho 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)?

    #177747

    Per 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.
    #177748

    Ottima spiegazione, quindi con gli indici lascio *pipsize, mentre per le valute tolgo *pipsize.

     

    #178270

    Ciao 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

     

    #178277

    Gli dici di entrare, in alternativa all’ordine pendente, alla fine del tempo:

    Io 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.

    #178285

    Ho 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
    endif

    if 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
    endif

    if 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

Viewing 15 posts - 1 through 15 (of 21 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login