Strategi Crossover Rata-rata Pergerakan Momentum


Tanggal Pembuatan: 2023-09-21 21:29:22 Akhirnya memodifikasi: 2023-09-21 21:29:22
menyalin: 1 Jumlah klik: 596
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggunakan prinsip persilangan rata-rata bergerak cepat dan rata-rata bergerak lambat untuk menentukan arah tren pasar untuk mengirim sinyal beli dan jual. Strategi ini sederhana dan mudah dipahami, mudah diterapkan, dan cocok untuk perdagangan garis pendek tengah.

Prinsip Strategi

Strategi ini menggunakan dua rata-rata bergerak, satu garis cepat dan satu garis lambat. Parameter garis cepat adalah 3 hari EMA dan parameter garis lambat adalah 15 hari EMA. Strategi menilai bahwa ketika garis cepat menerobos garis lambat dari arah bawah, saat ini dianggap sedang dalam tren naik, saat itu adalah sinyal beli. Sebaliknya, ketika garis cepat turun dari arah atas dan menerobos garis lambat, saat ini dianggap sedang dalam tren turun, saat itu adalah sinyal jual.

Strategi ini juga menetapkan EMA 3 hari dengan parameter yang lebih cepat sebagai garis keluar cepat. Ketika harga jatuh di bawah garis keluar cepat, maka ditentukan bahwa tren berbalik dan harus keluar dari posisi multihead yang asli. Demikian pula, ketika harga kembali menerobos garis keluar, maka kembali ke posisi bullish, dan karenanya menjadi sinyal untuk masuk kembali.

Sinyal operasi spesifiknya adalah sebagai berikut:

  1. Jalur cepat dari bawah ke atas, melewati jalur lambat, melakukan lebih banyak.

  2. Jalur cepat berputar dari atas ke bawah, melewati jalur lambat, dan kosong.

  3. Harga turun di bawah garis keluar cepat, posisi kosong lebih banyak

  4. Harga kembali menembus garis keluar cepat dan melakukan lebih banyak lagi

Keunggulan Strategis

  • Mudah digunakan, hanya perlu mengkonfigurasi dua parameter moving average, sangat mudah untuk diterapkan

  • Data retrospektif cukup, indikator yang digunakan lebih umum, dapat menilai efektivitas strategi

  • Lebih banyak parameter yang dapat dikonfigurasi, dan Anda dapat mengoptimalkan kebijakan dengan menyesuaikan parameter

  • Pengaturan Stop Loss dengan Moving Average Cepat untuk Mengontrol Risiko

  • “Saya tidak tahu apa yang harus saya lakukan, saya tidak tahu apa yang harus saya lakukan, saya tidak tahu apa yang harus saya lakukan, saya tidak tahu apa yang harus saya lakukan.

  • Operasi frekuensi sedang, hindari terlalu sering transaksi

Risiko Strategis

  • Sebagai strategi mengikuti tren, lebih banyak sinyal palsu dihasilkan ketika tren tidak terlihat

  • Rata-rata bergerak sendiri memiliki keterlambatan dan mungkin kehilangan titik balik.

  • Pengaturan parameter tetap tidak dapat beradaptasi dengan perubahan pasar, harus didukung dengan penggunaan parameter yang dioptimalkan

  • Pengaturan Stop Loss mungkin terlalu lemah untuk dihentikan tepat waktu

  • Sinyal-sinyal strategi sering terjadi, dan biaya transaksi mungkin lebih tinggi.

  • Sinyal perdagangan mungkin menyimpang dan harus dikonfirmasi dalam kombinasi dengan indikator lain

Pengendalian risiko dapat dilakukan dengan mengoptimalkan parameter, membantu mengkonfirmasi dengan indikator lain, meredakan standar hambatan kerugian yang sesuai, dan memperbarui parameter secara tepat waktu.

Optimasi Strategi

  • Dapat menguji parameter rata-rata bergerak yang dioptimalkan agar lebih sesuai dengan karakteristik pasar saat ini

  • Lebih banyak indikator dapat diperkenalkan untuk dikombinasikan, membentuk sistem strategi yang lebih kuat

  • Pengaturan parameter yang dapat disesuaikan, menyesuaikan parameter sesuai dengan pasar secara real-time

  • Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan strategi yang lebih cerdas

  • Anda dapat mengatur stop loss secara dinamis dan melacak stop loss untuk mengendalikan risiko dengan lebih baik.

  • Dapat menggabungkan indikator energi kuantitatif untuk menghindari penyimpangan yang menyebabkan kesalahan setel

Meringkaskan

Strategi ini secara keseluruhan adalah strategi yang lebih sederhana dari dua moving average crossover. Ini menggunakan hubungan silang antara rata-rata cepat dan rata-rata lambat untuk menilai tren pasar dan waktu jual beli. Keuntungan dari strategi ini adalah ide yang jelas, mudah diterapkan, dapat disesuaikan dengan pasar yang berbeda melalui pengoptimalan parameter.

Kode Sumber Strategi
/*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))