Bsr la communauté,
depuis quelques jours j’analyse le code de mes stratégies sur graphique…. je suis vraiment novice en programmation PRT, mais lorsque je contrôle sur les graphiques les ordres passé par le bot, j’ai l’impression qu’il y a des erreurs par rapport aux conditions dans les prises de positions.
ci-dessous un exemple:
je joins le code afin que vous puissiez effectuer vos propre test et d’avoir des précisions sur le pourquoi de cette situation:
DAX en M1
/ Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
//DEFPARAM FLATBEFORE = 091500
//DEFPARAM FLATAFTER = 154500
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Moyenne Mobile et MACD
MMA = (ExponentialAverage[9](high)[1]*1.00001)
MMB = (ExponentialAverage[21](high)[3]*1.00003)
MMC = (MACDline[8,24,8](low))
MMD = (ExponentialAverage[9](MACDline[8,24,8](low)))
// Inverse Transform RSI
Ind = RSI[9](Close)
x = 0.1 * (Ind - 50)
y = (EXP (2 * x) - 1) / (EXP (2 * x) + 1)
z = 50 * (y + 1)
// Conditions pour ouvrir une position acheteuse
c1a = close > MMA
c2a = MMA CROSSES OVER MMB
c3a = MMA > MMB
c4a = MMC > MMD
c5a = z CROSSES OVER 53
IF (c1a AND c2a AND c3a AND c4a AND c5a) AND not daysForbiddenEntry THEN
BUY 1 SHARES AT MARKET
SET TARGET %PROFIT 1.35
ENDIF
// Conditions pour fermer une position acheteuse
if onmarket and barindex-tradeindex <=1 and (MMA CROSSES UNDER MMB) then
SELL AT MARKET
endif
// Conditions pour ouvrir une position en vente à découvert
c1b = open < MMA
c2b = MMA CROSSES UNDER MMB
c3b = MMA < MMB
c4b = MMC < MMD
c5b = z CROSSES UNDER 47
IF (c1b AND c2b AND c3b AND c4b AND c5b) AND not daysForbiddenEntry THEN
SELLSHORT 1 SHARES AT MARKET
SET TARGET %PROFIT 1.35
ENDIF
// Conditions pour fermer une position vendeuse
if onmarket and barindex-tradeindex <=1 and (MMA CROSSES OVER MMB) then
SELL AT MARKET
endif
//************************************************************************
//trailing stop function
trailingstart = 8 //trailing will start @trailinstart points profit
trailingstep = 12 //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage long positions
IF LONGONMARKET THEN
//first move (breakeven)
IF newSL=0 AND close-tradeprice(1)>=trailingstart*pipsize THEN
newSL = tradeprice(1)+trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND close-newSL>=trailingstep*pipsize THEN
newSL = newSL+trailingstep*pipsize
ENDIF
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(1)-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
SELL AT newSL STOP
EXITSHORT AT newSL STOP
ENDIF
//************************************************************************
//Stops et objectifs
SET STOP %LOSS 2
//SET TARGET %PROFIT 1.15
//************************************************************************
le bot n’est pas censé ouvrir une position short à cet endroit…..MMA est supérieur à MMB, pourtant il short quand même.
si quelqu’un peut m’apporter des éléments de réponses, je suis preneur.
Merci d’avance pour les explications
Slts
Pour débugger un code, il faut commencer par grapher ses booléens (ici ceux utiliser pour ouvrir ta position de short) :
GRAPH (c1b AND c2b AND c3b AND c4b AND c5b)
si il retourne 1 (logiquement), alors vérifier chacune des valeurs, ici tes moyennes mobiles:
graphonprice MMA
graphonprice MMB
graphonprice MMC
graphonprice MMD
pour vérifier leurs concordances avec les valeurs des EMA appliquées sur ton graphique, je pense que ton problème vient de celles-ci.
Bonjour Nicolas,
le problème vient du décalage verticale appliqué sur MMA et MMB.
le % de décalage appliqué à MMA et MMB ne concorde pas avec le décalage verticale appliqué aux moyennes mobiles (indicateur sur le graphique)
***j’ajuste en modifiant le paramètre***
as tu une idée pour quelles raison la valeur donnée au code (*1.00001 et 1.00003) ne coincide pas avec le meme incrément appliqué à l’indicateur moyenne mobile sur le graphique (ema9 et 21))
slts
Je pense que le décalage est en valeur prix (close) et non celui de la EMA en question, soit EMA+close*facteur (à vérifier toutefois).
Le mieux c’est de coder un simple indicateur et de comparer avec la version de la plateforme.
Lorsque je n’applique pas de correction verticale, ne n’ai pas de problème….les courbes s’aligne.
La bonne syntaxe devrait être celle-ci :
ExponentialAverage[9](high)[1]*1.0000001
0.00001 % = 0.0000001
Merci Nicolas!
En effet c’est déjà mieux