Bonjour,
Veuillez trouver ci-dessous une stratégie simple Bollinger contre moyenne mobile.
Fonctionne bien sur EURUSD 5MIN.
J’ai besoin d’aide pour améliorer cette stratégie.
// Définition des paramètres du code
DEFPARAM CumulateOrders = False
// Cumul des positions désactivé
levier = 1.5
n = 2*levier
// Conditions pour ouvrir une position acheteuse
indicator1 = close
indicator2 = Average[20](close)
c1 = (indicator1 < indicator2)
indicator3 = close
indicator4 = BollingerDown[20](close)
c2 = (indicator3 CROSSES OVER indicator4)
IF c1 AND c2 THEN
BUY n CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position acheteuse
indicator5 = close
indicator6 = Average[20](close)
c3 = (indicator5 > indicator6)
indicator7 = close
indicator8 = BollingerUp[20](close)
c4 = (indicator7 > indicator8)
IF c3 AND c4 THEN
SELL AT MARKET
ENDIF
// Conditions pour ouvrir une position en vente à découvert
indicator9 = close
indicator10 = Average[20](close)
c5 = (indicator9 > indicator10)
indicator11 = close
indicator12 = BollingerUp[20](close)
c6 = (indicator11 CROSSES UNDER indicator12)
IF c5 AND c6 THEN
SELLSHORT n CONTRACT AT MARKET
ENDIF
// Conditions pour fermer une position en vente à découvert
indicator13 = close
indicator14 = Average[20](close)
c7 = (indicator13 < indicator14)
indicator15 = BollingerUp[20](close)
indicator16 = close
c8 = (indicator15 CROSSES UNDER indicator16)
IF c7 AND c8 THEN
EXITSHORT AT MARKET
ENDIF
// Stops et objectifs
SET STOP %LOSS 1
Bonjour,
Je peux me pencher sur ta stratégie, laisse-moi une petite semaine car je suis très occupé jusqu’à mardi.
A bientôt 😉
Bonjour cryosdsl, j’ai volontairement basculé ton code de la librairie vers le forum pour pouvoir en discuter.
Les tests C1 et C3 ne sont pas utiles, car tu tests si le close est supérieur ou inférieur à une moyenne mobile 20 périodes, hors dans les conditions C2 et C4, tu testes aussi cette condition sans t’en rendre compte puisque tu vérifies si la condition est aussi juste (supérieure/inférieure) aux bandes supérieures ou inférieures de Bollinger sur 20 périodes. Les bandes de Bollinger sont elles-mêmes construites autour d’une moyenne mobile 20 périodes. Donc si tu testes être supérieur à une bande haute de Bollinger 20, c’est que tu es déjà forcément au dessus d’une MM20.
Ce que tu fais dans cette stratégie est une observation de l’écartement du prix vis à vis de sa moyenne historique en vérifiant qu’il soit situé à plus ou moins 2 écart type de celle-ci. C’est une bonne observation et souvent utilisé dans les stratégies dîtes de “mean reversion”, puisque le prix revient toujours vers sa moyenne. Le problème est qu’un signal donné sur un écart type d’une moyenne filante n’est déjà plus vrai à la période qui suit, puisque le prix bouge, sa moyenne également.
Bonjour
Je pense que vous avez utilisé l’assistant de création de code.
Je regarde aussi en ce moment les stratégies sur les bandes de Bollinger.
La “touchette” de la MM20 se code plus dans le sens.
Sinon sur des unités de temps supérieures, les cours peuvent toucher la MM20 sans la dépasser et la position n’est pas cloturée.
Pour le stop, la logique serait de le placer sous le point bas hors Bollinger (point haut des 20 dernières bougies par exemple) , j’ai le code d’un compteur de détection précise que je dois retrouver
// Conditions pour fermer une position en vente à découvert
IF shortonmarket THEN
exitshort AT highest[20](high) +20 STOP
EXITSHORT AT(Average[20](close)+1) limit
ENDIF
// Conditions pour fermer une position acheteuse
IF longonmarket THEN
sell AT Lowest[20](low) -20 stop
sell AT (Average[20](close)-1) limit
ENDIF
De mon coté je regardais plutot quelque chose du genre
Tendance : Prix >MM200
Vérification
-des points bas de plus en plus hauts pour longs
-des hauts de plus en bas pour courts
mais ca ne donne pas grand chose….
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
//compteurs et detection bas haut
If close crosses over BollingerDown[20](close) then
Bas1 = Bas0
Bas0 = Lowest [20](low)
endif
If close crosses under BollingerUp[20](close) then
Haut1 = haut0
Haut0 = Highest [20](High)
endif
// Conditions pour ouvrir une position acheteuse
IF not longonmarket AND close crosses over BollingerDown[20](close) AND bas0>bas1 and low>exponentialaverage[200] THEN
BUY 2 CONTRACT AT BollingerDown[20](close) stop
ENDIF
// Conditions pour fermer une position acheteuse
IF longonmarket THEN
sell AT Lowest[20](low) -20 stop
sell AT (Average[20](close)-1) limit
ENDIF
// Conditions pour ouvrir une position en vente à découvert
IF not shortonmarket AND close crosses under BollingerUp[20](close) and haut0<haut1 and high<exponentialaverage[200] THEN
SELLSHORT 2 CONTRACT AT BollingerUp[20](close) stop
ENDIF
// Conditions pour fermer une position en vente à découvert
IF shortonmarket THEN
exitshort AT highest[20](high) +20 STOP
EXITSHORT AT(Average[20](close)+1) limit
ENDIF
// Stops et objectifs