Probleme de stop a un moment precis d’un backtest
Forums › ProRealTime forum Français › Support ProOrder › Probleme de stop a un moment precis d’un backtest
- This topic has 6 replies, 3 voices, and was last updated 2 years ago by fifi743.
-
-
10/13/2022 at 10:07 AM #202435
Bonjour a tous,
Je suis en train de backtester une stratégie et j’obtiens un comportement bizarre sur le France 40 concernant les stop.
Donc dans ma stratégie je BUY ou SELLSHORT x contrats une fois mon signal obtenu.
Je place un target et un stop loss de la manière suivante (exemple en shortmarket) :
IF shortonmarket and TradeShortSSB then
SET STOP pLOSS STOPSSB
SET TARGET pPROFIT TargetShortSSB
ELSIF shortonmarket and TradeShortSSA then
SET STOP pLOSS STOPSSA
SET TARGET pPROFIT TargetShortSSA
ELSIF shortonmarket and TradeShortKIJUN then
SET STOP pLOSS STOPKIJUN
SET TARGET pPROFIT TargetShortKIJUN
ELSIF shortonmarket and TradeShortTENKAN then
SET STOP pLOSS 14//STOPTENKAN
SET TARGET pPROFIT TargetShortTENKAN
ENDIFC’est une stratégie ICHIMOKU comme vous pourrez le voir, je n’ai pas le même TP et SL selon que ce soit un trade lié à la SSA, SSB, TENKAN ou KIJUN.
Tout est OK dans cette stratégie, les SL sont bien placés, sauf à un endroit précis du France 40 (trade du 15 Aout 2019 voir ci-joint), où j’ai un comportement que je n’explique pas.
A la base dans mon code, le STOPTENKAN était optimisé sur 16, et pour ce trade précis je ne comprenais pas pourquoi j’avais une énorme perte, j’ai donc modifié a la main le SL et essayé de comprendre et il se trouve qu’il semble exister un “cliquet” entre 13 et 14 points : voir les screenshots ci-joint pour un SL de 13 points c’est OK, et quand il passe à 14 tout d’un coup je sors des jours plus tard avec 72 points de perte ! (en fait le cliquet est vers 13.9 points)
J’avais la même perte avec mon STOP optimisé de 16 points, ca ne semble donc pas être une histoire de multiple du stop (puisque j’ai bien 72 points avec SL = 14 ou 16)
Je précise que j’ai ce comportement uniquement ici, partout ailleurs sur le backtest (de 2019 à aujourd’hui) mon SL est bien placé
Est ce que vous avez une idée d’où peut venir ce genre de comportement ? Un problème dans le code ou dans les datas historisées qui ferait bugger l’ensemble ici ?
Merci d’avance pour votre aide, j’ai cherché pas mal de temps mais là j’avoue sécher un peu …
Si besoin bien sûr je vous joindrais le code pour mieux comprendre (mais il faudra que je fasse un peu de tri avant !)
10/13/2022 at 10:11 AM #20243910/13/2022 at 12:12 PM #202457Merci pour la réponse rapide.
J’ai essayé de mettre des “If not on market” dans mes conditions si c’est de cela dont tu parles, mais j’ai le même comportement.
Je te joins le code, que j’ai volontairement simplifié … Même si cela reste une belle usine à gaz ! (merci de noter que certaines variables ne sont pas définies, c’est normal c’est pour l’exemple)
Merci pour ton indulgence, je débute ! 😀
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516////////////////////////////////////////////////////////////////////////// PARAMETRES GENERAUX//////////////////////////////////////////////////////////////////////DEFPARAM CumulateOrders = False//DEFPARAM FLATBEFORE = 084500//DEFPARAM FLATAFTER = 220000////////////////////////////////////////////////////////////////////////// GENERIC CODE//////////////////////////////////////////////////////////////////////// Variables a optimiserSTOPBase = 16TARGETBase = 3TradeSSBAllowed = 1TradeSSAAllowed = 1TradeKIJUNAllowed = 0TradeTENKANAllowed = 1// Variables à modifier a la mainTradeLongAllowed = 1TradeShortAllowed = 1TradeH4Allowed = 0TradeDailyAllowed = 1TradeWeeklyAllowed = 1STOPSSBMultiplier = a // pour l'exempleTARGETSSBMultiplier = b // pour l'exempleSTOPSSB = StopBase * STOPSSBMultiplierTargetLongSSB = (ABS(tradeprice-TARGETlong)*TARGETBase*TARGETSSBMultiplier)TargetShortSSB = (ABS(tradeprice-TARGETshort)*TARGETBase*TARGETSSBMultiplier)STOPSSAMultiplier = c // pour l'exempleTARGETSSAMultiplier = d // pour l'exempleSTOPSSA = StopBase * STOPSSAMultiplierTargetLongSSA = (ABS(tradeprice-TARGETlong)*TARGETBase*TARGETSSAMultiplier)TargetShortSSA = (ABS(tradeprice-TARGETshort)*TARGETBase*TARGETSSAMultiplier)STOPKIJUNMultiplier = e // pour l'exempleTARGETKIJUNMultiplier = f // pour l'exempleSTOPKIJUN = StopBase * STOPKIJUNMultiplierTargetLongKIJUN = (ABS(tradeprice-TARGETlong)*TARGETBase*TARGETKIJUNMultiplier)TargetShortKIJUN = (ABS(tradeprice-TARGETshort)*TARGETBase*TARGETKIJUNMultiplier)STOPTENKANMultiplier = g // pour l'exempleTARGETTENKANMultiplier = h // pour l'exempleSTOPTENKAN = StopBase * STOPTENKANMultiplierTargetLongTENKAN = (ABS(tradeprice-TARGETlong)*TARGETBase*TARGETTENKANMultiplier)TargetShortTENKAN = (ABS(tradeprice-TARGETshort)*TARGETBase*TARGETTENKANMultiplier)//*******MONEY MANAGEMENT*********// pour l'exemplenSSB = 1nSSA = 1nKIJUN = 1nTENKAN = 1////////////////////////////////////////////////////////////////////////// INDICATOR////////////////////////////////////////////////////////////////////////Atimeframe(default)SignalUp = CALL FonctionSignalUpSignalDown = CALL FonctionSignalDown//Btimeframe(4hours)SignalSSAh4 = CALL FonctionSignalSSASignalSSBh4 = CALL FonctionSignalSSBSignalKIJUNh4 = CALL FonctionSignalKIJUNSignalTENKANh4 = CALL FonctionSignalTENKANtimeframe(daily)SignalSSAdaily = CALL FonctionSignalSSASignalSSBdaily = CALL FonctionSignalSSBSignalKIJUNdaily = CALL FonctionSignalKIJUNSignalTENKANdaily = CALL FonctionSignalTENKANtimeframe(weekly)SignalSSAweekly = CALL FonctionSignalSSASignalSSBweekly = CALL FonctionSignalSSBSignalKIJUNweekly = CALL FonctionSignalKIJUNSignalTENKANweekly = CALL FonctionSignalTENKANtimeframe(default)IF TradeSSAAllowed thenSignalSSA = SignalSSAh4 or SignalSSADaily or SignalSSAWeeklyENDIFIF TradeSSBAllowed thenSignalSSB = SignalSSBh4 or SignalSSBDaily or SignalSSBWeeklyENDIFIF TradeKIJUNAllowed thenSignalKIJUN = SignalKIJUNh4 or SignalKIJUNDaily or SignalKIJUNWeeklyENDIFIF TradeTENKANAllowed thenSignalTENKAN = SignalTENKANh4 or SignalTENKANDaily or SignalTENKANWeeklyENDIFtimeframe(4hours)SSAH4Up = TradeH4Allowed and SignalUp and SignalSSASSAH4Down = TradeH4Allowed and SignalDown and SignalSSASSBH4Up = TradeH4Allowed and SignalUp and SignalSSBSSBH4Down = TradeH4Allowed and SignalDown and SignalSSBKIJUNH4Up = TradeH4Allowed and SignalUp and SignalKIJUNKIJUNH4Down = TradeH4Allowed and SignalDown and SignalKIJUNTENKANH4Up = TradeH4Allowed and SignalUp and SignalTENKANTENKANH4Down = TradeH4Allowed and SignalDown and SignalTENKANtimeframe(daily)SSADAILYUp = TradeDAILYAllowed and SignalUp and SignalSSASSADAILYDown = TradeDAILYAllowed and SignalDown and SignalSSASSBDAILYUp = TradeDAILYAllowed and SignalUp and SignalSSBSSBDAILYDown = TradeDAILYAllowed and SignalDown and SignalSSBKIJUNDAILYUp = TradeDAILYAllowed and SignalUp and SignalKIJUNKIJUNDAILYDown = TradeDAILYAllowed and SignalDown and SignalKIJUNTENKANDAILYUp = TradeDAILYAllowed and SignalUp and SignalTENKANTENKANDAILYDown = TradeDAILYAllowed and SignalDown and SignalTENKANtimeframe(weekly)SSAWEEKLYUp = TradeWEEKLYAllowed and SignalUp and SignalSSASSAWEEKLYDown = TradeWEEKLYAllowed and SignalDown and SignalSSASSBWEEKLYUp = TradeWEEKLYAllowed and SignalUp and SignalSSBSSBWEEKLYDown = TradeWEEKLYAllowed and SignalDown and SignalSSBKIJUNWEEKLYUp = TradeWEEKLYAllowed and SignalUp and SignalKIJUNKIJUNWEEKLYDown = TradeWEEKLYAllowed and SignalDown and SignalKIJUNTENKANWEEKLYUp = TradeWEEKLYAllowed and SignalUp and SignalTENKANTENKANWEEKLYDown = TradeWEEKLYAllowed and SignalDown and SignalTENKANtimeframe(default)////////////////////////////////////////////////////////////////////////// STRATEGIE DE TRADING////////////////////////////////////////////////////////////////////////*******BUY CONDITIONS*******// Trades SSBIf not ONMARKET thenIf TradelongAllowed thenif SSBH4Up thenbuy nSSB shares at xh4 LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 1TradelongSSA = 0TradelongKIJUN = 0TradelongTENKAN = 0endifENDIFIf TradelongAllowed thenif SSBDailyUp thenbuy nSSB shares at xdaily LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 1TradelongSSA = 0TradelongKIJUN = 0TradelongTENKAN = 0endifENDIFIf TradelongAllowed thenIf SSBWeeklyUp thenbuy nSSB shares at xweekly LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 1TradelongSSA = 0TradelongKIJUN = 0TradelongTENKAN = 0endifENDIF// Trades SSAIf TradelongAllowed thenif SSAH4Up thenbuy nSSA shares at xh4 LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 1TradelongKIJUN = 0TradelongTENKAN = 0endifENDIFIf TradelongAllowed thenif SSADailyUp thenbuy nSSA shares at xdaily LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 1TradelongKIJUN = 0TradelongTENKAN = 0endifENDIFIf TradelongAllowed thenIf SSAWeeklyUp thenbuy nSSA shares at xweekly LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 1TradelongKIJUN = 0TradelongTENKAN = 0endifENDIF// Trades KIJUNIf TradelongAllowed thenif KIJUNH4Up thenbuy nKIJUN shares at xh4 LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 0TradelongKIJUN = 1TradelongTENKAN = 0endifENDIFIf TradelongAllowed thenif KIJUNDailyUp thenbuy nKIJUN shares at xdaily LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 0TradelongKIJUN = 1TradelongTENKAN = 0endifENDIFIf TradelongAllowed thenIf KIJUNWeeklyUp thenbuy nKIJUN shares at xweekly LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 0TradelongKIJUN = 1TradelongTENKAN = 0endifENDIF// Trades TENKANIf TradelongAllowed thenif TENKANH4Up thenbuy nTENKAN shares at xh4 LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 0TradelongKIJUN = 0TradelongTENKAN = 1endifENDIFIf TradelongAllowed thenif TENKANDailyUp thenbuy nTENKAN shares at xdaily LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 0TradelongKIJUN = 0TradelongTENKAN = 1endifENDIFIf TradelongAllowed thenIf TENKANWeeklyUp thenbuy nTENKAN shares at xweekly LIMIT // pour l'exempleTARGETlong = y // pour l'exempleTradelongSSB = 0TradelongSSA = 0TradelongKIJUN = 0TradelongTENKAN = 1endifENDIFENDIF//*******CLOSE BUY POSITION CONDITIONS*******IF longonmarket and TradeLongSSB thenSET STOP pLOSS STOPSSBSET TARGET pPROFIT TargetLongSSBELSIF longonmarket and TradeLongSSA thenSET STOP pLOSS STOPSSASET TARGET pPROFIT TargetLongSSAELSIF longonmarket and TradeLongKIJUN thenSET STOP pLOSS STOPKIJUNSET TARGET pPROFIT TargetLongKIJUNELSIF longonmarket and TradeLongTENKAN thenSET STOP pLOSS STOPTENKANSET TARGET pPROFIT TargetLongTENKANENDIF//*******SELL CONDITIONS *******// Trades SSBIf not ONMARKET thenIf TradeShortAllowed thenIf TradeH4Allowed thenif SSBH4Down thenSELLSHORT nSSB shares at xh4 LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 1TradeshortSSA = 0TradeshortKIJUN = 0TradeshortTENKAN = 0endifendifENDIFIf TradeShortAllowed thenIf TradeDailyAllowed thenif SSBDailyDown thenSELLSHORT nSSB shares at xdaily LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 1TradeshortSSA = 0TradeshortKIJUN = 0TradeshortTENKAN = 0endifendifENDIFif TradeShortAllowed thenif TradeWeeklyAllowed thenIf SSBWeeklyDown thenSELLSHORT nSSB shares at xweekly LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 1TradeshortSSA = 0TradeshortKIJUN = 0TradeshortTENKAN = 0endifendifENDIF// Trades SSAIf TradeShortAllowed thenIf TradeH4Allowed thenif SSAH4Down thenSELLSHORT nSSA shares at xh4 LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 1TradeshortKIJUN = 0TradeshortTENKAN = 0endifendifENDIFIf TradeShortAllowed thenIf TradeDailyAllowed thenif SSADailyDown thenSELLSHORT nSSA shares at xdaily LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 1TradeshortKIJUN = 0TradeshortTENKAN = 0endifendifENDIFif TradeShortAllowed thenif TradeWeeklyAllowed thenIf SSAWeeklyDown thenSELLSHORT nSSA shares at xweekly LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 1TradeshortKIJUN = 0TradeshortTENKAN = 0endifendifENDIF// Trades KIJUNIf TradeShortAllowed thenIf TradeH4Allowed thenif KIJUNH4Down thenSELLSHORT nKIJUN shares at xh4 LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 0TradeshortKIJUN = 1TradeshortTENKAN = 0endifendifENDIFIf TradeShortAllowed thenIf TradeDailyAllowed thenif KIJUNDailyDown thenSELLSHORT nKIJUN shares at xdaily LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 0TradeshortKIJUN = 1TradeshortTENKAN = 0endifendifENDIFif TradeShortAllowed thenif TradeWeeklyAllowed thenIf KIJUNWeeklyDown thenSELLSHORT nKIJUN shares at xweekly LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 0TradeshortKIJUN = 1TradeshortTENKAN = 0endifendifENDIF// Trades TENKANIf TradeShortAllowed thenIf TradeH4Allowed thenif TENKANH4Down thenSELLSHORT nTENKAN shares at xh4 LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 0TradeshortKIJUN = 0TradeshortTENKAN = 1endifendifENDIFIf TradeShortAllowed thenIf TradeDailyAllowed thenif TENKANDailyDown thenSELLSHORT nTENKAN shares at xdaily LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 0TradeshortKIJUN = 0TradeshortTENKAN = 1endifendifENDIFif TradeShortAllowed thenif TradeWeeklyAllowed thenIf TENKANWeeklyDown thenSELLSHORT nTENKAN shares at xweekly LIMIT // pour l'exempleTARGETshort = y // pour l'exempleTradeshortSSB = 0TradeshortSSA = 0TradeshortKIJUN = 0TradeshortTENKAN = 1endifendifENDIFENDIF//*******CLOSE SELL POSITION CONDITIONS *******IF shortonmarket and TradeShortSSB thenSET STOP pLOSS STOPSSBSET TARGET pPROFIT TargetShortSSBELSIF shortonmarket and TradeShortSSA thenSET STOP pLOSS STOPSSASET TARGET pPROFIT TargetShortSSAELSIF shortonmarket and TradeShortKIJUN thenSET STOP pLOSS STOPKIJUNSET TARGET pPROFIT TargetShortKIJUNELSIF shortonmarket and TradeShortTENKAN thenSET STOP pLOSS STOPTENKANSET TARGET pPROFIT TargetShortTENKANENDIF10/13/2022 at 12:40 PM #202460Par exemple, c’est à la ligne 35 que tu définis “TradeLongSSB” et à chaque bougie ! donc si tu es déjà au marché, à chaque fois que ta ligne 318 est lu tu modifieras ton target avec cette nouvelle valeur…
Tu dois donc trouver le moyen de définir une seule fois la valeur que tu veux donner.
(je me rends compte que j’ai utilisé un exemple avec un target, mais c’est pareil avec la définition de tes variables des valeurs de stoploss bien entendu).
10/13/2022 at 12:56 PM #202461Je vois le truk … Ce qui m’étonne c’est que je n’ai ce comportement qu’ici, peut être y a-t-il une conjonction de choses qui font qu’ici ça se passe comme ça et pas ailleurs.
Et là où je ne comprends pas non plus c’est que si je mets une valeur fixe du stop (cf. mon premier post) ça me le fait : est ce que si le programme lit la ligne, il re déplace son stop à chaque fois (de 13 ou 14 points pour reprendre mon exemple)?
Existe il un moyen de voir via instruction GRAPH ou autre le stop que le systeme met ?
10/13/2022 at 3:52 PM #202478Re,
J’ai pas mal bossé dessus encore cet après midi mais rien de neuf…
J’arrive quand même à avoir le comportement ci-joint (voir screenshot) : sur la bougie où je sortais avec 72 points le backtest me génère un trade à 00:00 sur la même bougie, à 5250 alors que le cours est plus dans les 5320 et ne touche jamais ce niveau… Donc impossible ?!
Je ne sais pas si ce genre de choses peuvent arriver, dans le stockage des données …10/13/2022 at 4:14 PM #202482 -
AuthorPosts
Find exclusive trading pro-tools on