Bonjour,
J’essaie de programmer une stratégie en MTF en me basant sur le livre de Alexander Elder (stratégie Triple Screen).
Dans le livre il est expliqué que :
Screen 1 : doit afficher la tendance à long terme
Screen 2 : doit afficher une tendance opposé au Screen 1 à court terme
Screen 3 : l’ouverture de position dans le sens de la tendance du Screen 1
Pour cette stratégie j’ai choisi d’utiliser un indicateur de tendance pour le Screen 1, un oscillateur pour le Screen 2 et des conditions de breakout pour le Screen 3.
Screen 1 : MACD
Screen 2 : RSI
Screen 3 : achat si cassure high[1] du timeframe Screen 2 et vente si cassure low[1] du timeframe Screen 2
Voici mon code :
DEFPARAM CUMULATEORDERS = FALSE
DEFPARAM NoCashUpdate = FALSE
DEFPARAM MinOrder = 1
//DEFPARAM FlatBefore = 100000
//DEFPARAM FlatAfter = 180000
MinSize = 10 //CAC40 0.5 //Forex 1
AmplitudeMax = 50
AmplitudeMin = 20
/*==============================================================================================================================*/
// Ecran 1 : définir la tendance de long terme
TIMEFRAME(Weekly, updateonclose)
MACDhistogram = MACD[12,26,9](close)
WeeklyC1 = MACDhistogram < 0 AND MACDhistogram[1] < 0
WeeklyC2 = MACDhistogram > 0 AND MACDhistogram[1] > 0
WeeklyC3 = MACDhistogram > MACDhistogram[1]
WeeklyC4 = MACDhistogram < MACDhistogram[1]
/*==============================================================================================================================*/
// Ecran 2 : Définir si la tendance intérmédiaire est dans le sens opposé de la tendance LT
TIMEFRAME(Daily, updateonclose)
DailyRSI = RSI[14](close)
DailySAR = SAR[0.02,0.02,0.2]
Haut = high[1]
Bas = low[1]
DailyAmplitude = abs(haut - bas)
// Calculer la taille de la position
DailyC1 = DailyRSI < 30
DailyC2 = DailyRSI > 70
DailyC3 = DailyAmplitude > AmplitudeMin AND DailyAmplitude < AmplitudeMax
/*==============================================================================================================================*/
// Ecran 3 : Placer les ordres d'achat et de vente
TIMEFRAME(1 hour, updateonclose)
// Conditions pour ouvrir une position à l'achat et pour fermer une position d'achat
OneHourC1 = Close CROSSES OVER Haut
OneHourC2 = Close CROSSES UNDER DailySAR
// Ouverture position acheteuse
IF NOT ONMARKET AND (WeeklyC1 OR WeeklyC2) AND WeeklyC3 AND DailyC1 AND DailyC3 AND Close CROSSES OVER Haut THEN
BUY MinSize CONTRACTS AT MARKET
ENDIF
// Clôture position acheteuse
IF LongOnMarket AND OneHourC2 THEN
SELL AT MARKET
ENDIF
// Conditions pour ouvrir une position à la vente et pour fermer une position à la vente
OneHourC3 = Close CROSSES UNDER Bas
OneHourC4 = Close CROSSES OVER DailySAR
// Ouverture position vendeuse
IF NOT OnMarket AND (WeeklyC1 OR WeeklyC2) AND WeeklyC4 AND DailyC2 AND DailyC3 AND OneHourC3 THEN
SELLSHORT MinSize CONTRACTS AT MARKET
ENDIF
// Clôture position vendeuse
IF ShortOnMarket AND OneHourC4 THEN
EXITSHORT AT MARKET
ENDIF
// STOP LOSS GARANTIE
SET STOP LOSS DailyAmplitude
IF STRATEGYPROFIT < -200 THEN
QUIT
ENDIF
Je souhaite utiliser cette stratégie sur les actions. Je n’ai pas encore paramétré le calcul de la taille de position c’est pour cela que la taille de la position est à 10 actions.
Mon problème et qu’après avoir tester sur plusieurs actions (avec des prix différents > 100€ ou < 100€), le backtest n’affiche rien, comme s’il n’y a pas eu de transactions. Pouvez-vous m’aider à trouver l’erreur ?
Merci d’avance !
Bonsoir,
Lorsque je le teste en version “Indicateur” PRT remonte un problème de TimeFrame(). Lorsque je lance l’indicateur avec une unité de temps de 1 heure ça ne fonctionne pas car les 3 TimeFrame() utilisés dans ton code ne sont pas des multiples du TimeFrame() utilisé.
A+
C’est quel livre de Alexander Elder ?
Bonjour,
C’est le livre : vivre du trading; version française.
Bonjour,
Je n’ai pas compris ce que tu veux dire par multiple. Peux-tu expliquer davantage ?
Merci
As-tu testé que toutes tes conditions étaient réunies pour ouvrir des positions ?
Pour ouvrir une position acheteuse, est-ce que cet ensemble de conditions est présent ? Si non, il faut les tester une par une et voir celle qui n’est pas valable:
NOT ONMARKET AND (WeeklyC1 OR WeeklyC2) AND WeeklyC3 AND DailyC1 AND DailyC3 AND Close CROSSES OVER Haut
Effectivement, c’est pas un problème de TF().
Comme le dis Nicolas il te faut tester les conditions d’entrées. Tu peux utiliser le fichier joint si tu veux (c’est celui d’origine modifié en indicateur)
Bonjour,
Merci pour la réponse, j’ai compris ce qui ne fonctionne pas. Ce sont les conditions de l’UT courte.
Les conditions des UT supérieure et intermédiaire qui marche bien.