Comportamento diverso del Bot in Testing ed in Reale
Forums › ProRealTime forum Italiano › Supporto ProOrder › Comportamento diverso del Bot in Testing ed in Reale
- This topic has 8 replies, 4 voices, and was last updated 1 day ago by
roccafragius.
-
-
10/14/2025 at 8:57 AM #252568
Buongiorno, rilevo putroppo dei comportamenti diversi del bot, lanciato in testing in manuale ad una certa ora ed alla stessa ora lanciato in reale.
In Testing prosegue e va a profitto, mentre in reale dopo poche barre esce. Ho due timeframe ( uno di 5 minuti per il trend e di default per le entrate, entrambi con updateonclose).
La navigazione del trend avviene con un trailing stop che tiene conto della distanza minima per il broker, messo 7 punti.
Nella foto si vede il backtest con il trend che va avanti e dove ci sono le X delle uscite i vari lanci manuali.
Il bot quando esce dal trend esce anche con il Quit, per testarlo all’ora esatta devo tenere queste istruzioni così, altrimenti lanciato in manuale al momento oppirtuno nel trading system ho i valori di Partito invertiti .
if DateTradeTime and time=timeDacuitestare then
Partito=1
else
Partito=0 //// 1 Se voglio testare che funzioni solo nel giorno di test devo mettere qua =0
endif///////////////////////////////////////
Di seguito il codice del bot:
//————————————————————————-
// 0525_5mUS_BUY_1-Range-Filter
//————————————————————————-
//0525_TREND-Range-Filter-Manual
///////////////////////////////////////////// Range Filter Inizio
//
DEFPARAM PreLoadBars = 6000
DEFPARAM CumulateOrders = False
////////////////////////////////////// Configurazioni
TrailingST=1
once PuoiEntrare=1
once BUYTrendTMADN=0
once SELLTrendTMAUP=0
IF IntradayBarIndex = 0 THEN
PuoiEntrare=1 //abilitare il trading all’inizio di ogni giorno
ENDIF
//////////////////////
timeDacuitestare=090900
DateTradeTime=(date=20251014)
once maxloss=25 //// 10
minmaxloss=25//////
once Partito=0
if DateTradeTime and time=timeDacuitestare then
Partito=1
else
Partito=0 //// 1 Se voglio testare che funzioni solo nel giorno di test devo mettere qua =0
endif
///
if LongOnMarket or ShortOnMarket then
PuoiEntrare=0 /////DA SCOMMENTARE
else
if StrategyProfit=0 then
PuoiEntrare=1
else
QUIT /// DA SCOMMENTARE
endif
endif
// 0325-Media-Mobile-Triangolare
// — settings
TIMEFRAME(5 minutes,updateonclose)
ftype = 1 //Filter Type (1 or 2?)
rngqty = 2.618 //Range Size
rngscale = 6 //Range Scale (1=Points, 2=Pips, 3=Ticks, 4=% of Price, 5=ATR, 6=Average Change, 7=Standard Deviation
rngper = 14 //Range Period (for ATR, Average Change, and Standard Deviation)
smoothrange = 1 //Smooth Range (0=false ; 1=true)
smoothper = 27 //Smoothing Period
movsrc = 1 //Movement Source (0=Wicks, 1=Close)
//— end of settingsonce rngfilt=close
if barindex>max(rngper,smoothper) then
//Range Size Function
rngscale=max(1,min(rngscale,7))
if rngscale=1 then
scale = rngqty*pointsize
elsif rngscale=2 then
scale = rngqty*.0001
elsif rngscale=3 then
scale = rngqty*ticksize
elsif rngscale=4 then
scale = close*rngqty/100
elsif rngscale=5 then
scale = rngqty*average[rngper,1](tr)
elsif rngscale=6 then
scale = rngqty*average[rngper,1](abs(close-close[1]))
elsif rngscale=7 then
scale = STD[rngper](close)
endifif smoothrange then
r=average[smoothper,1](scale)
else
r=scale
endifhh=close
ll=close
if movsrc<>1 then
hh=high
ll=low
endif
if ftype=1 then
if hh>rngfilt[1] then
if (hh-r)<rngfilt[1] then
rngfilt=rngfilt[1]
else
rngfilt=hh-r
endif
elsif (ll+r)>rngfilt[1] then
rngfilt=rngfilt[1]
else
rngfilt=ll+r
endif
else //ftype<>1
if hh>=rngfilt[1]+r then
rngfilt=(rngfilt[1]) + floor(abs(hh – (rngfilt[1]))/r)*r
elsif ll<=rngfilt[1]-r then
rngfilt=(rngfilt[1]) – floor(abs(ll – (rngfilt[1]))/r)*r
else
rngfilt=rngfilt[1]
endif
endifhiband = rngfilt + r
loband = rngfilt – r
if hiband<hiband[1] and loband>loband[1] THEN //// and loband>loband[2] and hiband<hiband[2]
Narrow=1
VisT=10
ELSE
Narrow=0
VisT=120
endif
////////////
if rngfilt>rngfilt[1] then
upward=1
downward=0
endif
if rngfilt<rngfilt[1] then
upward=0
downward=1
endif//Direction Conditions & colors
if upward then
cr=0
cg=255
cb=0
trendSup=1
endif
if downward then
cr=255
cg=5
cb=131
trendSup=-1
endif
endif
////////////////////////////// AT close STOP ///////////////////////////////
AvCandleTime = (time >= 150000 and time < 180000)
HotTime = (time >= 074000 and time < 093000) or (time >= 143000 and time < 163000)
if AvCandleTime then
DimCandleMax=abs(high-low)
endif
DimCandleNow=abs(open-low)
divavcandle=0.3
//////avcandle=average[400](high-low)
avcandle=average[400](DimCandleMax)
DivAvcandleTrig=0.7
FasciaTrig=DivAvcandleTrig*avcandle
PeriodXm60=60
///timeframe(1 minute,updateonclose)
innerXm60 = 2*weightedaverage[ round( PeriodXm60/2 ) ](close)-weightedaverage[PeriodXm60](close)MMHULLXm60=weightedaverage[ round( sqrt(PeriodXm60) ) ]( innerXm60 )
//////if trendSup=-1 then
LivFasciaTrig=MMHULLXm60-FasciaTrig
LivFasciaStop=MMHULLXm60+FasciaTrig
gcolstop=255
rcolstop=0
else
LivFasciaTrig=MMHULLXm60+FasciaTrig
LivFasciaStop=MMHULLXm60-FasciaTrig
gcolstop=0
rcolstop=255
endif
///////////////////////////////////////////////
///////////////////////////////////////////
// ===========================================================
///////////////////////////////////////////////////////////////////////// 1025-MarketSTructAlgoSignal-5m/////timeframe(5 minutes,updateonclose)
// —– PARAMETRI —–
leftBarsTubeAlgoXm = 5 // barre per pivot interno
rightBarsTubeAlgoXm = 5
leftBarsTubeAlgoXmExt = 30 // barre per pivot esterno
rightBarsTubeAlgoXmExt = 30
distTubeAlgoXm = 2.0 // distTubeAlgoXmanza banda (ATR * distTubeAlgoXm)
zoneTubeAlgoXm = 1 // mostra zona (1 = true)// —– VARIABILI —–
phTubeAlgoXm = 0
plTubeAlgoXm = 0
phTubeAlgoXmExt = 0
plTubeAlgoXmExt = 0lastTubeAlgoXmHigh = 0
lastTubeAlgoXmLow = 0
prevTubeAlgoXmHigh = 0
prevTubeAlgoXmLow = 0msTubeAlgoXm = 0
longsigTubeAlgoXm = 0
shortsigTubeAlgoXm = 0
longsigTubeAlgoXm2 = 0
shortsigTubeAlgoXm2 = 0ATR14TubeAlgoXm = AverageTrueRange[14](close)
ma2TubeAlgoXm = 0
ma3TubeAlgoXm = 0// ===== CALCOLO PIVOT INTERNO (swing) =====
IF barindex > leftBarsTubeAlgoXm + rightBarsTubeAlgoXm THEN
localTubeAlgoXmHigh = 1
localTubeAlgoXmLow = 1FOR iTubeAlgoXm = barindex – leftBarsTubeAlgoXm TO barindex + rightBarsTubeAlgoXm
IF iTubeAlgoXm <> barindex THEN
IF high[iTubeAlgoXm] > high[barindex] THEN
localTubeAlgoXmHigh = 0
ENDIF
IF low[iTubeAlgoXm] < low[barindex] THEN
localTubeAlgoXmLow = 0
ENDIF
ENDIF
NEXTIF localTubeAlgoXmHigh = 1 THEN
prevTubeAlgoXmHigh = lastTubeAlgoXmHigh
lastTubeAlgoXmHigh = high[barindex]
phTubeAlgoXm = high[barindex]
ENDIFIF localTubeAlgoXmLow = 1 THEN
prevTubeAlgoXmLow = lastTubeAlgoXmLow
lastTubeAlgoXmLow = low[barindex]
plTubeAlgoXm = low[barindex]
ENDIF
ENDIF// ===== CALCOLO PIVOT ESTERNO =====
IF barindex > leftBarsTubeAlgoXmExt + rightBarsTubeAlgoXmExt THEN
IF high = Highest[leftBarsTubeAlgoXmExt + rightBarsTubeAlgoXmExt +1](high) THEN
phTubeAlgoXmExt = high
ENDIF
IF low = Lowest[leftBarsTubeAlgoXmExt + rightBarsTubeAlgoXmExt +1](low) THEN
plTubeAlgoXmExt = low
ENDIF
ENDIF// ===== CALCOLO MS e SEGNALI =====
msTubeAlgoXm = msTubeAlgoXm[1]// CHoCH segnali
longsigTubeAlgoXm = close > phTubeAlgoXm AND msTubeAlgoXm[1] < 0
shortsigTubeAlgoXm = close < plTubeAlgoXm AND msTubeAlgoXm[1] > 0// BOS segnali
longsigTubeAlgoXm2 = longsigTubeAlgoXm AND longsigTubeAlgoXm[1] = 0
shortsigTubeAlgoXm2 = shortsigTubeAlgoXm AND shortsigTubeAlgoXm[1] = 0// Aggiorna MS
IF lastTubeAlgoXmHigh > prevTubeAlgoXmHigh AND lastTubeAlgoXmLow > prevTubeAlgoXmLow AND close > phTubeAlgoXm THEN
msTubeAlgoXm = 2
ELSIF close > phTubeAlgoXm THEN
msTubeAlgoXm = 1
ELSIF lastTubeAlgoXmHigh < prevTubeAlgoXmHigh AND lastTubeAlgoXmLow < prevTubeAlgoXmLow AND close < plTubeAlgoXm THEN
msTubeAlgoXm = -2
ELSIF close < plTubeAlgoXm THEN
msTubeAlgoXm = -1
ELSE
msTubeAlgoXm = msTubeAlgoXm[1]
ENDIF// ===== CALCOLO BANDA / ZONE =====
maTubeAlgoXm = Average[leftBarsTubeAlgoXmExt](close)
atrTubeAlgoXm = AverageTrueRange[leftBarsTubeAlgoXmExt](close)IF msTubeAlgoXm > 0 AND msTubeAlgoXm[1] > 0 THEN
ma2TubeAlgoXm = maTubeAlgoXm – atrTubeAlgoXm*distTubeAlgoXm
ma3TubeAlgoXm = ma2TubeAlgoXm + atrTubeAlgoXm
ELSIF msTubeAlgoXm < 0 AND msTubeAlgoXm[1] < 0 THEN
ma2TubeAlgoXm = maTubeAlgoXm + atrTubeAlgoXm*distTubeAlgoXm
ma3TubeAlgoXm = ma2TubeAlgoXm – atrTubeAlgoXm
ELSE
ma2TubeAlgoXm = 0
ma3TubeAlgoXm = 0
ENDIF
rbTubeAlgoXm=0
gbTubeAlgoXm=0
visdispTubeAlgoXm=20
upBTubeAlgoXm=max(ma2TubeAlgoXm,ma3TubeAlgoXm)
dnBTubeAlgoXm=min(ma2TubeAlgoXm,ma3TubeAlgoXm)
// ===== DISEGNO BANDA / ZONE =====
if ma2TubeAlgoXm>ma2TubeAlgoXm[1] or ma3TubeAlgoXm>ma3TubeAlgoXm[1] then
if low>dnBTubeAlgoXm then
rbTubeAlgoXm=0
gbTubeAlgoXm=255
visdispTubeAlgoXm=100
endif
endif
if ma2TubeAlgoXm<ma2TubeAlgoXm[1] or ma3TubeAlgoXm<ma3TubeAlgoXm[1] then
if high<upBTubeAlgoXm then
rbTubeAlgoXm=255
gbTubeAlgoXm=0
visdispTubeAlgoXm=100
endif
endif
if high<upBTubeAlgoXm then
rbTubeAlgoXm=255
gbTubeAlgoXm=0
visdispTubeAlgoXm=100
endif
if low>dnBTubeAlgoXm then
rbTubeAlgoXm=0
gbTubeAlgoXm=255
visdispTubeAlgoXm=100
endif
TIMEFRAME(default,updateonclose)
///GRAPHONPRICE LivFasciaStop
///graph trendSup
////graphonprice rngfilt //////coloured(cr,cg,cb) style(line,4) as “0525_TREND-Range-Filter-Manual”
// Condizioni per entrare su posizioni long
if Partito=1 THEN
EntrSELL=0
EntrBUY=1
endif
//////////////////////////
if Partito=1 and PuoiEntrare=1 then
IF NOT LongOnMarket AND EntrBUY=1 and PuoiEntrare=1 THEN
BUY 1 CONTRACTS AT MARKET
PuoiEntrare=0
set stop loss maxloss
if trendSup=-1 then
EntratoControtrendSup=1
else
EntratoControtrendSup=0
endif
ENDIF
// Condizioni per entrare su posizioni short
IF NOT ShortOnMarket AND EntrSELL=1 and PuoiEntrare=1 THEN
SELLSHORT 1 CONTRACTS AT MARKET
PuoiEntrare=0
set stop loss maxloss
if trendSup=1 then
EntratoControtrendSup=1
else
EntratoControtrendSup=0
endif
ENDIF
endif
/////////////
if EntratoControtrendSup=1 THEN
If LongOnMarket and trendSup=1 THEN
EntratoControtrendSup=0
ENDIF
IF ShortOnMarket and trendSup=-1 THEN
EntratoControtrendSup=0
endif
endif
///////////////////////
If LongOnMarket and trendSup=-1 and EntratoControtrendSup=0 THEN
SELL AT MARKET
ENDIF/////
/////////////////////////////////////////
// Condizioni per uscire da posizioni short
IF ShortOnMarket and trendSup=1 and EntratoControtrendSup=0 THEN
EXITSHORT AT MARKET
endif
////////////
if DAYOFWEEK= 5 and time >215500 THEN
IF ShortOnMarket THEN
EXITSHORT AT MARKET
endif
IF LongOnMarket THEN
SELL AT MARKET
endif
endif
/////////////////////////////////////////////////////////////
if TrailingST=1 and EntratoControtrendSup=0 then
IF NOT ONMARKET THEN
newSL=0
Distance = 7
ENDIF
IF (BarIndex – TradeIndex) >= 0 THEN //0
//manage long positions
newSL=LivFasciaStop
//stop order to exit the positions
IF newSL>0 THEN
IF LongOnMarket THEN
//////////////////////
if LivFasciaStop>upBTubeAlgoXm then
newSL=upBTubeAlgoXm
else
newSL=LivFasciaStop
endif/////////////////////
IF (close + Distance) > newSL THEN
SELL AT newSL STOP
ELSIF (close – Distance) < newSL THEN
SELL AT newSL LIMIT
ELSE
SELL AT Market
ENDIF
ELSIF ShortOnmarket THEN
if LivFasciaStop<dnBTubeAlgoXm then
newSL=dnBTubeAlgoXm
else
newSL=LivFasciaStop
endif
IF (close + Distance) < newSL THEN
EXITSHORT AT newSL STOP
ELSIF (close – Distance) > newSL THEN
EXITSHORT AT newSL LIMIT
ELSE
EXITSHORT AT Market
ENDIF
ENDIF
ENDIF
ENDIF
endif
//*********************************************************************************10/14/2025 at 10:09 AM #252574Sei sicuro di aver incollato il codice che, a tuo dire, funziona in ProOrder?
Il motivo per cui te lo chiedo è che ci sono molti errori “sottolineati in rosso” nel codice pubblicato sopra.
Anche errori come ounce (dovrebbe essere once) nelle righe 11, 12 e 13.
10/14/2025 at 10:40 AM #25257710/14/2025 at 11:29 AM #25258010/14/2025 at 11:41 AM #252581Di seguito è riportato un elenco non esaustivo degli elementi che possono influire su una strategia di trading dal vivo e creare differenze con un conto demo e/o backtest:
- Differenza di prezzo (Spread)
- Slittamento (slippage)
- Rifiuto di ordini per uno dei motivi sopra indicati, ma anche per la distanza consentita dal prezzo corrente per inserire ordini in sospeso (nota come “distanza minima”)
- Orari di negoziazione diversi (codice ProOrder lanciato in un fuso orario diverso / orari personalizzati, dall’utente)
- Problema di codifica: divisione per errore zero, periodi nulli o negativi per indicatori, ecc…
- Mancanza di reattività dei server demo IG (se IG è il broker), anche se questo è notevolmente migliorato rispetto allo scorso anno
- Effettuare backtest senza l’opzione tick-by-tick
- L’istruzione “set stop trailing” che dà a IG il controllo totale del tuo stoploss, può essere spostata in modo diverso tra i conti a causa dei punti di cui sopra
- Conti a rischio limitato e loro regole
- Regole e commissioni di stoploss garantite
- Avviare una strategia in un momento diverso (1 ora o anche 1 minuto dopo): a seconda del codice della strategia, i risultati di alcuni calcoli potrebbero essere diversi
- Margine richiesto sul conto di trading (non vengono effettuati test demo o backtest su questo argomento)
- Tariffe notturne e infrasettimanali
- Adeguamento automatico degli ordini stop controllati o meno all’avvio del ProOrder
- Distanza minima utilizzata nei backtest per ordini pendenti, non la stessa del trading reale, a causa dei requisiti del broker
- Dimensioni del contratto diverse tra backtest e live
- Poiché i backtest vengono testati solo sulla cronologia senza alcuna connessione al mercato live, potresti riscontrare differenze con l’ambiente di trading dal vivo reale soggetto ad allargamento dello spread, slippage, ecc.
L’argomento è stato trattato altre volte, puoi leggere anche questi post:
https://www.prorealcode.com/topic/real-trading-does-not-match-the-backtest/#post-175189
1 user thanked author for this post.
10/14/2025 at 11:57 AM #252584Sono riuscito a farlo funzionare in Backtest, ma probabilmente non come volevi, roccafragius.
Puoi facilmente confrontare il mio .itf allegato con il tuo codice utilizzando
Confronta il testo e trova le differenze online o offline – Diffchecker
1 user thanked author for this post.
10/14/2025 at 4:12 PM #252611Grazie mille a tutti, alla fine ho cambiato completamente strategia sfruttando banalmente le curve Hull con differenti periodi e su differenti Timeframe ed adesso funziona grazieeeeee
1 user thanked author for this post.
10/14/2025 at 4:15 PM #252612Grazie Roberto, consigli preziosi come sempre!
10/14/2025 at 4:17 PM #252613Grazie mille Grahal!
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on