Strategi Pembalikan Trend Berdasarkan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2024-02-21 17:03:31
Tag:

img

Ringkasan

Idea utama strategi ini adalah untuk berdagang pullbacks jangka pendek di sepanjang arah trend jangka panjang. Khususnya, purata bergerak mudah 200 hari digunakan untuk menentukan arah trend jangka panjang, dan purata bergerak mudah 10 hari digunakan untuk menentukan arah trend jangka pendek. Apabila harga di atas garisan 200 hari, ia adalah pasaran lembu. Apabila harga di bawah garisan 200 hari, ia adalah pasaran beruang. Dalam pasaran lembu, pergi panjang apabila harga turun ke garisan 10 hari. Dalam pasaran beruang, pergi pendek apabila harga naik ke garisan 10 hari.

Logika Strategi

Strategi ini menggunakan purata bergerak mudah 200 hari dan purata bergerak mudah 10 hari untuk menentukan trend pasaran. Apabila harga melintasi di atas garisan 200 hari, ia dianggap memasuki pasaran lembu. Apabila harga melintasi di bawah garisan 200 hari, ia dianggap memasuki pasaran beruang. Dalam pasaran lembu, jika harga turun ke sekitar garisan 10 hari, ia bermakna menghadapi pembetulan jangka pendek. Pada masa ini, pergi panjang, menyasarkan kesinambungan trend bullish jangka panjang. Dalam pasaran beruang, jika harga meningkat ke sekitar garisan 10 hari, ia bermakna menghadapi pemulihan jangka pendek. Pada masa ini, pergi pendek, menyasarkan kesinambungan trend bearish jangka panjang.

Secara khusus, apabila syarat-syarat berikut dipenuhi, pergi panjang untuk memasuki pasaran: harga di atas garisan 200 hari, harga di bawah garisan 10 hari, dan tidak ada kedudukan sebelumnya. Apabila syarat-syarat berikut dipenuhi, tutup kedudukan untuk keluar dari pasaran: harga di atas garisan 10 hari, dan terdapat kedudukan panjang sebelumnya. Untuk mengelakkan kerugian besar, stop loss FAILSAFE ditetapkan. Jika retracement dari titik tertinggi melebihi 10%, langsung berhenti kerugian untuk keluar.

Ia boleh dilihat bahawa logik perdagangan strategi ini terutamanya berdasarkan salib emas dan salib kematian purata bergerak. Ia memasuki berdasarkan pullbacks dan keluar berdasarkan trend tracking dalam arah yang ditentukan oleh purata bergerak panjang dan pendek, yang merupakan strategi trend tracking biasa.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah pengesanan trend kos rendah untuk mengejar pulangan yang berlebihan.

  1. Menggunakan gabungan purata bergerak jangka panjang dan jangka pendek untuk menentukan arah trend utama dan sekunder dapat mengunci peluang trend jangka sederhana dan jangka panjang dengan berkesan dan mengelakkan ditipu oleh pergerakan pasaran jangka pendek.

  2. Dengan memasuki berdasarkan penarikan balik jangka pendek, kos kemasukan dapat diminimumkan untuk mendapatkan potensi keuntungan yang agak tinggi.

  3. Mekanisme stop loss FAILSAFE dapat mengawal kerugian tunggal dengan berkesan untuk melindungi dana akaun.

  4. Membolehkan penyingkiran trend dapat memanfaatkan sepenuhnya peluang trend jangka sederhana dan panjang untuk pulangan lebihan alpha.

  5. Penggunaan kaedah perdagangan automatik sepenuhnya mengelakkan kesan emosi subjektif dan menjadikan strategi lebih mudah dilaksanakan.

Analisis Risiko

Risiko utama strategi ini ialah:

  1. Risiko overfit backtest: Keadaan pasaran sebenar mungkin berbeza dari data sejarah, mengakibatkan prestasi perdagangan sebenar yang berkurangan.

  2. Risiko pecah palsu. Kebarangkalian harga berbalik berhampiran purata bergerak agak besar, yang boleh dengan mudah membawa kepada kerugian terkumpul kecil.

  3. Risiko pembalikan trend: pembalikan tiba-tiba dalam trend jangka sederhana dan panjang adalah biasa, yang boleh dengan mudah membawa kepada kerugian yang agak besar apabila memegang kedudukan.

Langkah-langkah balas adalah:

  1. Meningkatkan saiz sampel dan menggunakan lebih banyak data sejarah untuk ujian ketahanan untuk memastikan hasil yang boleh dipercayai.

  2. Mengoptimumkan parameter dengan menyesuaikan gabungan parameter sistem purata bergerak untuk memastikan kualiti isyarat.

  3. Membesarkan garis stop loss dengan sewajarnya untuk membenarkan beberapa retracement harga untuk mengelakkan stop loss yang terlalu sensitif.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Tambah syarat penapisan seperti penapisan jumlah untuk mengurangkan perdagangan yang tidak perlu yang disebabkan oleh pecah palsu.

  2. Menggabungkan penunjuk lain seperti KDJ dan MACD untuk membentuk isyarat gabungan untuk meningkatkan kualiti isyarat perdagangan.

  3. Uji tempoh pegangan yang berbeza dan optimumkan mengambil keuntungan dan strategi berhenti kerugian untuk meningkatkan lagi nisbah Sharpe dll.

  4. Sesuaikan parameter secara dinamik berdasarkan keadaan pasaran untuk membentuk mekanisme pengoptimuman parameter adaptif untuk menjadikan strategi lebih kukuh.

  5. Tambah modul perdagangan algoritma menggunakan pembelajaran mesin dan lain-lain untuk menghasilkan isyarat perdagangan secara automatik untuk mengurangkan campur tangan manusia.

Ringkasan

Logik keseluruhan strategi ini jelas dan mudah dilaksanakan untuk penjejakan trend jangka sederhana dan jangka panjang dengan kos rendah untuk mencapai alfa yang stabil. Tetapi terdapat juga risiko terjebak di sisi yang salah dari trend yang memerlukan pengoptimuman lanjut untuk meningkatkan ketahanan. Secara umum, strategi ini direka dari perspektif penjejakan trend dan bernilai penyelidikan dan penerapan lanjut. Dengan penyesuaian parameter yang betul, ia harus menghasilkan hasil perdagangan langsung yang baik.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

Lebih lanjut