Strategi ini menggunakan prinsip salib emas dan salib kematian purata bergerak mudah untuk melaksanakan kedudukan panjang dan pendek untuk saham. Ia menjadi panjang apabila MA cepat melintasi di atas MA perlahan, dan menjadi pendek apabila MA cepat melintasi di bawah MA perlahan.
Strategi pertama menentukan jangka masa backtesting, kemudian menetapkan parameter pengiraan untuk kedua-dua purata bergerak, termasuk jenis MA dan panjang tempoh.
Fungsi getMAType () mengira nilai kedua-dua MA. fastMA adalah MA tempoh yang lebih pendek, dan slowMA adalah MA tempoh yang lebih lama.
Logika asasnya:
Apabila fastMA melintasi di atas slowMA, isyarat panjang dicetuskan.
Apabila fastMA melintasi di bawah slowMA, isyarat pendek dicetuskan.
Akhirnya, semasa backtesting, mengambil kedudukan panjang apabila melihat isyarat panjang, dan mengambil kedudukan pendek apabila melihat isyarat pendek.
Kemungkinan pengoptimuman terhadap risiko:
Tambah penunjuk teknikal lain untuk pengenalan trend.
Tambah stop loss kepada kawalan bagi setiap jumlah kerugian perdagangan.
Tambah indikator jumlah untuk mengelakkan pasaran whipsaw.
Membina mekanisme pengoptimuman parameter untuk mencari set parameter optimum secara automatik.
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Tambah strategi stop loss seperti titik stop loss tetap atau trailing stop loss untuk mengawal kerugian.
Tambah strategi saiz kedudukan seperti saiz kedudukan tetap atau dinamik untuk mengawal risiko perdagangan.
Tambah penapis dengan menggabungkan dengan penunjuk teknikal lain untuk mengenal pasti trend dan meningkatkan kadar kemenangan.
Mengoptimumkan parameter dengan kaedah seperti carian grid dan regresi linear untuk mencari nilai optimum.
Memperluas strategi kemasukan seperti penarikan balik, skala dalam pesanan untuk memperkayakan taktik perdagangan.
Tambah indikator jumlah untuk mengelakkan pasaran whipsaw.
Memperluas produk ke indeks saham, forex, cryptocurrency dan lain-lain.
Strategi ini melaksanakan pemilihan saham panjang / pendek berdasarkan prinsip persilangan MA. Idea strategi adalah mudah dan jelas, digunakan secara meluas, sangat dapat disesuaikan, dan praktikal berharga. Tetapi ia juga mempunyai beberapa masalah penapisan yang tertinggal dan whipsaw. Pengoptimuman masa depan boleh memberi tumpuan kepada meningkatkan kehilangan berhenti, pengoptimuman parameter, menambah penapis dan lain-lain untuk menjadikannya 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)