Strategi Dagangan BTC Berdasarkan Crossover Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-12-07 14:56:50
Tag:

img

Ringkasan

Strategi ini berdasarkan isyarat salib emas dan salib kematian purata bergerak 50 hari dan purata bergerak 200 hari BTC, digabungkan dengan penunjuk teknikal tambahan untuk menjana isyarat beli dan jual. Strategi ini terutamanya sesuai untuk pasangan mata wang dengan ciri trend yang jelas seperti BTC / USDT.

Prinsip Strategi

Apabila purata bergerak 50 hari melintasi di atas purata bergerak 200 hari untuk membentuk salin emas, ia menunjukkan bahawa BTC telah memasuki pasaran lembu dan menghasilkan isyarat beli.

Sebagai tambahan kepada penilaian isyarat purata bergerak asas salib emas dan salib kematian, strategi ini juga merangkumi beberapa penunjuk teknikal tambahan untuk membantu penilaian, termasuk:

  1. Indikator EMA: Hitung indikator EMA dengan panjang + offset, apabila ia naik menunjukkan pasaran semasa menaik, kita boleh membeli.

  2. Bandingkan hubungan nilai antara purata bergerak dan EMA: Jika nilai EMA lebih tinggi daripada purata bergerak 50 hari, isyarat beli dihasilkan.

  3. Periksa sama ada harga telah jatuh lebih daripada 1% berbanding dengan rendah K-line sebelumnya, jika demikian menghasilkan isyarat jual.

Dengan menggabungkan penggunaan beberapa penunjuk di atas, beberapa isyarat yang salah boleh disaring dan keputusan perdagangan strategi boleh lebih dipercayai.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan purata bergerak sebagai isyarat perdagangan utama boleh menapis bunyi pasaran dan mengenal pasti arah trend.

  2. Menggabungkan dengan beberapa penunjuk teknikal tambahan boleh meningkatkan kebolehpercayaan isyarat dan menapis isyarat palsu.

  3. Mengambil strategi stop-loss yang sesuai dapat mengawal kerugian tunggal dengan berkesan.

  4. Logik perdagangan yang agak mudah difahami dan dilaksanakan, sesuai untuk pemula perdagangan kuantitatif.

  5. Terdapat banyak parameter konfigurasi yang boleh diselaraskan mengikut pilihan anda sendiri.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko untuk diperhatikan:

  1. Purata bergerak itu sendiri mempunyai sifat ketinggalan yang kuat, mungkin kehilangan peluang untuk pembalikan harga yang cepat.

  2. Menambah penunjuk bantuan meningkatkan bilangan peraturan dan juga meningkatkan kebarangkalian menghasilkan isyarat yang salah.

  3. Tetapan stop-loss yang tidak betul boleh menyebabkan kerugian meningkat.

  4. Tetapan parameter yang tidak sesuai (seperti panjang purata bergerak, dll.) juga akan mempengaruhi hasil strategi.

Penyelesaiannya:

  1. Memendekkan kitaran purata bergerak dengan betul dan meningkatkan julat pengoptimuman parameter.

  2. Meningkatkan kuantiti data backtest untuk memeriksa kualiti isyarat.

  3. Relaksasi julat stop loss dengan betul semasa menetapkan berhenti mengambil keuntungan.

  4. Tingkatkan pengoptimuman parameter untuk mencari kombinasi parameter terbaik.

Arahan pengoptimuman

Strategi ini juga boleh dioptimumkan ke arah berikut:

  1. Meningkatkan algoritma pembelajaran mesin untuk mencapai pengoptimuman parameter automatik.

  2. Tambah lebih banyak penunjuk tambahan untuk membina pelbagai sub-strategi dan membuat keputusan melalui mekanisme pengundian.

  3. Cuba strategi penembusan untuk mengenal pasti kejayaan harga.

  4. Gunakan pembelajaran mendalam untuk meramalkan trend harga.

  5. Mengoptimumkan mekanisme stop-loss untuk mencapai stop-loss penjejakan dinamik.

Pengoptimuman di atas boleh meningkatkan ketepatan keputusan dan meningkatkan keuntungan dan kestabilan strategi.

Ringkasan

Strategi ini terutamanya membuat keputusan perdagangan berdasarkan persilangan purata bergerak BTC, dibantu oleh penunjuk teknikal seperti EMA untuk menapis isyarat. Strategi ini mempunyai keupayaan mengikuti trend yang kuat dan konfigurasi yang tinggi, menjadikannya sesuai sebagai strategi perdagangan kuantitatif pemula. Tetapi terdapat juga risiko ketinggalan tertentu yang perlu dijaga. Arahan pengoptimuman seterusnya boleh dari pelbagai dimensi seperti pembelajaran mesin, strategi portfolio, strategi stop-loss, dll.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)

securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')

sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')

// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)

ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)

up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue

plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)

ma50GreaterThanMa200 = sma50 > sma200

last3BarUp = ema > ema[1]

startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)

startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")

yearFilter = true

alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"

if true and startLong and yearFilter
    strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)

longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
    strategy.close('Long', comment = "Fuck It!", alert_message =  alertLongPositionMessage)

bgcolor(startLong ? color.green : na, transp=90)



Lebih lanjut