Take Profit Intelligente
Forums › ProRealTime forum Italiano › Supporto ProBuilder › Take Profit Intelligente
- This topic has 34 replies, 4 voices, and was last updated 1 year ago by Msport71.
-
-
09/19/2023 at 4:03 PM #221280
Dopo vari giorni sono riuscito a finirlo.
E’ il mio codice postato sopra, trasformato in indicatore:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200ONCE myCapital = 10000 //Capitale inizialeONCE Direzione = 0ONCE NowLong = 0 //LongOnMarketONCE NowShort = 0 //ShortOnMarketONCE myProfit = 0 //StrategyProfitONCE EntryPrice = 0 //TradePriceONCE Wins = 0 //operazioni vincenti (o neutre)ONCE Losses = 0 //operazioni perdentiONCE SL = 400 * PipSizeONCE TP = SL * 3ONCE TrailStart = 40 //trailing will start @trailinstart points profitONCE TrailStep = 70 //trailing step to move the "stoploss"ONCE tempGain = 0myEquity = myCapital + myProfit //EquityNowOnMarket = NowLong OR NowShort //OnMarketTotalTrades = Wins + LossesOffset1 = average[20,0](range) * 1.2Offset2 = 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 //LONGtempGain = (close - EntryPrice) / PipSize * PipValueELSIF NowShort THEN //SHORTtempGain = (EntryPrice - close) / PipSize * PipValueENDIFIF NowLong THEN //LONGIF (close >= TPprice) OR (newSL <> 0 AND close >= newSL) OR (close <= SLprice) THEN //TP, Trailing Stop, o SLNowLong = 0NowOnMarket = 0myProfit = myProfit + tempGainmyEquity = myCapital + myProfitIF tempGain >= 0 THENWins = Wins + 1ELSELosses = Losses + 1ENDIFTotalTrades = Wins + LossesnewSL = 0trailingTEMP = TrailStepENDIFELSIF NowShort THEN //SHORTIF (close <= TPprice) OR (newSL <> 0 AND close <= newSL) OR (close >= SLprice) THEN //TP, Trailing Stop, o SLNowShort = 0NowOnMarket = 0myProfit = myProfit + tempGainmyEquity = myCapital + myProfitIF tempGain >= 0 THENWins = Wins + 1ELSELosses = Losses + 1ENDIFTotalTrades = Wins + LossesnewSL = 0trailingTEMP = TrailStepENDIFENDIF////-------------------------------------------------------------------------------------------------------------------//// stampa dei simboli di chiusura operazione//IF TotalTrades <> TotalTrades[1] THENIF tempGain >= 0 THENDrawText("☺",BarIndex,high + Offset1,dialog,bold,16) coloured("Green")ELSEDrawText("☹",BarIndex,high + Offset1,dialog,bold,13) coloured("Red")ENDIFENDIF////-------------------------------------------------------------------------------------------------------------------//// calcolo del PIVOT//ONCE N = 5PP = (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 PIVOTRes2 = summation[N](high >= PP) //il massimo deve essere sopra il PIVOTRes = Res1 AND Res2 //trovata la resistenza//Sup1 = summation[N](close >= PP) = N //il prezzo deve essere da N candele sopra il PIVOTSup2 = summation[N](low <= PP) //il minimo deve essere sotto il PIVOTSup = Sup1 AND Sup2 //trovato il supporto////-------------------------------------------------------------------------------------------------------------------//// apertura posizioni (se le condizioni sono verificate)//IF Sup AND Not NowOnMarket THEN //LONG//NowLong = 1NowShort = 0NowOnMarket = 1EntryPrice = closeSLprice = close - SLTPprice = close + TPtrailingTEMP= TrailStepnewSl = 0Direzione = 1DrawText("↑",BarIndex,low - Offset1,dialog,bold,28) coloured("DeepSkyBlue")//ELSIF Res AND Not NowOnMarket THEN //SHORT//NowShort = 1NowLong = 0NowOnMarket = 1EntryPrice = closeSLprice = close + SLTPprice = close - TPtrailingTEMP= TrailStepnewSl = 0Direzione = -1DrawText("↓",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 thenVolatilita = close / close[3] // aggiornamento dello STEP secondo la volatilità delle ultime 4 candele//IF NowLong THENIF Volatilita > 1.005 THENtrailingTEMP = trailingTEMP + 1 //oppure trailingTEMP = trailingTEMP * 1.1, o altro...ELSIF Volatilita < 0.995 THENtrailingTEMP = trailingTEMP - 1 //oppure trailingTEMP = trailingTEMP * 0.9, o altro...ENDIFtrailingTEMP = max(0,trailingTEMP)//ELSIF NowShort THENIF Volatilita < -0.995 THENtrailingTEMP = trailingTEMP + 1 //oppure trailingTEMP = trailingTEMP * 1.1, o altro...ELSIF Volatilita > 1.005 THENtrailingTEMP = trailingTEMP - 1 //oppure trailingTEMP = trailingTEMP * 0.9, o altro...ENDIFtrailingTEMP = max(0,trailingTEMP)ENDIF//manage long positionsIF NowLong THEN//first move (breakeven)IF newSL=0 AND close-EntryPrice>=TrailStart*pipsize THENnewSL = EntryPrice+trailStart*pipsizeENDIF//next movesIF newSL>0 AND close-newSL>=trailingTEMP*pipsize THENnewSL = newSL+trailingTEMP*pipsizenewSL = max(newSL,newSL[1])ENDIFENDIF//manage short positionsIF NowShort THEN//first move (breakeven)IF newSL=0 AND EntryPrice-close>=TrailStart*pipsize THENnewSL = EntryPrice-trailStart*pipsizeENDIF//next movesIF newSL>0 AND newSL-close>=trailingTEMP*pipsize THENnewSL = newSL-trailingTEMP*pipsizenewSL = min(newSL,newSL[1])ENDIFENDIFENDIF//*********************************************************************************//// sezione stampa REPORT//IF IsLastBarUpdate THENIF Direzione[1] = 1 THENdrawtext ("LONG ", -150 ,-6) anchor(TopRight) coloured("Green")ELSIF Direzione[1] = -1 THENdrawtext ("SHORT", -150 ,-6) anchor(TopRight) coloured("Red")ENDIFpWins = round(Wins * 100 / TotalTrades,2)pLosses = 100.00 - pWinsdrawtext ("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//RETURNHo 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.09/20/2023 at 8:42 AM #22131009/21/2023 at 8:17 AM #221363Buongiorno,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 = 5PP = (DHigh(1) + DLow(1) + DClose(1))/3 //PP calculationvorrei 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?Grazie09/21/2023 at 9:46 AM #221374Basta 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…
09/21/2023 at 11:50 AM #221383 -
AuthorPosts
Find exclusive trading pro-tools on