ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests

Suivi de mon algorithme de trading Dax 30

par Alocin » 01 Mai 2016 12:03

Bonjour à tous,

En hommage au travail de Benoist et à la file "Suivi de mon algorithme de trading cac 40" suivi-de-mon-algorithme-de-trading-cac-40-t10826.html je partage le code source de la première version de mon système de trading (du 22/01/2016) journal-de-trading-d-alocin-t10768-10.html#p360430.

Depuis il a bien évolué... Je communiquerai probablement des versions plus récentes (et plus performantes) suivant la participation des membres ;)

Il n'était pas extraordinaire, mais c'est une bonne base pour aider les débutants...





Mon UT c'est 6 secondes.

Spoiler:
Code: Tout sélectionner
// Définition des paramètres du code

// Cumul des positions désactivé
DEFPARAM CumulateOrders = False
// La position est clôturée à 17h30, heure française
DEFPARAM flatafter = 173000 // 17h30

// Indicateurs
RSI14 = RSI[14](close)
cloture = close
//MME20 = ExponentialAverage[20](close)
//MM20 = Average[20](close)
MM50 = Average[50](close)
//MM100 = Average[100](close)
MM200 = Average[200](close)
SupT = SuperTrend[3,10]
pSAR = SAR[0.02,0.02,0.2]
ATR = AverageTrueRange[14](close)
BolH = BollingerUp[20](close)
BolB = BollingerDown[20](close)
Bol = BolH - BolB

// Aucune nouvelle position prise après le chandelier qui clôture à 17h29
HeureLimite = 172900
// L'analyse du marché commence avec le chandelier 6 secondes qui clôture à 8h00
HeureDebut = 090000

// Les journées du 24 et 31 décembre sont exclues car la bourse ferme avant 19h45
IF Month = 12 AND (Day = 24 OR Day = 31) THEN
JourTrading = 0
ELSE
JourTrading = 1
ENDIF

// S'adapter au spread
IF time >= 090000 AND time < 173000 THEN
spread = 1
ELSE
IF time >= 173000 AND time < 220000 THEN
spread = 2
ELSE
IF time >= 220000 AND time < 000000 THEN
spread = 7
ELSE
IF time >= 000000 AND time < 080000 THEN
spread = 7
ELSE
IF time >= 080000 AND time < 090000 THEN
spread = 2
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

// Les variables qui peuvent être adaptées selon ses préférences
RSIAchatH = 67
RSIAchatB = 56 // éviter d'être vers 50
RSIVenteH = 43 // éviter d'être vers 50
RSIVenteB = 30
IF (ATR * 1.75 >= 4) then
SL = ATR * 1.75
ELSE
SL = 4 // Stop Loss mini : 4
ENDIF
TP = ATR * 2.2
TaillePosition = 1
BolMin = 5.3 * ATR // Taille min Bollinger
ATRMin = 0.8 + spread
ATRMax = 5 + spread
BolHMax = BolH - ATR * 1.1
BolBMin = BolB + ATR * 1.1

IF JourTrading = 1 AND time >= HeureDebut AND time < HeureLimite THEN
// Création des ordres d'achat et de vente à découvert si les conditions sont remplies
IF (cloture CROSSES OVER pSAR) THEN // Cours en hausse
IF SHORTONMARKET THEN // Indique si vous avez des positions vendeuses (=courtes) sur le marché
EXITSHORT AT MARKET // Instruction qui clôture une position courte
ENDIF
IF (RSI14 >= RSIAchatB AND RSI14 <= RSIAchatH) AND (cloture >= SupT) AND (cloture <= BolH) AND (Bol >= BolMin) AND (ATR >= ATRMin) AND (ATR <= ATRMax) AND (MM50 >= MM200) AND (cloture <= BolHMax) THEN
BUY TaillePosition CONTRACT AT MARKET // Instruction d'ouverture de position longue
ENDIF
ENDIF

IF (cloture CROSSES UNDER pSAR) THEN // Cours en baisse
IF LONGONMARKET THEN // Indique si vous avez des positions acheteuses (=longues) sur le marché
SELL AT MARKET // Instruction de clôture de position longue
ENDIF
IF (RSI14 >= RSIVenteB AND RSI14 <= RSIVenteH) AND (cloture <= SupT) AND (cloture >= BolB) AND (Bol >= BolMin) AND (ATR >= ATRMin) AND (ATR <= ATRMax) AND (MM50 <= MM200) AND (cloture >= BolBMin) THEN
SELLSHORT TaillePosition CONTRACT AT MARKET // Instruction d'ouverture de position courte
ENDIF
ENDIF
ENDIF


