
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.
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 :
Conditions de jeu:
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.
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.
/*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)