
Cette stratégie est une stratégie de croisement de moyenne mobile typique, qui utilise simultanément deux ensembles de moyenne, un ensemble de moyenne rapide et un ensemble de moyenne lente. Elle génère un signal d’achat lorsqu’elle traverse la moyenne lente sur la moyenne rapide et un signal de vente lorsqu’elle traverse la moyenne lente en dessous de la moyenne rapide.
La logique principale de cette stratégie est de juger le moment d’entrée et de sortie en fonction de la croisée de deux ensembles de moyennes rapides et lentes.
Tout d’abord, calculons deux ensembles de moyennes rapides et lentes:
Ensuite, il faut déterminer si l’EMA rapide est déjà un SMA à fort ou à faible rendement:
Afin de filtrer les faux signaux, un deuxième groupe de confirmations EMA et SMA a été ajouté:
De cette façon, avec deux ensembles de confirmation de ligne rapide et uniforme, de nombreux faux signaux peuvent être filtrés, ce qui améliore la fiabilité du signal.
Lorsque le jugement génère un signal d’achat, faites une entrée plus élevée; lorsque le jugement génère un signal de vente, faites une entrée à découvert.
En outre, la stratégie a également une logique de stop-loss. Lors de la tenue d’une position, les prix de stop-loss et de stop-loss sont suivis en fonction du ratio de gain et de perte défini.
Cette stratégie présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Pour maîtriser les risques, il est recommandé:
La stratégie peut également être optimisée dans les domaines suivants:
Dans l’ensemble, la stratégie bi-homogénéisée de la fourchette est simple, intuitive et facile à mettre en œuvre. La stratégie peut être optimisée en fonction des paramètres du marché et de la demande. Elle peut également être utilisée avec d’autres indicateurs techniques ou combinaisons de stratégies.
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 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/
// © JMLSlop
//@version=4
src = close
strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false)
// first fast EMA
len = input(8, "Length", type=input.integer, minval=1)
doma1 = input(true, title="EMA")
out1 = ema(src, len)
//Second fast EMA
len2 = input(21, minval=1, title="Length")
doma2 = input(true, title="EMA")
out2 = ema(src, len2)
//First slow MA
len3 = input(50, minval=1, title="Length")
doma3 = input(true, title="SMA")
out3 = sma(src, len3)
//Second slow MA
len4 = input(200, minval=1, title="Length")
doma4 = input(true, title="SMA")
out4 = sma(src, len4)
// Profit
profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01
plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA")
plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA")
plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA")
plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA")
// Orders config
takeProfitPrice =
(strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na
longStopPrice = strategy.position_avg_price * (1 - profit)
shortStopPrice = strategy.position_avg_price * (1 + profit)
longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3]))))
if (longCondition2)
strategy.entry("Enter L", strategy.long)
shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3])))
if (shortCondition2)
strategy.entry("Enter S", strategy.short)
if (strategy.position_size > 0)
strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)