Golden Cross Optimized Moving Average Crossover Trading Strategy (Strategi Perdagangan lintas rata-rata bergerak yang dioptimalkan)

Penulis:ChaoZhang, Tanggal: 2023-12-19 13:37:33
Tag:

img

Gambaran umum

Strategi ini mengoptimalkan strategi crossover rata-rata bergerak konvensional dengan menetapkan tiga rata-rata bergerak dengan periode yang berbeda, membangun pola salib emas dengan rata-rata bergerak 9 periode, 50 periode dan 100 periode. Ini menghasilkan sinyal beli ketika MA jangka pendek melintasi di atas MA jangka menengah sementara MA jangka panjang berada dalam tren naik.

Logika Strategi

Strategi ini menggunakan tiga rata-rata bergerak dengan periode 9, 50 dan 100. MA 9 periode adalah MA jangka pendek, MA 50 periode adalah MA jangka menengah, dan MA 100 periode adalah MA jangka panjang. Sinyal perdagangan dihasilkan oleh persilangan antara MA jangka pendek dan MA jangka menengah. Secara khusus, ketika MA jangka panjang berada dalam tren naik (di atas MA jangka menengah), sinyal beli dipicu ketika MA jangka pendek melintasi di atas MA jangka menengah. Sinyal jual dipicu ketika MA jangka pendek melintasi di bawah MA jangka menengah.

Analisis Keuntungan

Dibandingkan dengan strategi crossover rata-rata bergerak ganda konvensional, strategi ini menambahkan kondisi menilai tren jangka menengah dan panjang sebelum menghasilkan sinyal perdagangan, yang secara efektif dapat menyaring beberapa sinyal yang tidak valid. Ketika tren jangka panjang tidak jelas, strategi tidak akan menghasilkan sinyal, menghindari terjebak dalam konsolidasi. Pada saat yang sama, strategi ini cocok untuk menangkap pergerakan tren dalam jangka pendek dan menengah, mengurangi kemungkinan masuk agresif.

Analisis Risiko

Ketika menetapkan parameter untuk strategi ini, kombinasi periode rata-rata bergerak perlu disesuaikan. Kombinasi periode yang berbeda akan berdampak pada efektivitas strategi. Jika parameter periode tidak ditetapkan dengan benar, ada risiko menghasilkan terlalu banyak sinyal palsu. Selain itu, pedagang perlu menyadari potensi risiko sistemik dan menghentikan kerugian tepat waktu untuk mengurangi risiko.

Arahan Optimasi

Pertimbangkan untuk memasukkan indikator lain untuk membantu menilai tren pasar, seperti MACD, BOLL, dll., dan menetapkan kondisi masuk yang lebih ketat, atau memasukkan indikator volatilitas untuk membangun rata-rata bergerak adaptif sehingga parameter dapat menyesuaikan secara otomatis berdasarkan kondisi pasar untuk lebih mengoptimalkan strategi.

Kesimpulan

Berdasarkan crossover rata-rata bergerak ganda konvensional, strategi ini menambahkan penilaian MA jangka panjang dan kondisi filter, yang secara efektif dapat menyaring sinyal palsu dan cocok untuk menangkap pergerakan tren jangka pendek hingga menengah. Ini adalah strategi tren yang sederhana dan praktis. Namun, pedagang masih perlu memperhatikan optimasi parameter dan risiko sistemik, dan merumuskan strategi manajemen risiko ilmiah.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Input
switch1=input(true, title="Enable Bar Color?")
switch2=input(false, title="Show Fast Moving Average")
switch3=input(true, title="Show Slow Moving Average")

//Calculate Moving Averages
movingaverage_fast = sma(close, input(9))
movingaverage_slow = sma(close, input(100))
movingaverage_normal= sma(close, input(50))

//Backtest dates
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 = 1970)
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 = 2112, title = "Thru Year",       type = input.integer, minval = 1970)
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"


// Calculation
bullish_cross = crossover(movingaverage_fast, movingaverage_normal)
bearish_cross = crossunder(movingaverage_fast, movingaverage_normal)

//Entry and Exit
if bullish_cross and window() and movingaverage_slow > movingaverage_normal
    strategy.entry("long", strategy.long)

strategy.close("long", when = bearish_cross and window())

// Colors
bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue
barcolor(switch1?bartrendcolor:na)

// Output
plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)

Lebih banyak