// Définition d'un risque maximal de pertes par position
// en cas d'évolution défavorable du prix de l'instrument
SET STOP pLOSS SL
SET TARGET pPROFIT TP

Re: Suivi de mon algorithme de trading Dax 30

par Fatah » 01 Mai 2016 12:25

Salut !

As-tu backtesté cela sur une période plus longue ? Par contre 6 secondes, c'est surprenant ;)

Souvent les gens utilisent le 15 minutes ;)

Re: Suivi de mon algorithme de trading Dax 30

par Alocin » 01 Mai 2016 12:57

En 6 secondes on ne peut pas tester sur plus de 10 jours (c'est déjà 100 000 bougies...).

6 secondes, c'est pour faire l'équivalent de plus ou moins 21 ticks (comme on ne peut pas travailler en ticks dans le système de trading ProRealTime).

Un "bug" (si on peut dire) à corriger, il faut éviter d'imposer une taille de Bollinger avec un ATR, car c'est 2 indices de volatilité... :hein: Vous pouvez mettre par exemple :

Code: Tout sélectionner
BolMin = 12 // Taille min Bollinger en POINTS


Et vous passerez dans mon exemple de 46 € à 54.50 €...

Re: Suivi de mon algorithme de trading Dax 30

par Fatah » 01 Mai 2016 19:03

Pourquoi pas du 15 min ??

Re: Suivi de mon algorithme de trading Dax 30

par Alocin » 01 Mai 2016 19:24

Pour faire du scalping ;-)
En plus, les calculs sont réévalués à la clôture de chaque bougie... Donc 15 min c'est une éternité pour moi.

L'objectif étant de gagner peu de points, mais souvent, de manière la moins risquée (temps d'exposition limité), avec petit effet de levier, etc.

Re: Suivi de mon algorithme de trading Dax 30

par Fatah » 02 Mai 2016 20:28

ok je disais ça car souvent le trading auto est utilisé en 15 min pour faire de l'intraday

Re: Suivi de mon algorithme de trading Dax 30

par Alocin » 02 Mai 2016 22:29

En effet, sur http://www.prorealcode.com/ par exemple c'est souvent sur des périodes plus longues.

Moi j'aime bien les courtes, car cela offre plein d'occasions, donc on peut être très sélectif sur les entrées.

Je le suis un peu trop même : dans mon exemple seulement 10 trades sur 10 jours... ;-)

Une dernier conseil d'optimisation pour la route, pour l'ATR minimum, 1 point c'est suffisant :

Code: Tout sélectionner
ATRMin = spread

Re: Suivi de mon algorithme de trading Dax 30

par Alocin » 04 Mai 2016 10:20

Bonjour à tous,

La version du 25/01/2016 dont j'ai publié les résultats le 29/01/2016 (il y a eu d'autres versions entre le 25 et le 29) journal-de-trading-d-alocin-t10768-10.html#p364096





J'avais notamment rajouté la coupure après x euros de pertes ou de gains, et une gestion plus dynamique de la quotité/SL/TP en fonction de la prise de risque :

Spoiler:
Code: Tout sélectionner
// Cumul des positions désactivé
DEFPARAM CumulateOrders = False
// La position est clôturée à 17h45, heure française
DEFPARAM flatafter=174500 // 17h45

// Indicateurs
RSI14 = RSI[14](close)
cloture = close
MME20 = ExponentialAverage[20](close)
MM20 = Average[20](close)
MM50 = Average[50](close)
MM100 = Average[100](close)
MM200 = Average[200](close)
SupT = SuperTrend[3,10]
pSAR = SAR[0.02,0.02,0.2]
ATR = AverageTrueRange[14](close)
BolH = BollingerUp[20](close)
BolB = BollingerDown[20](close)
Bol = BolH - BolB

// Aucune nouvelle position prise après le chandelier qui clôture à 17h29
HeureLimite = 173000
// L'analyse du marché commence avec le chandelier 6 secondes qui clôture à 8h00
HeureDebut = 080000

// Les journées du 24 et 31 décembre sont exclues car la bourse ferme avant 19h45
IF Month = 12 AND (Day = 24 OR Day = 31) THEN
JourTrading = 0
ELSE
JourTrading = 1
ENDIF

