Stratégie de suivi de tendance du canal à moyenne mobile triple


Date de création: 2023-11-06 16:58:57 Dernière modification: 2023-11-06 16:58:57
Copier: 0 Nombre de clics: 746
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance du canal à moyenne mobile triple

Le film a été tourné en deux temps.

La stratégie utilise une combinaison de trois moyennes mobiles pour déterminer la direction de la tendance en fonction de la relation séquentielle entre les moyennes mobiles et permettre le suivi de la tendance. Lorsque les moyennes mobiles rapides, moyennes mobiles et moyennes mobiles sont rangées, faites plus; lorsque les moyennes mobiles lentes, moyennes mobiles et moyennes mobiles sont rangées, faites moins.

Le principe de stratégie

La stratégie utilise trois moyennes mobiles de différentes périodes: les moyennes mobiles rapides, les moyennes mobiles moyennes et les moyennes mobiles lentes.

Conditions d’entrée :

  1. Faire plus: lorsque la moyenne mobile rapide est supérieure à la moyenne mobile moyenne et que la moyenne mobile lente est supérieure à la moyenne mobile rapide, et que l’on considère que la tendance est à la hausse, faire plus.
  2. Faire un short: lorsque la moyenne mobile lente est inférieure à la moyenne mobile moyenne et que la moyenne mobile rapide est inférieure à la moyenne mobile rapide, le cours est considéré comme étant en baisse et le short est fait.

Conditions de jeu:

  1. Les moyennes mobiles apparaissent: les trois moyennes mobiles se déplacent dans l’ordre inverse et se stabilisent.
  2. Stop loss: définition d’un point de stop loss fixe, par exemple un stop loss de 12% et un stop loss de 1% après avoir atteint le prix d’arrêt ou de stop loss.

La stratégie est simple et directe, elle utilise trois moyennes mobiles pour déterminer la direction de la tendance du marché et permet de suivre la tendance des transactions pour les marchés à forte tendance.

L’analyse des avantages

  • L’utilisation de trois moyennes mobiles pour juger des tendances, filtrer le bruit du marché et identifier la direction de la tendance.
  • L’utilisation de moyennes mobiles à différentes périodes permet de déterminer plus précisément le point de basculement de la tendance.
  • Le risque de fonds est géré par une combinaison d’indicateurs de moyenne mobile et de stop-loss fixe.
  • Les stratégies sont simples, intuitives et faciles à comprendre.
  • Il est possible d’optimiser les paramètres de la moyenne mobile pour s’adapter à différentes périodes.

Risques et améliorations

  • Les moyennes mobiles peuvent générer plus d’erreurs de jugement, entraînant des pertes inutiles, dans des conditions cycliques majeures.
  • L’ajout d’autres indicateurs ou conditions de filtrage peut être envisagé pour améliorer le taux de profit.
  • La combinaison de paramètres cycliques des moyennes mobiles peut être optimisée pour s’adapter à des conditions de marché plus larges.
  • Les indicateurs de la tendance et de la faiblesse peuvent être combinés pour éviter de suivre la baisse.
  • Il est possible d’ajouter un stop-loss automatique pour éviter que les pertes ne s’accroissent.

Résumé

Les avantages de la stratégie sont qu’elle est facile à mettre en œuvre et qu’elle peut être adaptée à différentes conditions cycliques en ajustant les paramètres de la période de la moyenne mobile. Cependant, il existe un certain risque d’erreur de jugement, qui peut être optimisé en ajoutant d’autres indicateurs ou conditions pour réduire les pertes inutiles et améliorer la rentabilité de la stratégie.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Jompatan

//@version=5
strategy('Strategy Triple Moving Average', overlay=true, initial_capital = 1000, commission_value=0.04, max_labels_count=200)

//INPUTS
mov_ave = input.string(defval="EMA", title='Moving Average type:', options= ["EMA", "SMA"])

period_1 = input.int(9,  title='Period 1', inline="1", group= "============== Moving Average Inputs ==============")
period_2 = input.int(21, title='Period 2', inline="2", group= "============== Moving Average Inputs ==============")
period_3 = input.int(50, title='Period 3', inline="3", group= "============== Moving Average Inputs ==============")

source_1 = input.source(close, title='Source 1', inline="1", group= "============== Moving Average Inputs ==============")
source_2 = input.source(close, title='Source 2', inline="2", group= "============== Moving Average Inputs ==============")
source_3 = input.source(close, title='Source 3', inline="3", group= "============== Moving Average Inputs ==============")


