Strategi ini menggunakan prinsip cross-gold dan cross-deadline dari moving average sederhana untuk melakukan posisi panjang dan pendek pada saham. Jika garis cepat menembus garis lambat dari arah bawah, maka lakukan over; jika garis cepat menembus garis lambat dari arah atas, maka lakukan short.
Strategi ini pertama-tama mendefinisikan awal dan akhir waktu pengukuran dan kemudian menetapkan parameter komputasi untuk dua rata-rata, termasuk jenis rata-rata dan panjang siklus.
Fungsi getMAType () menghitung nilai dari dua rata-rata. fastMA adalah rata-rata periode pendek dan slowMA adalah rata-rata periode panjang.
Logika inti dari strategi ini adalah:
Ketika fastMA memakai slowMA, sinyal yang dihasilkan adalah multi-long;
Ketika fastMA melewati slowMA, sinyal short dibuat.
Akhirnya, dalam periode pengamatan ulang, strategi long position diambil ketika ada sinyal melakukan lebih banyak; strategi long position diambil ketika ada sinyal melakukan lebih sedikit.
Ada beberapa cara untuk mengoptimalkan risiko:
Menambahkan filter untuk indikator teknis lainnya untuk mengidentifikasi tren.
Meningkatkan strategi stop loss untuk mengendalikan kerugian tunggal.
Menggunakan indikator kuantitatif untuk menghindari pasar yang bergejolak.
Membangun mekanisme optimasi parameter, secara otomatis mencari kombinasi parameter terbaik.
Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:
Menambahkan strategi stop loss, seperti menetapkan titik stop loss tetap atau melacak stop loss, mengendalikan kerugian.
Meningkatkan strategi manajemen posisi, seperti posisi tetap, posisi dinamis, mengendalikan risiko perdagangan.
Menambahkan filter, yang dikombinasikan dengan indikator teknis lainnya untuk mengidentifikasi tren, meningkatkan tingkat kemenangan.
Optimalkan pengaturan parameter, mencari parameter optimal melalui pencarian grid, regresi linier, dan lain-lain.
Perluasan melakukan lebih banyak strategi shorting, seperti breakout reversal, batch building, dan lain-lain, untuk memperkaya strategi trading.
Meningkatkan indikator energi untuk menghindari terjadinya kebocoran.
Berbagai jenis perdagangan diperluas ke indeks saham berjangka, valuta asing, mata uang digital dan lainnya.
Strategi ini didasarkan pada prinsip persilangan rata-rata bergerak untuk mencapai pilihan posisi saham yang panjang dan pendek. Strategi ini sederhana, digunakan secara luas, beradaptasi, dan memiliki nilai praktis tertentu. Namun, strategi ini juga memiliki keterlambatan tertentu, tidak dapat menyaring goyangan secara efektif dan kekurangan lainnya.
/*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)