// S'adapter au spread
IF time >= 090000 AND time < 173000 THEN
spread = 1
ELSE
IF time >= 173000 AND time < 220000 THEN
spread = 2
ELSE
IF time >= 220000 AND time < 000000 THEN
spread = 7
ELSE
IF time >= 000000 AND time < 080000 THEN
spread = 7
ELSE
IF time >= 080000 AND time < 090000 THEN
spread = 2
ELSE
spread = 1 // Sécurité erreur prog
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

// Les variables qui peuvent être adaptées selon ses préférences
RSIAchatH = 67 //
RSIAchatB = 54 // éviter d'être vers 50
RSIVenteH = 43 // éviter d'être vers 50
RSIVenteB = 30 //
BolMin = 12 // Taille min Bollinger en POINTS
ATRMin = spread // spread
ATRMax = 5 + spread // 5 + spread
BolHMax = BolH - ATR * 1.1 //
BolBMin = BolB + ATR * 1.1 //
gainsMax = 160 // en euros
pertesMax = -80 // en euros

IF STRATEGYPROFIT < pertesMax THEN
QUIT
ELSE
IF STRATEGYPROFIT > gainsMax THEN
QUIT
ENDIF
ENDIF

IF (JourTrading = 1) AND (time >= HeureDebut) AND (time < HeureLimite) THEN
IF (cloture CROSSES OVER pSAR) THEN // Cours en hausse
IF SHORTONMARKET THEN // Indique si vous avez des positions vendeuses (=courtes) sur le marché
EXITSHORT AT MARKET // Instruction qui clôture une position courte
ENDIF
IF (RSI14 >= RSIAchatB) AND (RSI14 <= RSIAchatH) AND (cloture >= SupT) AND (cloture <= BolH) AND (Bol >= BolMin) AND (ATR >= ATRMin) AND (ATR <= ATRMax) AND (MM50 > MM200) AND (cloture <= BolHMax) THEN // --- ACHAT ---
// S'adapter aux risques :
// --- ACHAT : Palier 1 ---
IF (MM100 > MM200) AND (MM50 > MM100) AND (MM50 > MM200) AND (MM20 >= MM50) AND (MM20 > MM100) AND (MM20 > MM200) AND (MME20 >= MM20) THEN
TaillePosition = 1
SL = ATR * 1.75 //
TP = ATR * 2.00 //
ELSE // --- ACHAT : Palier 2 ---
IF (MM100 > MM200) AND (MM50 > MM100) AND (MM50 > MM200) AND (MM20 >= MM50) AND (MM20 > MM100) AND (MM20 > MM200) THEN
TaillePosition = 1
SL = ATR * 1.65 //
TP = ATR * 1.95 //
ELSE // --- ACHAT : Palier 3 ---
IF (MM100 > MM200) AND (MM50 > MM100) AND (MM50 > MM200) AND (MM20 > MM100) AND (MM20 > MM200) THEN
TaillePosition = 1
SL = ATR * 1.55 //
TP = ATR * 1.90 //
ELSE // --- ACHAT : Palier 4 ---
IF (MM100 > MM200) AND (MM50 > MM100) AND (MM50 > MM200) AND (MM20 > MM200) THEN
TaillePosition = 1
SL = ATR * 1.45 //
TP = ATR * 1.85 //
ELSE // --- ACHAT : Palier 5 ---
IF (MM100 > MM200) AND (MM50 > MM100) AND (MM50 > MM200) THEN
TaillePosition = 1
SL = ATR * 1.35 //
TP = ATR * 1.80 //
ELSE // Sécurité erreur prog
// Paramètres par défaut
TaillePosition = 1
SL = ATR * 1.75 //
TP = ATR * 2.20 //
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

BUY TaillePosition CONTRACT AT MARKET // Instruction d'ouverture de position longue
ENDIF
ENDIF

