Strategi ini adalah strategi crossover rata-rata bergerak yang menggunakan dua set rata-rata bergerak, satu cepat dan satu lambat. Ketika rata-rata bergerak cepat melintasi rata-rata bergerak lambat, sinyal beli dihasilkan. Ketika rata-rata bergerak cepat melintasi di bawah rata-rata bergerak lambat, sinyal jual dihasilkan. Strategi ini menggunakan EMA dan SMA untuk rata-rata bergerak, dengan EMA sebagai garis cepat dan SMA sebagai garis lambat. Menggunakan beberapa rata-rata bergerak dapat membantu menyaring sinyal palsu dan meningkatkan keandalan.
Logika inti bergantung pada persilangan antara garis rata-rata bergerak cepat dan lambat untuk menentukan entri dan keluar.
Secara khusus, dua set rata-rata bergerak cepat dan lambat dihitung:
Crossover kemudian diperiksa antara EMA cepat dan SMA lambat:
Untuk menyaring sinyal palsu, crossover EMA/SMA kedua diperlukan untuk konfirmasi:
Dengan membutuhkan dua penyeberangan MA cepat/lambat, banyak sinyal palsu dapat disaring dan keandalan ditingkatkan.
Ketika membeli sinyal pemicu, pergi panjang. Ketika menjual sinyal pemicu, pergi pendek.
Strategi ini juga menetapkan profit taking dan stop loss berdasarkan persentase input dari harga masuk sekali dalam posisi.
Keuntungan dari strategi ini meliputi:
Risiko dari strategi:
Untuk mengendalikan risiko:
Strategi dapat dioptimalkan lebih lanjut dengan:
Singkatnya, strategi crossover MA ganda menghasilkan sinyal dengan penyeberangan MA cepat / lambat, set mengambil keuntungan dan stop loss untuk mengendalikan risiko, dan sederhana, intuitif dan mudah diterapkan. Parameter dapat disetel dan dikombinasikan dengan indikator lain untuk kinerja yang lebih baik.
/*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)