Stratégie quantitative de croisement de moyenne mobile avec stop loss et double profit


Date de création: 2023-11-14 16:04:33 Dernière modification: 2023-11-14 16:04:33
Copier: 0 Nombre de clics: 427
1
Suivre
1237
Abonnés

Stratégie quantitative de croisement de moyenne mobile avec stop loss et double profit

Aperçu

Cette stratégie utilise des techniques simples de croisement de moyennes mobiles et de doubles arrêts pour contrôler les risques et améliorer la probabilité de gagner. La stratégie est adaptée aux transactions à court et moyen terme et permet de saisir les opportunités lorsque la tendance change.

Principe de stratégie

Cette stratégie est basée sur un croisement des EMA et des WMA pour juger de la tendance du marché. Lorsque l’EMA est en WMA, faites plus; lorsque l’EMA est en WMA, faites moins.

Chaque fois qu’une position est ouverte, la stratégie définit deux niveaux d’arrêt. Le premier niveau d’arrêt est fixé au prix d’ouverture de la position + 20 points, le second niveau d’arrêt est fixé au prix d’ouverture de la position + 40 points.

Lorsque le prix atteint le premier niveau d’arrêt, la position est levée d’une demi-position. La position restante est maintenue, poursuivie pour le deuxième niveau d’arrêt ou est stoppée.

Chaque transaction a donc trois résultats:

  1. Le prix a déclenché un stop loss, une perte directe de 2%.

  2. Le prix a déclenché un premier stop, a égalé la moitié de la position et a bloqué un profit de 1%, puis a continué à fonctionner jusqu’à ce qu’il soit bloqué, finalement en équilibre de liquidation, à zéro profit.

  3. Le prix continue à fonctionner après avoir déclenché le premier arrêt, puis déclenche le deuxième arrêt, pour finalement obtenir un profit de 1% + 2% = 3%.

Analyse des avantages

Le plus grand avantage de ce type de stratégie est que vous pouvez contrôler les risques et éviter de grandes pertes. Lorsque le marché est défavorable, le stop-loss peut limiter les pertes à 2%. Lorsque le marché est en bon état, deux niveaux de stop-loss peuvent obtenir des gains plus importants.

Comparée à la stratégie de stop-loss simple, cette stratégie a trois résultats: perte, profit et non-perte, réduisant la probabilité de stop-loss. Même en cas de stop-loss, la perte maximale est contrôlée à 2%. Comparée à la stratégie de stop-loss traditionnelle, cette stratégie de stop-loss double réduit considérablement le DD et augmente le taux de victoire.

Un autre avantage est la simplicité d’utilisation. Les EMA et WMA sont des indicateurs bien connus et faciles à comprendre. La logique de stop-loss est très claire et facile à surveiller.

Analyse des risques

Bien que cette stratégie présente certains avantages, elle comporte des risques qui méritent d’être pris en compte.

Tout d’abord, l’EMA et la WMA, en tant qu’indicateurs de la moyenne, ont une faible capacité à identifier les tendances choquantes. Lorsqu’une tendance n’est pas évidente, il peut y avoir plus de faux signaux, ce qui entraîne des transactions trop fréquentes.

Deuxièmement, les points de stop-loss fixes peuvent ne pas correspondre aux fluctuations du marché. Lorsque les fluctuations sont importantes, les stop-loss peuvent être franchies et ne pas jouer un rôle protecteur.

Enfin, la stratégie ne peut pas répondre à des événements imprévus, il y a un risque d’être arbitragé. Lors d’un événement d’actualité majeur, le marché peut avoir un saut en flèche et franchir directement la ligne d’arrêt de la suspension, ce qui entraîne des pertes importantes.

Direction d’optimisation

La stratégie peut être optimisée de plusieurs façons:

  1. Amélioration du signal d’entrée. Vous pouvez essayer des indices de moyenne ou de tendance meilleurs que les EMA et les WMA pour améliorer la qualité du signal.

  2. Le stop loss peut être ajusté en temps réel en fonction de l’ATR, du stop loss mobile, etc., afin de pouvoir suivre le marché.

  3. Ajout de conditions de filtrage. Vous pouvez ajouter un volume de transactions ou une confirmation d’un sous-indicateur avant la fourchette, pour éviter d’être piégé. Vous pouvez également choisir de négocier ou non en fonction du calendrier des événements majeurs.

  4. Optimisation de la gestion des positions. Vous pouvez optimiser la taille de la position spécifique pour chaque transaction selon les principes de gestion des fonds.

Résumer

Cette stratégie est une stratégie de suivi de tendance simple et pratique dans l’ensemble. Elle utilise les signaux de négociation EMA et WMA et contrôle les risques en utilisant une technique de double arrêt. Elle présente un avantage par rapport aux stratégies traditionnelles, avec une probabilité de gain plus élevée et un risque plus faible.

Code source de la stratégie
/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("FS ATR & PS (MA)", overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Time Period
start_year   = input(title='Start year'   ,defval=2019)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_hour   = input(title='Start hour '  ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time     = input(title='set end time?',defval=false)
end_year     = input(title='end year'     ,defval=2019)
end_month    = input(title='end month'    ,defval=12)
end_day      = input(title='end day'      ,defval=31)
end_hour     = input(title='end hour'     ,defval=23)
end_minute   = input(title='end minute'   ,defval=59)

// MA
ema_period   = input(title='EMA period',defval=10)
wma_period   = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)

// Entry Condition
longCondition  = 
 crossover(ema,wma) and Buy and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
shortCondition = 
 crossunder(ema,wma) and Sell and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick

long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + c : long_profit_level1  [1]
long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 

// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size  = 1

// Strategy
if longCondition
    strategy.entry("Buy"  , strategy.long, qty=size)
    strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
    strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
    
if shortCondition
    strategy.entry("Sell" , strategy.short, qty=size)
    strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
    strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
    
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level    , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level    , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level   , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level   , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)