Cette stratégie est une stratégie de croisement de moyenne mobile typique qui utilise deux ensembles de moyennes mobiles, l'une rapide et l'autre lente. Lorsque la moyenne mobile rapide traverse la moyenne mobile lente, un signal d'achat est généré. Lorsque la moyenne mobile rapide traverse la moyenne mobile lente, un signal de vente est généré.
La logique de base repose sur des croisements entre les lignes moyennes mobiles rapides et lentes pour déterminer les entrées et les sorties.
Plus précisément, deux ensembles de moyennes mobiles rapides et lentes sont calculés:
Les croisements sont ensuite vérifiés entre les EMA rapides et les SMA lentes:
Pour filtrer les faux signaux, un deuxième croisement EMA/SMA est nécessaire pour la confirmation:
En exigeant deux croisements MA rapides/lents, de nombreux faux signaux peuvent être filtrés et la fiabilité améliorée.
Lorsque vous achetez des déclencheurs de signaux, allez long. Lorsque vous vendez des déclencheurs de signaux, allez court.
La stratégie définit également la prise de profit et le stop loss en fonction du pourcentage d'entrée du prix d'entrée une fois dans une position.
Les avantages de cette stratégie sont les suivants:
Risques de la stratégie:
Pour contrôler les risques:
La stratégie peut être encore optimisée par:
En résumé, la double stratégie de croisement MA génère des signaux avec des croisements MA rapides / lents, des ensembles de profits et de stop-loss pour contrôler les risques, et est simple, intuitive et facile à mettre en œuvre.
/*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)