//EXIT CONDITIONS
exit_ma   = input.bool(true, title= "Exit by Moving average condition", group="================ EXIT CONDITIONS ================")
exit_TPSL = input.bool(false, title= "Exit by Take Profit and StopLoss", group="================ EXIT CONDITIONS ================")
TP        = input.int(12, title='Take Profit', step=1, group="================ EXIT CONDITIONS ================")
SL        = input.int(1, title='Stop Loss', step=1, group="================ EXIT CONDITIONS ================")
plot_TPSL = input.bool(false, title='Show TP/SL lines', group="================ EXIT CONDITIONS ================")


//Date filters
desde = input(defval= timestamp("01 Jan 2023 00:00 -3000"), title="From", inline="12", group= "============= DATE FILTERS =============")
hasta = input(defval= timestamp("01 Oct 2099 00:00 -3000"), title="To  ", inline="13", group= "============= DATE FILTERS =============")
enRango = true

//COMMENTS
//entry_long_comment  = input.string(defval=" ", title="Entry Long comment: ", inline="14", group="============= COMMENTS =============")
//exit_long_comment   = input.string(defval=" ", title="Exit Long comment:  ", inline="15", group="============= COMMENTS =============")
//entry_short_comment = input.string(defval=" ", title="Entry Short comment:", inline="16", group="============= COMMENTS =============")
//exit_short_comment  = input.string(defval=" ", title="Exit Short comment: ", inline="17", group="============= COMMENTS =============")

//============================================================

//Selecting Moving average type
ma1 = mov_ave == "EMA" ? ta.ema(source_1, period_1) : ta.sma(source_1, period_1)
ma2 = mov_ave == "EMA" ? ta.ema(source_2, period_2) : ta.sma(source_2, period_2)
ma3 = mov_ave == "EMA" ? ta.ema(source_3, period_3) : ta.sma(source_3, period_3)

//============================================================
//Entry Long condition: Grouped Moving average from: (ma fast > ma middle > ma slow)
long_condition = (ma1 > ma2) and (ma2 > ma3)

//Entry Short condition: Grouped Moving average from: (ma fast < ma middle < ma slow)
short_condition = (ma1 < ma2) and (ma2 < ma3)

//============================================================

cantidad       = strategy.equity / close
comprado_long  = strategy.position_size > 0
comprado_short = strategy.position_size < 0

var long_profit_price  = 0.0
var long_stop_price    = 0.0
var short_profit_price = 0.0
var short_stop_price   = 0.0

//============================================================

//ENTRY LONG
if not comprado_long and not comprado_short and long_condition and not long_condition[1] and enRango
    strategy.entry('Long', strategy.long, qty=cantidad, comment= "Entry Long")
    if exit_TPSL
        long_profit_price := close * (1 + TP/100)
        long_stop_price   := close * (1 - SL/100)
    else
        long_profit_price := na
        long_stop_price   := na
//============================================================


//ENTRY SHORT
if not comprado_long and not comprado_short and short_condition and not short_condition[1] and enRango
    strategy.entry('Short', strategy.short, qty=cantidad, comment= "Entry Short")
    if exit_TPSL
        short_profit_price := close * (1 - TP/100)
        short_stop_price   := close * (1 + SL/100)
    else
        short_profit_price := na
        short_stop_price   := na
//============================================================


//EXIT LONG 
if comprado_long and exit_ma and long_condition[1] and not long_condition
    strategy.close('Long', comment='Exit-Long(MA)')
if comprado_long and exit_TPSL
    strategy.exit('Long', limit=long_profit_price, stop=long_stop_price, comment='Exit-Long(TP/SL)')
//============================================================


//EXIT SHORT 
if comprado_short and exit_ma and short_condition[1] and not short_condition
    strategy.close('Short', comment='Exit-Short(MA)')
if comprado_short and exit_TPSL
    strategy.exit('Short', limit=short_profit_price, stop=short_stop_price, comment='Exit-Short(TP/SL)')
//============================================================



//PLOTS
plot(ma1, linewidth=2, color=color.rgb(255, 255, 255))
plot(ma2, linewidth=2, color=color.rgb(144, 255, 252))
plot(ma3, linewidth=2, color=color.rgb(49, 167, 255))
//Plot Take Profit line
plot(plot_TPSL ? comprado_long  ? long_profit_price : comprado_short ? short_profit_price : na : na, color=color.new(color.lime, 30), style= plot.style_linebr)
//Plot StopLoss line
plot(plot_TPSL ? comprado_long ? long_stop_price : comprado_short ? short_stop_price : na : na, color=color.new(color.red, 30), style= plot.style_linebr)