Take Profit Intelligente

Viewing 5 posts - 31 through 35 (of 35 total)
  • Author
    Posts
  • #221280 quote
    robertogozzi
    Moderator
    Master

    Dopo vari giorni sono riuscito a finirlo.

    E’ il mio codice postato sopra, trasformato in indicatore:

    ONCE myCapital  = 10000  //Capitale iniziale
    ONCE Direzione  = 0
    ONCE NowLong    = 0      //LongOnMarket
    ONCE NowShort   = 0      //ShortOnMarket
    ONCE myProfit   = 0      //StrategyProfit
    ONCE EntryPrice = 0      //TradePrice
    ONCE Wins       = 0      //operazioni vincenti (o neutre)
    ONCE Losses     = 0      //operazioni perdenti
    ONCE SL         = 400 * PipSize
    ONCE TP         = SL * 3
    ONCE TrailStart = 40     //trailing will start @trailinstart points profit
    ONCE TrailStep  = 70     //trailing step to move the "stoploss"
    ONCE tempGain   = 0
    myEquity        = myCapital + myProfit    //Equity
    NowOnMarket     = NowLong OR NowShort     //OnMarket
    TotalTrades     = Wins + Losses
    Offset1         = average[20,0](range) * 1.2
    Offset2         = Offset1 * 1.1
    //
    //-------------------------------------------------------------------------------------------------------------------
    //
    // verifcare:
    //               1) se raggiunto TP o Trailing Stop (in tal caso aggiornare myProfit e segnalare l'operazione come chiusa)
    //               2) se raggiunto SL (in tal caso aggiornare myProfit e segnalare l'operazione come chiusa)
    //               3) profitto temporaneo (se ancora a mercato)
    //
    IF NowLong THEN     //LONG
    tempGain        = (close - EntryPrice) / PipSize * PipValue
    ELSIF NowShort THEN //SHORT
    tempGain        = (EntryPrice - close) / PipSize * PipValue
    ENDIF
    IF NowLong THEN     //LONG
    IF (close >= TPprice) OR (newSL <> 0 AND close >= newSL) OR (close <= SLprice) THEN  //TP, Trailing Stop, o SL
    NowLong      = 0
    NowOnMarket  = 0
    myProfit     = myProfit + tempGain
    myEquity     = myCapital + myProfit
    IF tempGain >= 0 THEN
    Wins   = Wins + 1
    ELSE
    Losses = Losses + 1
    ENDIF
    TotalTrades  = Wins + Losses
    newSL        = 0
    trailingTEMP = TrailStep
    ENDIF
    ELSIF NowShort THEN //SHORT
    IF (close <= TPprice) OR (newSL <> 0 AND close <= newSL) OR (close >= SLprice) THEN  //TP, Trailing Stop, o SL
    NowShort     = 0
    NowOnMarket  = 0
    myProfit     = myProfit + tempGain
    myEquity     = myCapital + myProfit
    IF tempGain >= 0 THEN
    Wins   = Wins + 1
    ELSE
    Losses = Losses + 1
    ENDIF
    TotalTrades  = Wins + Losses
    newSL        = 0
    trailingTEMP = TrailStep
    ENDIF
    ENDIF
    //
    //-------------------------------------------------------------------------------------------------------------------
    //
    // stampa dei simboli di chiusura operazione
    //
    IF TotalTrades <> TotalTrades[1] THEN
    IF tempGain >= 0 THEN
    DrawText("☺",BarIndex,high + Offset1,dialog,bold,16) coloured("Green")
    ELSE
    DrawText("☹",BarIndex,high + Offset1,dialog,bold,13) coloured("Red")
    ENDIF
    ENDIF
    //
    //-------------------------------------------------------------------------------------------------------------------
    //
    // calcolo del PIVOT
    //
    ONCE N = 5
    PP     = (DHigh(1) + DLow(1) + DClose(1))/3    //PP calculation
    //
    //-------------------------------------------------------------------------------------------------------------------
    //
    // verifica delle condizioni  (PP funge sia da Resistenza che Supporto)
    //
    Res1   = summation[N](close <= PP) = N   //il prezzo deve essere da N candele sotto il PIVOT
    Res2   = summation[N](high >= PP)        //il massimo deve essere sopra il PIVOT
    Res    = Res1 AND Res2                   //trovata la resistenza
    //
    Sup1   = summation[N](close >= PP) = N   //il prezzo deve essere da N candele sopra il PIVOT
    Sup2   = summation[N](low <= PP)         //il minimo deve essere sotto il PIVOT
    Sup    = Sup1 AND Sup2                   //trovato il supporto
    //
    //-------------------------------------------------------------------------------------------------------------------
    //
    // apertura posizioni (se le condizioni sono verificate)
    //
    IF Sup AND Not NowOnMarket THEN  //LONG
    //
    NowLong     = 1
    NowShort    = 0
    NowOnMarket = 1
    EntryPrice  = close
    SLprice     = close - SL
    TPprice     = close + TP
    trailingTEMP= TrailStep
    newSl       = 0
    Direzione   = 1
    DrawText("↑",BarIndex,low - Offset1,dialog,bold,28) coloured("DeepSkyBlue")
    //
    ELSIF Res AND Not NowOnMarket THEN   //SHORT
    //
    NowShort    = 1
    NowLong     = 0
    NowOnMarket = 1
    EntryPrice  = close
    SLprice     = close + SL
    TPprice     = close - TP
    trailingTEMP= TrailStep
    newSl       = 0
    Direzione   = -1
    DrawText("↓",BarIndex,low - Offset1,dialog,bold,28) coloured("DarkGoldenRod")
    //
    ENDIF
    //
    //*********************************************************************************
    // https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/
    // (lines 17- 56), modificato
    //
    //trailing stop function
    //
    IF NowOnMarket then
    Volatilita = close / close[3] // aggiornamento dello STEP secondo la volatilità delle ultime 4 candele
    //
    IF NowLong THEN
    IF Volatilita > 1.005 THEN
    trailingTEMP = trailingTEMP + 1 //oppure   trailingTEMP = trailingTEMP * 1.1, o altro...
    ELSIF Volatilita < 0.995 THEN
    trailingTEMP = trailingTEMP - 1 //oppure   trailingTEMP = trailingTEMP * 0.9, o altro...
    ENDIF
    trailingTEMP = max(0,trailingTEMP)
    //
    ELSIF NowShort THEN
    IF Volatilita < -0.995 THEN
    trailingTEMP = trailingTEMP + 1 //oppure   trailingTEMP = trailingTEMP * 1.1, o altro...
    ELSIF Volatilita > 1.005 THEN
    trailingTEMP = trailingTEMP - 1 //oppure   trailingTEMP = trailingTEMP * 0.9, o altro...
    ENDIF
    trailingTEMP = max(0,trailingTEMP)
    ENDIF
    //manage long positions
    IF NowLong THEN
    //first move (breakeven)
    IF newSL=0 AND close-EntryPrice>=TrailStart*pipsize THEN
    newSL = EntryPrice+trailStart*pipsize
    ENDIF
    //next moves
    IF newSL>0 AND close-newSL>=trailingTEMP*pipsize THEN
    newSL = newSL+trailingTEMP*pipsize
    newSL = max(newSL,newSL[1])
    ENDIF
    ENDIF
    //manage short positions
    IF NowShort THEN
    //first move (breakeven)
    IF newSL=0 AND EntryPrice-close>=TrailStart*pipsize THEN
    newSL = EntryPrice-trailStart*pipsize
    ENDIF
    //next moves
    IF newSL>0 AND newSL-close>=trailingTEMP*pipsize THEN
    newSL = newSL-trailingTEMP*pipsize
    newSL = min(newSL,newSL[1])
    ENDIF
    ENDIF
    ENDIF
    //*********************************************************************************
    //
    //                                    sezione stampa REPORT
    //
    IF IsLastBarUpdate THEN
    IF Direzione[1] = 1 THEN
    drawtext ("LONG ", -150 ,-6)                                             anchor(TopRight)  coloured("Green")
    ELSIF Direzione[1] = -1 THEN
    drawtext ("SHORT", -150 ,-6)                                             anchor(TopRight)  coloured("Red")
    ENDIF
    pWins   = round(Wins * 100 / TotalTrades,2)
    pLosses = 100.00 - pWins
    drawtext ("Prezzo Entrata    #EntryPrice#"                   , -242 ,-6)    anchor(TopRight)  coloured("DimGrey")
    drawtext ("TP                       #TPprice#"               , -242 ,-18)   anchor(TopRight)  coloured("DimGrey")
    drawtext ("SL                       #SLprice#"               , -242 ,-30)   anchor(TopRight)  coloured("DimGrey")
    drawtext ("Trailing Stop        #newSL#"                     , -241 ,-41)   anchor(TopRight)  coloured("DimGrey")
    drawtext ("Profitto temp.       #tempGain#"                  , -241 ,-53)   anchor(TopRight)  coloured("DimGrey")
    drawtext ("Profitto Strategia #myEquity#"                    , -242 ,-63)   anchor(TopRight)  coloured("DimGrey")
    drawtext ("Operazioni         #TotalTrades#"                 , -120 ,-18)   anchor(TopRight)  coloured("RosyBrown")
    drawtext ("     Wins                  #Wins#  (#pWins#)"     , -105 ,-30)   anchor(TopRight)  coloured("RosyBrown")
    drawtext ("     Losses               #Losses#  (#pLosses#)"  , -107 ,-41)   anchor(TopRight)  coloured("RosyBrown")
    ENDIF
    //
    RETURN

    Ho fatto un pò di prove sul DAX (Giornaliero, 4 ore, 1 ora e 5 minuti). Mi sembra funzioni tutto regolarmente. Le verifiche, sia dello SL, TP e Trailing Stop è fatto con CLOSE alla chiusura della candela, perché un indicatore non ha la possibilità di usare ordini pendenti.
    Si potrebbe, in uscita, fare un calcolo sul prezzo effettivo, ma era un pò più complicato e non avevo tempo per (cercare di) farlo.

    IlMioIndicatore-TRADE.itf
    #221310 quote
    Msport71
    Participant
    Average

    Roberto,

    grazie e mille.

    Lo provo e ti dico mie impressioni.

    #221363 quote
    Msport71
    Participant
    Average
    Buongiorno,
    ho fatto qualche prova e lo trovo interessante,
    Se non ho capito male, la condizione long si basa sulla numero di chiusure sopra il pivot, settata in questo momento a 5.
    Per quanto riguarda:
    // calcolo del PIVOT
    //
    ONCE N = 5
    PP     = (DHigh(1) + DLow(1) + DClose(1))/3    //PP calculation
    vorrei modificare la modalità di calcolo da quella impostata a quella che prevede, nell’ultimo addendo al posto del Day  close , il Today open.
    E possibile?
    Grazie
    #221374 quote
    robertogozzi
    Moderator
    Master

    Basta che indichi (0), al posto di (1) . Contrariamente alle variabili, dove si usano le parentesi quadre per riferirsi alle precedenti candele, con Dopen, Dhigh, Dlow e Dclose, vanno usate le parentesi tonde, 0 è oggi, 1 è ieri, ecc…

    #221383 quote
    Msport71
    Participant
    Average

    Perfetto, grazie

Viewing 5 posts - 31 through 35 (of 35 total)
  • You must be logged in to reply to this topic.

Take Profit Intelligente


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Summary

This topic contains 34 replies,
has 4 voices, and was last updated by Msport71
2 years, 5 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/08/2023
Status: Active
Attachments: 7 files
Logo Logo
Loading...