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??
IF LongOnMarket THEN
mySTOP = mySAR
IF Close >= TradePrice(1) THEN
mySTOP = mySAR
SELL AT mySTOP STOP
ELSE
SELL AT mySTOP STOP
ENDIF
ENDIF
par avance merci
Madrosat
Le code présent définira quoi qu’il arrive un ordre conditionnel STOP au niveau de prix mySTOP.
Tu as raison, le niveau de prix mySTOP sera toujours le même, que la condition de la ligne 4 soit vrai ou non.
ok merci Nicolas ça me rassure
Qu’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??
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
DEFPARAM preloadbars = 200
once lastlongstop = 1
///once lastshortstop = 1
///s1 = high[0]
s2 = low [0]
// Conditions pour ouvrir une position acheteuse
indicator1 = 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 then
buy 1 shares at (indicator2) limit
ENDIF
// Conditions pour fermer une position acheteuse
ignored, indicator3, ignored = CALL "TMA center channel"[3, 100, 0.4]
SELL at indicator3 limit
lastlongstop = s2
sell at lastlongstop stop
Merci 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.
Bonjour 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 principal : MonSystème 220
//-------------------------------------------------------------------------
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
DEFPARAM preloadbars = 200
once lastlongstop = 1
///once lastshortstop = 1
///s1 = high[0]
s2 = low [0]
// Conditions pour ouvrir une position acheteuse
indicator1 = 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 then
buy 1 shares at (indicator2) limit
ENDIF
// Conditions pour fermer une position acheteuse
ignored, indicator3, ignored = CALL "TMA center channel"[3, 100, 0.4]
SELL at indicator3 limit
lastlongstop = s2
sell at lastlongstop stop
//-------------------------------------------------------------------------
// Fonction : Tma center channel
//-------------------------------------------------------------------------
// HalfLength = 50
// AtrLength = 100
// AtrMultiplier = 2.0
avg = average[1](close)
sum = (HalfLength+1)*avg
sumw = (HalfLength+1)
k = HalfLength
for j = 1 to HalfLength do
k = k-1
sum = sum+(k*avg[j])
sumw = sumw+k
next
buffer1 = sum/sumw
myrange = AverageTrueRange[AtrLength](close)*AtrMultiplier
buffer2 = buffer1+myrange
buffer3 = buffer1-myrange
RETURN 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 then
Kama=close
else
Num = abs(close-close[Period])
Den = summation[Period](abs(close-close[1]))
ER = Num / Den
Alpha = SQUARE(ER *(Fastest - Slowest )+ Slowest)
KAMA = (Alpha * Close) + ((1 -Alpha)* Kama[1])
endif
return kama
Nicolas 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
Hormis 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 ?
Bonjour 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 )