Strategi Perdagangan Purata Bergerak Golden Cross

Penulis:ChaoZhang, Tarikh: 2023-12-11 11:37:36
Tag:

img

Ringkasan

Strategi perdagangan purata bergerak Golden Cross adalah strategi perdagangan kuantitatif klasik. Strategi ini menggunakan purata bergerak dari tempoh yang berbeza untuk menentukan trend pasaran untuk kedudukan panjang dan pendek. Apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang, ia dianggap isyarat beli. Apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka panjang, ia dianggap isyarat jual.

Logika Strategi

Strategi ini berdasarkan tiga purata bergerak mudah (SMA) dari tempoh yang berbeza: 50 hari, 100 hari dan 200 hari.

  1. Isyarat kemasukan: apabila purata bergerak 50 hari melintasi di atas purata bergerak 100 hari, pergi panjang.

  2. Isyarat keluar: apabila purata bergerak 50 hari melintasi di bawah purata bergerak 100 hari, tutup kedudukan; atau apabila harga ditutup di bawah purata bergerak 100 hari, keluar; atau apabila purata bergerak 100 hari melintasi di bawah purata bergerak 200 hari, keluar.

  3. Ambil keuntungan dan hentikan kerugian: tetapkan keuntungan dan hentikan kerugian tetap.

Strategi ini menggunakan keupayaan purata bergerak untuk menentukan dengan berkesan trend harga purata pasaran. persilangan purata jangka pendek dan jangka panjang dilihat sebagai pasaran memasuki trend menaik atau menurun, oleh itu isyarat panjang atau keluar. Ini membolehkan strategi untuk menangkap dengan berkesan trend pasaran.

Kelebihan

  1. Mudah dilaksanakan. Ia hanya memerlukan tiga purata bergerak dari tempoh yang berbeza.

  2. Rata-rata bergerak mempunyai keupayaan penapisan bunyi bising yang mengurangkan kesan rawak pasaran pada perdagangan dan menjadikan isyarat lebih boleh dipercayai.

  3. Mudah untuk menangkap trend utama. purata bergerak berkesan mencerminkan perubahan dalam trend harga pasaran purata, menggunakan persilangan antara garis jangka pendek dan jangka panjang untuk menentukan perubahan trend utama.

  4. Sangat disesuaikan. Tempoh purata bergerak boleh diselaraskan untuk tahap kawalan risiko yang berbeza.

Risiko

  1. Mungkin menghasilkan banyak isyarat palsu. persilangan yang kerap boleh berlaku apabila purata jangka pendek dan jangka panjang terlalu dekat, mengakibatkan isyarat yang tidak sah yang berlebihan.

  2. Rata-rata bergerak bertindak balas terhadap perubahan harga dengan perlahan dan tidak dapat bertindak balas dengan serta-merta terhadap berita pasaran dan peristiwa utama.

  3. Tidak dapat mendapat keuntungan daripada turun naik kecil. penapisan bunyi bising juga bermakna kehilangan keuntungan dari turun naik pasaran kecil.

  4. Pilihan parameter subjektif: Tempoh purata bergerak yang sesuai adalah sebahagian besarnya subjektif dan bergantung kepada pasaran tertentu.

Peluang Peningkatan

  1. Tambah penapis untuk mengurangkan isyarat palsu, seperti penapis julat harga untuk mengehadkan isyarat kepada pergerakan di atas magnitud tertentu.

  2. Masukkan penunjuk lain untuk strategi gabungan, yang boleh meningkatkan ketepatan isyarat, contohnya penunjuk turun naik atau jumlah.

  3. Tambah modul pengoptimuman adaptif untuk mengoptimumkan tempoh purata bergerak secara dinamik berdasarkan algoritma pembelajaran mesin, yang membolehkan penyesuaian dengan keadaan pasaran yang berubah.

  4. Menggabungkan model pembelajaran mendalam yang maju dan bukannya purata bergerak untuk pengekstrakan ciri yang unggul dan keupayaan pemodelan.

Kesimpulan

Strategi perdagangan purata bergerak Golden Cross adalah strategi trend berikut yang tipikal. Ia mencerminkan trend harga pasaran purata dengan mudah dan praktikal, sesuai untuk pemula. Walau bagaimanapun, ia juga mempunyai beberapa kelemahan yang boleh diperbaiki dengan meningkatkan kualiti isyarat, menggabungkan dengan penunjuk teknikal lain, memperkenalkan mekanisme adaptif, dll untuk menyesuaikan diri dengan pasaran yang lebih kompleks. Secara keseluruhan, ini adalah strategi dengan rujukan dan nilai pembelajaran yang tinggi.


/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CJDeegan

//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)

// ------------Functions------------

//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick 

    
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")


startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2018, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2031, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,
         startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
     

// ------------Populate Indicators------------

//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)


// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
    strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")

//------------Exit Logic------------

//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger

//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))

//Execution
if (inDateRange)
    strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
    strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)

//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)


Lebih lanjut