IF (cloture CROSSES UNDER pSAR) THEN // Cours en baisse
IF LONGONMARKET THEN // Indique si vous avez des positions acheteuses (=longues) sur le marché
SELL AT MARKET // Instruction de clôture de position longue
ENDIF
IF (RSI14 >= RSIVenteB) AND (RSI14 <= RSIVenteH) AND (cloture <= SupT) AND (cloture >= BolB) AND (Bol >= BolMin) AND (ATR >= ATRMin) AND (ATR <= ATRMax) AND (MM50 < MM200) AND (cloture >= BolBMin) THEN // --- VENTE ---
// S'adapter aux risques :
// --- VENTE : Palier 1 ---
IF (MM100 < MM200) AND (MM50 < MM100) AND (MM50 < MM200) AND (MM20 <= MM50) AND (MM20 < MM100) AND (MM20 < MM200) AND (MME20 <= MM20) THEN
TaillePosition = 1
SL = ATR * 1.75 //
TP = ATR * 2.00 //
ELSE // --- VENTE : Palier 2 ---
IF (MM100 < MM200) AND (MM50 < MM100) AND (MM50 < MM200) AND (MM20 <= MM50) AND (MM20 < MM100) AND (MM20 < MM200) THEN
TaillePosition = 1
SL = ATR * 1.65 //
TP = ATR * 1.95 //
ELSE // --- VENTE : Palier 3 ---
IF (MM100 < MM200) AND (MM50 < MM100) AND (MM50 < MM200) AND (MM20 < MM100) AND (MM20 < MM200) THEN
TaillePosition = 1
SL = ATR * 1.55 //
TP = ATR * 1.90 //
ELSE // --- VENTE : Palier 4 ---
IF (MM100 < MM200) AND (MM50 < MM100) AND (MM50 < MM200) AND (MM20 < MM200) THEN
TaillePosition = 1
SL = ATR * 1.45 //
TP = ATR * 1.85 //
ELSE // --- VENTE : Palier 5 ---
IF (MM100 < MM200) AND (MM50 < MM100) AND (MM50 < MM200) THEN
TaillePosition = 1
SL = ATR * 1.35 //
TP = ATR * 1.80 //
ELSE // Sécurité erreur prog
// Paramètres par défaut
TaillePosition = 1
SL = ATR * 1.75 //
TP = ATR * 2.20 //
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF

SELLSHORT TaillePosition CONTRACT AT MARKET // Instruction d'ouverture de position courte
ENDIF
ENDIF
ENDIF

IF (SL < 4) then
SL = 4 // Stop Loss mini : 4
ENDIF

// Définition d'un risque maximal de pertes par position
// en cas d'évolution défavorable du prix de l'instrument
SET STOP pLOSS SL
SET TARGET pPROFIT TP

Re: Suivi de mon algorithme de trading Dax 30

par Mat » 04 Mai 2016 11:32

Merci pour ces partages. As-tu laissé tourné un même code sur une période longue? Car dans la mesure où tes backtests ne peuvent porter que sur quelques jours, et comme apparemment tu changes ton code très fréquemment pour l'optimiser, tu ne peux pas avoir de recul véritable sur sa performance. Il faudrait en laisser tourner un en démo sans le modifier pendant plus d'un mois ou 2 pour se faire une meilleure idée.

Re: Suivi de mon algorithme de trading Dax 30

par Alocin » 04 Mai 2016 12:37

Je commence à le faire depuis peu : sur mes dernières versions uniquement (j'ai une version sur presque 1 mois de test actuellement).

Pour les 2 premiers codes sources que j'ai donné, j'ai vérifié qu'ils fonctionnaient à l'époque, mais surtout que c'était encore le cas sur les 10 derniers jours (ce qui n'est le cas que pour environ 10% de mes versions).

Mais ce n'est pas une période suffisante pour les utiliser sans surveillance et améliorations : mes exemples sont là pour aider les débutants afin de commencer leur propre système de trading et/ou à améliorer mes exemples en simulation (voire à 5€ le point maxi pour les plus courageux).

Articles en relation
Suivi de mon algorithme de trading cac 40
Fichier(s) joint(s) par Benoist » 22 Nov 2015 21:43 (93 Réponses)
Suivi de mon algo de trading sur le Dax
Fichier(s) joint(s) par Gavrinis » 19 Mai 2016 18:30 (12 Réponses)
Algorithme prévisionnel
par Ernesto » 10 Fév 2015 18:46 (11 Réponses)
Développement algorithme HFT
par Epitaf » 03 Oct 2016 21:57 (9 Réponses)
Idée d'algorithme ultra rapide
par winacash86 » 08 Mai 2015 15:30 (2 Réponses)
utilisation algorithme sur plateforme cmcmarket ?
par Benoist » 18 Déc 2016 04:13 (7 Réponses)
Trading Automatique : 20% par an
par Benoist » 27 Jan 2015 11:08 (0 Réponses)
Social Trading
par Benoist » 12 Sep 2017 23:00 (1 Réponses)
Merite, justification et trading automatique
par Euraed » 22 Jan 2015 14:34 (22 Réponses)
Critères de qualité d'un système de trading
par bobbyO » 15 Sep 2015 14:53 (6 Réponses)

ProRealTime

Alors partagez-le 5 fois c'est bon pour la santé