Subtilité d'un code
Forums › ProRealTime forum Français › Support ProOrder › Subtilité d'un code
- This topic has 9 replies, 2 voices, and was last updated 6 years ago by Madrosat.
-
-
01/23/2017 at 10:24 AM #22105
Bonjour
voici un code relevé dans une stratégie de la librairie
quelqu’un peut il m’expliquer la différence qu’il y a
quand la condition if close >= tradeprice(1) est valide
ou ELSE je suppose alors que la condition est non valide??
mais le code dit toujours sell at mySTOP STOP??123456789IF LongOnMarket THENmySTOP = mySARIF Close >= TradePrice(1) THENmySTOP = mySARSELL AT mySTOP STOPELSESELL AT mySTOP STOPENDIFENDIFpar avance merci
Madrosat
01/23/2017 at 10:51 AM #2211201/24/2017 at 6:32 PM #2233803/02/2018 at 6:56 PM #64236Qu’est ce qui ne va pas dans ce code? en backtest donne de très bons résultats en réel les sorties se font en même temps que les entrées et les résultats sont très mauvais !!
Nicolas peux tu rectifier ce qui ne va pas??
1234567891011121314151617181920212223242526DEFPARAM CumulateOrders = False // Cumul des positions désactivéDEFPARAM preloadbars = 200once lastlongstop = 1///once lastshortstop = 1///s1 = high[0]s2 = low [0]// Conditions pour ouvrir une position acheteuseindicator1 = CALL "Moyenne adaptative Kama"[3, 3, 8]c1 = (indicator1 > indicator1[1])ignored, ignored, indicator2 = CALL "TMA center channel"[3, 100, 0.4]notrading = (dayofweek=5 AND time>=210000) or (dayofweek=1 AND time<030000)IF not longonmarket and NOT notrading and c1 thenbuy 1 shares at (indicator2) limitENDIF// Conditions pour fermer une position acheteuseignored, indicator3, ignored = CALL "TMA center channel"[3, 100, 0.4]SELL at indicator3 limitlastlongstop = s2sell at lastlongstop stop03/05/2018 at 2:06 PM #64441Merci de créer des topics séparés pour des demandes qui n’ont rien à voir entre elles. Merci de joindre le fichier itf de la stratégie, cela m’évitera d’aller chercher les codes des indicateurs appelés par CALL dans ta stratégie ..
Pour débugger un code, on commence par vérifier ce que nous retourne les variables, avec GRAPH tu devrais commencer par visualiser les infos des indicateurs par exemple.
03/06/2018 at 5:52 AM #64529Bonjour Nicolas
voici le code complet avec résultat en backtest comme tu dis parfois trop beau pour être vrai
Il faut tout d’abord relativiser car beaucoup d’entrées et de sorties se font sur la même bougie donc le backtest est
inexact .
Malgré cela je ne comprends pas pourquoi en réel le comportement du code est complètement différent
d’après ce que j’ai pu constater ça ne viendrait pas de mes indicateurs mais du lastlongstop mais pourquoi est il lu différemment
en réel qu’en backtest??ps j’ai pas voulu ouvrir un autre topic pour ne pas encombrer le site
code complet1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677//-------------------------------------------------------------------------// Code principal : MonSystème 220//-------------------------------------------------------------------------DEFPARAM CumulateOrders = False // Cumul des positions désactivéDEFPARAM preloadbars = 200once lastlongstop = 1///once lastshortstop = 1///s1 = high[0]s2 = low [0]// Conditions pour ouvrir une position acheteuseindicator1 = CALL "Moyenne adaptative Kama"[3, 3, 8]c1 = (indicator1 > indicator1[1])ignored, ignored, indicator2 = CALL "TMA center channel"[3, 100, 0.4]notrading = (dayofweek=5 AND time>=210000) or (dayofweek=1 AND time<030000)IF not longonmarket and NOT notrading and c1 thenbuy 1 shares at (indicator2) limitENDIF// Conditions pour fermer une position acheteuseignored, indicator3, ignored = CALL "TMA center channel"[3, 100, 0.4]SELL at indicator3 limitlastlongstop = s2sell at lastlongstop stop//-------------------------------------------------------------------------// Fonction : Tma center channel//-------------------------------------------------------------------------// HalfLength = 50// AtrLength = 100// AtrMultiplier = 2.0avg = average[1](close)sum = (HalfLength+1)*avgsumw = (HalfLength+1)k = HalfLengthfor j = 1 to HalfLength dok = k-1sum = sum+(k*avg[j])sumw = sumw+knextbuffer1 = sum/sumwmyrange = AverageTrueRange[AtrLength](close)*AtrMultiplierbuffer2 = buffer1+myrangebuffer3 = buffer1-myrangeRETURN buffer1 coloured(0,220,0) as "TMA", buffer2 coloured(220,0,0) as "upper band", buffer3 coloured(0,220,0) as "lower band"//-------------------------------------------------------------------------// Fonction : Moyenne adaptative Kama//-------------------------------------------------------------------------///Moyenne adaptative Kama (3 3 8 )Fastest = 2 / (FastPeriod + 1)Slowest = 2 / (SlowPeriod + 1)if barindex < Period+1 thenKama=closeelseNum = abs(close-close[Period])Den = summation[Period](abs(close-close[1]))ER = Num / DenAlpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])endifreturn kama03/06/2018 at 9:54 AM #64543Je n’ai pas testé, mais:
- Les entrées/sorties sur la même bougie ne devraient pas impacter le test, si le backtest est fait en mode tick par tick, est-ce le cas ?
- As-tu inclut le spread dans les tests ?
- En temps réel, as-tu des ordres rejetés ? La distance au stop autorisé par le courtier peut être un problème, puisque tu utilises un ordre conditionnel sur le dernier Low à la ligne 29.
03/06/2018 at 2:16 PM #64583Nicolas hélas si les entrées et sorties sur la même bougie impactent les résultats des backtest , je dis bien hélas , pour essayer de palier à cela
j’utilise la technique que tu as proposée ” buybar , sellbar, barindex” et là les backtest sont plus fiables parce que la sortie a lieu sur au moins la bougie suivant l’entrée mais on rate de nombreux trades qui seraient gagnants.
J’ai utilisé un spread de 1 et les backtests sont faits en tick par tick
Ci joint un autre graphique avec toujours cette courbe qui fait rêver , rêver hélas.
Il y a quelques ordres rejetés mais peu.
Vraiment je serais heureux que tu essaies et tu me corriges ce qui ne va pas .
Cordialement
03/06/2018 at 3:45 PM #64595Hormis ce que j’ai proposé à la lecture du code, je verrai:
- “grapher” les données des indicateurs et vérifier si ils sont identiques entre le backtest et le temps réel.
- vérifier si le spread sur EURGBP est bien de 1 et cela durant toute la période quotidienne de trading
Les différences se font sur les entrées, ou les sorties, ou les deux ?
03/07/2018 at 8:32 AM #64649Bonjour Nicolas
ça arrive principalement et presque exclusivement sur les sorties.
Pour illustrer ce que je disais précédement voici un graph très récent avec un backtest tick par tick et en demo de la même stratégie
avec backtest tick par tick la sortie est gagnante sur la bougie d’entrée ,marquée s’une flèche noire, elle ne l’est pas sur la démo.
( ce n’est pas exactement la même stratégie mais c’est pour illustrer mes propos )
-
AuthorPosts
Find exclusive trading pro-tools on