Strategi ini menggunakan prinsip salib emas dan salib kematian dari rata-rata bergerak sederhana untuk menerapkan posisi panjang dan pendek untuk saham.
Strategi pertama-tama mendefinisikan kerangka waktu backtesting, kemudian menetapkan parameter perhitungan untuk dua rata-rata bergerak, termasuk jenis MA dan panjang periode.
Fungsi getMAType () menghitung nilai dari dua MA. fastMA adalah MA periode yang lebih pendek, dan slowMA adalah MA periode yang lebih panjang.
Logika inti:
Ketika fastMA melintasi di atas slowMA, sinyal panjang dipicu.
Ketika fastMA melintasi di bawah slowMA, sinyal pendek dipicu.
Akhirnya, selama backtesting, mengambil posisi panjang ketika melihat sinyal panjang, dan mengambil posisi pendek ketika melihat sinyal pendek.
Optimasi yang mungkin terhadap risiko:
Tambahkan indikator teknis lainnya untuk identifikasi tren.
Tambahkan stop loss ke kontrol per jumlah kerugian perdagangan.
Tambahkan indikator volume untuk menghindari pasar whipsaw.
Membangun mekanisme optimasi parameter untuk menemukan set parameter optimal secara otomatis.
Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:
Tambahkan strategi stop loss seperti titik stop loss tetap atau trailing stop loss untuk mengendalikan kerugian.
Tambahkan strategi ukuran posisi seperti ukuran posisi tetap atau dinamis untuk mengendalikan risiko perdagangan.
Tambahkan filter dengan menggabungkan dengan indikator teknis lainnya untuk mengidentifikasi tren dan meningkatkan tingkat kemenangan.
Mengoptimalkan parameter dengan metode seperti pencarian grid dan regresi linier untuk menemukan nilai optimal.
Memperluas strategi masuk seperti retak breakout, skala dalam pesanan untuk memperkaya taktik perdagangan.
Tambahkan indikator volume untuk menghindari pasar whipsaw.
Memperluas produk ke indeks saham, forex, cryptocurrency dll.
Strategi ini mengimplementasikan pilihan saham long/short berdasarkan prinsip crossover MA. Ide strategi sederhana dan jelas, banyak digunakan, sangat dapat disesuaikan, dan praktis berharga. Tapi juga memiliki beberapa masalah penyaringan yang tertinggal dan whipsaw. Optimasi masa depan dapat berfokus pada peningkatan stop loss, optimasi parameter, menambahkan filter dll untuk membuatnya lebih menguntungkan.
/*backtest start: 2023-09-10 00:00:00 end: 2023-10-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// MA Params ///////////// source1 = input(title="MA Source 1", defval=close) maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"]) length1 = input(title="MA Length 1", defval=50) source2 = input(title="MA Source 2", defval=close) maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"]) length2 = input(title="MA Length 2", defval=200) ///////////// Get MA Function ///////////// getMAType(maType, sourceType, maLen) => res = sma(close, 1) if maType == "ema" res := ema(sourceType, maLen) if maType == "sma" res := sma(sourceType, maLen) if maType == "swma" res := swma(sourceType) if maType == "wma" res := wma(sourceType, maLen) res ///////////// MA ///////////// fastMA = getMAType(maType1, source1, length1) slowMA = getMAType(maType2, source2, length2) long = crossover(fastMA, slowMA) short = crossunder(fastMA, slowMA) /////////////// Plotting /////////////// checkColor() => fastMA > slowMA colCheck = checkColor() ? color.lime : color.red p1 = plot(fastMA, color = colCheck, linewidth=1) p2 = plot(slowMA, color = colCheck, linewidth=1) fill(p1, p2, color = checkColor() ? color.lime : color.red) bgcolor(long ? color.lime : short ? color.red : na, transp=20) /////////////// Execution /////////////// if testPeriod() strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short)