Bonjour,
Je vous partage mon premier système. Soyez indulgent, je ne suis ni trader ni programmeur 😉
C’est un système très simple sur IG DAX 5€ qui fonctionne en réel depuis début mai sans surprise par rapport au backtest, car je suis sur UT 1M donc peu de chance d’avoir SL et TP sur la même bougie. Le programme tourne simultanément sur mes comptes démo et réel, et à part un slippage de temps en temps, je n’ai pas de différence. (spread à 1)
En gros je short (j’ai le même set up en version longue) un surachat lorsque les prix sont en baisse par rapport à la cloture de la veille et l’ouverture du jour.
Parmi ce que je souhaite améliorer, je souhaite filtrer les retournements durable de tendance à la hausse mais je n’ai pas trouvé d’indicateur efficace, en tout cas pas pertinent avec les réglages standard. Le multitimeframe serait probablement une solution, ou paramétrer un indicateur sur une UT plus longue.
Je filtre les retournements haussiers brutaux en contrôlant la pente d’une MM20 mais là aussi il doit y avoir mieux à faire.
J’ai tenté d’utiliser les divergence grâce au code que Nicolas m’a donné sur un autre post sans succès.
Bref j’ai fait le gros oeuvre, mais j’ai besoin d’infos des spécialistes pour les finitions 😉
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
DEFPARAM Flatbefore = 093000
DEFPARAM Flatafter = 173500
DEFPARAM Preloadbars = 600
// Aucune nouvelle position prise après le chandelier qui clôture à 17h
HeureLimite = 171500
// Conditions pour ouvrir une position vendeuse
indicator1 = RSI[14](close)
c1 = indicator1[1] > 72 AND (indicator1[1]-indicator1)>0 AND indicator1 > 62
IF TIME = 090000 THEN
ouverture = close
ENDIF
IF TIME = 173500 THEN
cloture = close
ENDIF
//Ecart à l'ouverture
c2 = close < ouverture
//Ecart par rapport à la veille
c3 = close < cloture
//Filtrage tendance fortement haussière
indicator2 = Average[20](close)
c4= (indicator2 - indicator2[1])<2.5
//Prise de position
IF Time <= HeureLimite AND c1 AND c2 AND c3 AND C4 AND NOT ONMARKET THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
//SL et TP
SET TARGET pPROFIT 15
SET STOP pLOSS 20
[attachment file=9272]
Le break even est à 57,14 % ce qui me laisse entre 17 et 18 % de marge.
Merci pour vos commentaires.
Bon Dimanche.
Bonjour Aston et merci pour le partage.
C’est en effet fonctionnel ! Bravo, c’est aussi bien en version “achat”?
Par contre, tu peux avoir plusieurs ordres le même jour si le premier a atteint son TP, c’est voulu ?
En version achat cela fonctionne bien aussi mais j’ai moins de signaux compte tenu de l’historique limité à octobre 2015 en UT1 et une période plutôt baissière (je sépare toujours mes set up short et long en deux systèmes différents).
Par contre je n’avais pas pensé à limiter à 1 trade par jour. J’ai moins de trade, mais + de 80 % de positions gagnantes et un ration à 3,24. Merci pour la suggestion !
Cela vient certainement du problème que je cherche à traiter, qui est d’identifier les situations de retournement de tendance en intraday. J’ai parfois 2 ou 3 trades gagnants tant que la tendance baissière dure, puis je peux avoir 1 ou 2 trades perdants lorsque le marché remonte vers le cours d’ouverture (après la condition de short n’est plus remplie close<ouverture).
As-tu une idée pour que je puisse conserver plusieurs ordres par jours, en filtrant les retournements “définitifs” de tendance, car limiter à 1 trade fait “perdre” 30 trades gagnants sur la durée du backtest ?
Merci
Avec de simples moyennes mobiles (1 longue et 1 plus courte) dessus/dessous, tu pourrai sans doute limiter les successions de trades perdants inutiles après la fermeture du premier gagnant.
J’ai essayé mais ce n’est pas très efficace, notamment sur le premier trade perdant, les MM sont en retard.
J’ai testé MACD et quelques autres indicateurs aussi mais rien de très pertinents. Je pense qu’ils sont trop réactifs en UT1, alors qu’il faut détecter un retournement de tendance plus “structurel”.
Bonjour Aston, félicitation pour ton travail.
Je me lance dans une suggestion peut être inutile avec ce TF… Pour rentrer avec un meilleur timing mais aussi éviter une poussée haussière, pourquoi ne pas attendre que le RSI croisse à la baisse un niveau (70) ?
@Pascal, j’ai déjà testé cette version mais c’est moins bien, c’est aussi pour cela que la position n’est pas prise si le RSI < 62, sinon le potentiel de repli est déjà trop entamé.
Désolé je n’avais pas décrypté ton code, je débute dans la programmation !
D’ ailleurs si tu as un moment, pourrais tu m’aider à le décrypter ? Et je pourrais alors partager ton aide sur la file pour les débutants que je viens d’ouvrir.
Que fait le [1] dans les deux exemples ?
indicator1 = RSI[14](close)
c1 = indicator1[1] > 72 AND (indicator1[1]-indicator1)>0 AND indicator1 > 62
indicator2 = Average[20](close)
c4= (indicator2 - indicator2[1])<2.5
Merci de ton aide
Dans ce cas pourquoi ne pas fermer le premier trade avec un trailing plutôt que d’utiliser un profit fixe en points. Si plusieurs trades gagnants peuvent survenir dans tes statistiques alors peut-être qu’un seul Trade qui trail le profit pourrait les remplacer. Tu peux utiliser les fonctions de mes 2 derniers articles pour ça.
@Pascal, le chiffre entre crochet permet de récupérer la valeur d’un indicateur sur la nième bougie précédente [n]. Tu devrais commencer si ce n’est déjà fait à lire les manuels de programmation PRT, cela t’aidera bcp.
@Nicolas, j’ai testé avec un suiveur dont j’avais posté le code ici pour mémoire, mais ce n’est pas si efficace que cela en intraday. La stratégie a besoin d’un SL à 20 pour que le mouvement de baisse se forme, ce qui veut dire que pour qu’un trailing donne plus de 20 pts de profit, il faut que je gagne au moins 40 pts avant de reperdre la valeur du trailing. Même avec un pas ou en réduisant la valeur du trailing en cours de trade ça ne donne pas d’aussi bon résultat, je suis donc revenu à un TP.
Jamais évident de capter une tendance longue sans accroître son drawdown. Je trouve à l’inverse qu’on peut avoir pour objectif de limiter son drawdown tout en maintenant un % (très) élevé de trades gagnants.
Avec un filtre MM10 au lieu de 20, on améliore les deux. Drawdown + % de trades gagnants.
J’ai testé d’autres indicateurs de tendance mais sans amélioration notable. Je verrai avec d’autres MM.
Aurais-tu la possibilité de poster le code achat ?
@Sofitech, tu as mis quoi comme pente maxi pour ta MM10 ?
Ci dessous le code “Long” limité à 1 trade par jour. Ca permet de remonter le TP au même niveau que le SL. 68 % de trades gagnants et ration à plus de 2
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
DEFPARAM Flatbefore = 093000
DEFPARAM Flatafter = 173500
// Aucune nouvelle position prise après le chandelier qui clôture à 17h15
HeureLimite = 171500
// Conditions pour ouvrir une position acheteuse
indicator1 = RSI[14](close)
c1 = indicator1[1]< 26 AND (indicator1[1]-indicator1)< 0 AND indicator1 < 32
//Récupération clôture et ouverture
IF TIME = 090000 THEN
ouverture = close
UnTradeParJour = 0
ENDIF
IF TIME = 173500 THEN
cloture = close
ENDIF
//Ecart à l'ouverture
c2 = close > ouverture
//Ecart par rapport à la veille
c3 = close > cloture
//Filtre retournement
indicator2 = Average[20](close)
c4= (indicator2[1]-indicator2)<2.5
//Prise de position
IF Time <= HeureLimite AND c1 AND c2 AND c3 AND c4 AND UnTradeParJour = 0 AND NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
UnTradeParJour = 1
ENDIF
// SL et TP
SET TARGET PPROFIT 20
SET STOP PLOSS 20
@Astonaddict.
Merci pour le code achat.
Pour répondre à ta questions, j’ai simplement modifier la partie filtre de tendance comme ceci :
//Filtrage tendance fortement haussière
indicator2 = Average[10](close)
c4= (indicator2 – indicator2[1])<2.5
J’ai fait d’autres essais avec des indicateurs de tendances, j’en ferais certainement d’autres. Je posterai si je trouve des pistes pour améliorer le système.
Sur le système de vente à découvert, on peut avoir donc une MM10 en filtrage (j’ai essayé sans meilleurs résultats d’autres filtres) et ajouter un MM tel que celui décrit sur le blog.
Les résultats me semblent intéressants… et non biaisés car en M1, on ne sort que fort rarement en 1ère bougie (les résultats le confirment d’ailleurs).
L’approche est bonne. Il y a certainement des pistes à explorer pour améliorer.
Ci-dessous le code :
// Conditions pour ouvrir une position acheteuse
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
DEFPARAM Flatbefore = 093000
DEFPARAM Flatafter = 173500
DEFPARAM Preloadbars = 600
REM Money Management
Capital = 10000
Risk = 0.01
StopLoss = 10 // Could be our variable X
REM Calculate contracts
equity = Capital + StrategyProfit
maxrisk = round(equity*Risk)
PositionSize = abs(round((maxrisk/StopLoss)/PointValue)*pipsize)
// Aucune nouvelle position prise après le chandelier qui clôture à 17h
HeureLimite = 171500
// Conditions pour ouvrir une position vendeuse
indicator1 = RSI[14](close)
c1 = indicator1[1] > 72 AND (indicator1[1]-indicator1)>0 AND indicator1 > 62
IF TIME = 090000 THEN
ouverture = close
ENDIF
IF TIME = 173500 THEN
cloture = close
ENDIF
//Ecart à l'ouverture
c2 = close < ouverture
//Ecart par rapport à la veille
c3 = close < cloture
//Filtrage tendance fortement haussière
indicator2 = Average[10](close)
c4= (indicator2 - indicator2[1])<2.5
//Prise de position
IF Time <= HeureLimite AND c1 AND c2 AND c3 AND C4 AND NOT ONMARKET THEN
SELLSHORT PositionSize CONTRACTS AT MARKET
ENDIF
//SL et TP
SET TARGET pPROFIT 15
SET STOP pLOSS 15/1.5
Ok
A quoi sert le “/1.5” dans SET STOP pLOSS 15/1.5, je ne connais pas cette fonction ?