Strategi ini menggunakan prinsip persilangan emas dan garpu mati rata-rata bergerak yang mudah untuk mewujudkan kedudukan panjang dan pendek saham. Apabila garis cepat menembusi garis perlahan dari arah bawah, lakukan lebih banyak; apabila garis cepat jatuh dari arah atas dan menembusi garis perlahan, lakukan kosong.
Strategi ini mula-mula menentukan masa permulaan dan akhir pengukuran dan kemudian menetapkan parameter pengiraan dua rata-rata, termasuk jenis rata-rata dan panjang kitaran.
Hitung nilai dua purata melalui fungsi getMAType (). Di mana fastMA adalah purata jangka pendek, dan slowMA adalah purata jangka panjang.
Strategi ini berbunyi:
Apabila fastMA diletakkan di atas slowMA, ia akan mengeluarkan isyarat long;
Apabila fastMA melalui slowMA, ia akan mengeluarkan isyarat short.
Akhirnya, dalam tempoh pengkajian semula, mengambil strategi kedudukan panjang apabila terdapat isyarat melakukan lebih banyak; mengambil strategi kedudukan kosong apabila terdapat isyarat melakukan lebih sedikit.
Ia boleh dioptimumkan dengan lebih lanjut untuk risiko:
Menambah penapis untuk petunjuk teknikal lain untuk mengenal pasti trend.
Tambah strategi hentikan kerugian dan kawal kerugian tunggal.
Memperkenalkan indikator kuantitatif dan lain-lain untuk mengelakkan pasaran yang bergolak.
Membangunkan mekanisme pengoptimuman parameter untuk mencari kombinasi parameter terbaik secara automatik.
Strategi ini boleh dioptimumkan dengan cara berikut:
Tambah strategi berhenti kerugian, seperti menetapkan titik berhenti tetap atau mengesan berhenti kerugian, mengawal kerugian.
Menambah strategi pengurusan kedudukan, seperti kedudukan tetap, kedudukan dinamik, mengawal risiko perdagangan.
Menambah penapis, menggabungkannya dengan penunjuk teknikal lain untuk mengenal pasti trend dan meningkatkan kadar kemenangan.
Pengaturan parameter yang dioptimumkan, mencari parameter optimum melalui grid search, regresi linear dan sebagainya.
Kembangkan strategi perdagangan yang lebih kaya dengan melakukan lebih banyak strategi shorting, seperti berpatah balik, dan berpelbagai-pelbagai.
Meningkatkan penunjuk tenaga untuk mengelakkan terjebak dalam gegaran.
Berkembangnya pelbagai jenis dagangan, termasuk indeks saham, mata wang asing, mata wang digital dan lain-lain.
Strategi ini berdasarkan prinsip persilangan rata-rata bergerak untuk mewujudkan pilihan saham yang panjang dan pendek. Idea strategi mudah difahami, digunakan secara meluas, beradaptasi, dan mempunyai nilai praktikal tertentu. Tetapi strategi ini juga mempunyai kelemahan tertentu, tidak dapat menapis guncangan dengan berkesan.
/*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)