Cette stratégie utilise le principe de la croisée des moyennes mobiles rapides et des moyennes mobiles lentes pour déterminer la direction des tendances du marché afin d’émettre des signaux d’achat et de vente. La stratégie est simple à comprendre, facile à mettre en œuvre et s’applique aux transactions à courte ou moyenne ligne.
La stratégie utilise deux moyennes mobiles, une moyenne rapide et une moyenne lente. La moyenne rapide a une EMA de 3 jours et la moyenne lente une EMA de 15 jours. La stratégie détermine qu’une moyenne rapide qui franchit la ligne lente en descendant est considérée comme une tendance à la hausse et comme un signal d’achat.
La stratégie a également défini une EMA plus rapide de 3 jours comme ligne de sortie rapide. Lorsque le prix tombe au-dessus de cette ligne de sortie rapide, il est jugé que la tendance est inversée et que la position multi-titres d’origine doit être abandonnée. De même, lorsque le prix franchit à nouveau cette ligne de sortie, il est redirigé vers le bullish, donc un signal de réentrée.
Les paramètres de signaux d’opération sont les suivants:
Les lignes rapides passent de bas en haut, les lignes lentes font plus.
Les lignes rapides se déplacent de haut en bas, brisant les lignes lentes et laissant une place libre.
Les prix ont chuté au-delà de la ligne de sortie rapide et les positions ont été liquidées.
Les prix ont de nouveau franchi la ligne de sortie rapide et de nouveau fait plus
Simple d’utilisation, il suffit de configurer les paramètres de deux moyennes mobiles, très facile à mettre en œuvre
Les données de suivi sont abondantes, les indicateurs utilisés sont plus courants et permettent d’évaluer l’efficacité de la stratégie.
Plus de paramètres configurables permettant d’optimiser la stratégie en ajustant les paramètres
Le risque est mieux contrôlé avec un arrêt de perte à la sortie rapide de la moyenne.
La stratégie est claire, les signaux de vente et d’achat sont très clairs.
Opérer avec une fréquence modérée et éviter les transactions trop fréquentes
Il s’agit d’une stratégie de suivi de la tendance, qui génère plus de faux signaux lorsque la tendance n’est pas évidente.
Les moyennes mobiles sont elles-mêmes retardées et risquent de manquer un point de basculement.
Les paramètres fixes ne peuvent pas s’adapter aux changements du marché et doivent être utilisés avec des paramètres optimisés
Les paramètres d’arrêt de perte peuvent être trop faibles pour arrêter la perte en temps opportun
Les signaux stratégiques sont fréquents et les coûts de transaction peuvent être élevés
Les signaux de transaction peuvent être déviés et doivent être confirmés en combinaison avec d’autres indicateurs
Le risque peut être contrôlé par des méthodes telles que l’optimisation des paramètres, la confirmation par d’autres indicateurs, l’assouplissement approprié des normes de prévention des pertes et la mise à jour des paramètres en temps opportun.
Les paramètres des moyennes mobiles peuvent être testés pour les optimiser afin qu’ils correspondent mieux aux caractéristiques du marché actuel.
Plus d’indicateurs peuvent être combinés pour former un système de stratégie plus puissant
Vous pouvez définir des paramètres personnalisables, en temps réel, en fonction du marché
L’introduction d’algorithmes d’apprentissage automatique peut permettre une optimisation stratégique plus intelligente
Vous pouvez définir des arrêts dynamiques et suivre les arrêts pour mieux contrôler les risques.
Les indicateurs de quantité d’énergie peuvent être combinés pour éviter les déviations qui entraînent des défauts de réglage
Cette stratégie est une stratégie simple de croisement de deux moyennes mobiles. Elle utilise la relation croisée entre les moyennes rapides et les moyennes lentes pour déterminer les tendances du marché et les moments d’achat et de vente. L’avantage de la stratégie est que l’idée est claire, facile à mettre en œuvre et peut être adaptée à différents marchés par l’optimisation des paramètres.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © ehaarjee, ECHKAY, JackBauer007
//@version=4
//study(title="Tale_indicators", overlay=true)
strategy("Tale Indicators Strategy", overlay=true, precision=8, max_bars_back=200, pyramiding=0, initial_capital=20000, commission_type="percent", commission_value=0.1)
len_fast = input(3, minval=1, title="FAST EMA")
src_fast = input(close, title="Source for Fast")
fastMA = ema(src_fast, len_fast)
plot(fastMA, title="Slow EMA", color=color.orange)
len_slow = input(15, minval=1, title="SLOW EMA")
src_slow = input(close, title="Source for Slow")
slowMA = ema(src_slow, len_slow)
plot(slowMA, title="Fast EMA", color=color.blue)
len_fast_exit = input(3, minval=1, title="FAST EMA Exit")
src_fast_exit = input(close, title="Source for Fast Exit")
fastMAE = ema(src_fast_exit, len_fast_exit)
plot(fastMAE, title="Fast EMA Ex", color=color.red)
src_slow_enter_short = input(low, title="Source for Short Entry")
slowMASEn = ema(src_slow_enter_short, len_slow)
src_slow_enter_long = input(high, title="Source for Long Entry")
slowMALEn = ema(src_slow_enter_long, len_slow)
src_slow_exit_short = input(low, title="Source for Short Exit")
slowMASEx = ema(src_slow_enter_short, len_slow)
src_slow_exit_long = input(high, title="Source for Long Exit")
slowMALEx = ema(src_slow_enter_long, len_slow)
enter_long = crossover(fastMA, slowMALEn)
enter_short = crossunder(fastMA, slowMASEn)
exit_long = crossunder(fastMAE, slowMALEx)
exit_short = crossover(fastMAE, slowMALEx)
out_enter = iff(enter_long == true, 1, iff(enter_short == true, -1, 0))
plotarrow(out_enter, "Plot Enter Points", colorup=color.green, colordown=color.red, maxheight = 30)
bull = fastMA > slowMALEn
bear = fastMA < slowMASEn
c = bull ? color.green : bear ? color.red : color.white
bgcolor(c)
exit_tuner = input(0.005, title="Exit Tuner to touch slowEMA")
bull_exit = (bull and (low>(fastMAE*(1+exit_tuner)))) or exit_long or (not(bear) and (fastMAE>high))
bear_exit = (bear and ((fastMAE*(1-exit_tuner))>high)) or exit_short or (not(bull) and (low>fastMAE))
bull_r = (bull and ((bull_exit[1]) or (bull_exit[2] and bull_exit[1])) and (low<=fastMAE))
bear_r = (bear and ((bear_exit[1]) or (bull_exit[2] and bull_exit[1])) and (fastMAE<=high))
bull_re = (bull and (low<slowMALEn)) and not(enter_long)
bear_re = (bear and (high>slowMASEn)) and not(enter_short)
bull_ree = (bull and ((low<slowMALEn) and not(bull_re[1] or enter_long[1])))
bear_ree = (bear and ((high>slowMASEn) and not(bear_re[1] or enter_short[1])))
bull_reenter = (bull_r) and not(enter_long)
bear_reenter = (bear_r) and not(enter_short)
plotshape(bull_exit, "Plot Bull Exit", style = shape.arrowdown, color=color.green, size=size.small, text="ExL", location=location.abovebar)
plotshape(bear_exit, "Plot Bear Exit", style = shape.arrowup, color=color.red, size=size.small, text="ExS", location=location.belowbar)
plotshape(bull_reenter, "Plot Bull ReEnter", style = shape.arrowup, color=color.green, size=size.small, text="ReL", location=location.belowbar)
plotshape(bear_reenter, "Plot Bear ReEnter", style = shape.arrowdown, color=color.red, size=size.small, text="ReS", location=location.abovebar)
run_strategy = input(true, title="Run Strategy")
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 2000)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2100, title = "Thru Year", type = input.integer, minval = 2000)
// === INPUT SHOW PLOT ===
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
var long_position_open = false
var short_position_open = false
if (enter_long and not(bull_exit) and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=4)
long_position_open := true
if (short_position_open)
// strategy.close("SO")
short_position_open := false
if (bull_reenter and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=1)
long_position_open := true
if (bull_exit and long_position_open)
// strategy.close("LO")
long_position_open := false
if (enter_short and not(bear_exit) and not(short_position_open))
// strategy.entry("SO", strategy.short, qty=4)
short_position_open := true
if(long_position_open)
// strategy.close("LO")
long_position_open := false
if (bear_reenter and not(short_position_open))
// strategy.entry("SO", strategy.long, qty=1)
long_position_open := true
if (bear_exit and short_position_open)
// strategy.close("SO")
short_position_open := false
if(run_strategy)
strategy.entry("LO", strategy.long, when=(window() and enter_long), qty=4)
strategy.entry("LO", strategy.long, when=(window() and bull_reenter and not(long_position_open)), qty=1)
strategy.close("LO", when=(window() and bull_exit and long_position_open))
strategy.entry("SO", strategy.short, when=(window() and enter_short), qty=4)
strategy.entry("SO", strategy.short, when=(window() and bear_reenter and not(short_position_open)), qty=1)
strategy.close("SO", when=(window() and bear_exit and short_position_open))