Strategi Palang Kematian Golden Cross

Penulis:ChaoZhang, Tanggal: 2023-10-11 16:33:18
Tag:

Gambaran umum

Strategi ini menggunakan prinsip salib emas dan salib kematian dari rata-rata bergerak sederhana untuk menerapkan posisi panjang dan pendek untuk saham.

Logika Strategi

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.

Analisis Keuntungan

  • Ide strategi yang sederhana dan jelas, mudah dipahami dan diimplementasikan.
  • Menggunakan prinsip silang MA yang diterapkan secara luas, cocok untuk sebagian besar produk stok.
  • Jenis dan parameter MA yang dapat disesuaikan, kemampuan beradaptasi yang tinggi.
  • Struktur strategi modular, fungsi yang jelas, mudah dioptimalkan.

Analisis Risiko

  • MA crossover memiliki beberapa keterlambatan, mungkin kehilangan beberapa peluang perdagangan.
  • Tidak dapat secara efektif menyaring pasar whipsaw, cenderung terjebak.
  • Optimasi parameter tidak cukup komprehensif, membutuhkan pengalaman manual.
  • Tidak mampu mengendalikan risiko dan kerugian secara efektif per perdagangan.

Optimasi yang mungkin terhadap risiko:

  1. Tambahkan indikator teknis lainnya untuk identifikasi tren.

  2. Tambahkan stop loss ke kontrol per jumlah kerugian perdagangan.

  3. Tambahkan indikator volume untuk menghindari pasar whipsaw.

  4. Membangun mekanisme optimasi parameter untuk menemukan set parameter optimal secara otomatis.

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Tambahkan strategi stop loss seperti titik stop loss tetap atau trailing stop loss untuk mengendalikan kerugian.

  2. Tambahkan strategi ukuran posisi seperti ukuran posisi tetap atau dinamis untuk mengendalikan risiko perdagangan.

  3. Tambahkan filter dengan menggabungkan dengan indikator teknis lainnya untuk mengidentifikasi tren dan meningkatkan tingkat kemenangan.

  4. Mengoptimalkan parameter dengan metode seperti pencarian grid dan regresi linier untuk menemukan nilai optimal.

  5. Memperluas strategi masuk seperti retak breakout, skala dalam pesanan untuk memperkaya taktik perdagangan.

  6. Tambahkan indikator volume untuk menghindari pasar whipsaw.

  7. Memperluas produk ke indeks saham, forex, cryptocurrency dll.

Ringkasan

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)

Lebih banyak