Strategi Perdagangan Breakout Contrarian

Penulis:ChaoZhang, Tarikh: 2023-10-25 12:09:40
Tag:

img

Ringkasan

Strategi perdagangan pecah yang bertentangan adalah strategi yang mengambil isyarat bertentangan berdasarkan kenaikan atau kejatuhan harga berturut-turut untuk pergi lama apabila syarat pendek dipenuhi atau pergi pendek apabila syarat panjang dipenuhi.

Logika Strategi

Strategi ini dilaksanakan terutamanya melalui bahagian-bahagian berikut:

  1. Tetapkan tempoh berturut-turut untuk kenaikan dan penurunan harga, iaitu berturut-turutBarsUp dan berturut-turutBarsDown.

  2. Mengira kenaikan dan kejatuhan harga semasa berbanding dengan harga tempoh sebelumnya Mengira panjang kenaikan atau kejatuhan berturut-turut semasa naik dan turun berdasarkan kenaikan dan kejatuhan.

  3. Tetapkan julat masa backtesting untuk mengehadkan strategi untuk beroperasi hanya dalam masa backtesting melalui time_cond.

  4. Tetapkan masa dagangan harian untuk mengehadkan isyarat dagangan yang dikeluarkan hanya dalam jangka masa yang ditetapkan melalui timetobuy.

  5. Apabila kitaran naik berturut-turut mencapai panjang yang ditetapkan, mengeluarkan isyarat panjang melalui strategi.panjang. Apabila kitaran jatuh berturut-turut mencapai panjang yang ditetapkan, mengeluarkan isyarat pendek melalui strategi.pendek.

  6. Harga stop loss dan take profit boleh ditetapkan. Tetapkan berhenti jangka pendek untuk kedudukan panjang dan berhenti jangka panjang untuk kedudukan pendek. Tetapkan mengambil keuntungan jangka panjang untuk kedudukan panjang dan mengambil keuntungan jangka pendek untuk kedudukan pendek.

  7. Mesej isyarat perdagangan boleh ditetapkan semasa menghantar.

  8. Mengeluarkan isyarat panjang atau pendek apabila syarat dipenuhi berdasarkan parameter dan tahap harga di atas.

Analisis Kelebihan

Strategi keluar yang bertentangan ini mempunyai kelebihan berikut:

  1. Mengambil titik pembalikan harga. Operasi bertentangan boleh memperoleh keuntungan yang baik. Operasi ke arah yang bertentangan apabila harga membentuk trend boleh mendapat keuntungan pada pembalikan harga.

  2. Parameter yang boleh dikonfigurasikan fleksibel. Parameter seperti tempoh berturut-turut boleh diselaraskan, tahap stop loss dan mengambil keuntungan boleh ditetapkan, bingkai masa perdagangan boleh dibatasi. Parameter boleh dioptimumkan mengikut keadaan pasaran.

  3. Menetapkan stop loss dan mengambil keuntungan terlebih dahulu membantu mengawal risiko perdagangan selepas pergi panjang atau pendek.

  4. Mesej perdagangan memudahkan perdagangan automatik. Tetapan mesej isyarat perdagangan memudahkan integrasi dengan sistem perdagangan automatik.

  5. Julat masa pengujian belakang memudahkan pengujian strategi. Menambah tetapan julat masa pengujian belakang membolehkan pengamatan mudah prestasi strategi di bawah keadaan pasaran yang berbeza.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko untuk diperhatikan:

  1. Elakkan peristiwa berita penting. Trend harga tidak dapat diramalkan semasa pengumuman utama, menyebabkan isyarat dan kerugian panjang dan pendek secara serentak. Keluaran ekonomi utama harus dielakkan.

  2. Kurang berkesan apabila pembalikan tidak jelas. Kurang berkesan apabila trend tidak jelas, perdagangan sebaliknya harus digunakan dengan berhati-hati.

  3. Risiko keterlaluan data pengujian balik. Pengoptimuman harus mengelakkan terlalu bergantung pada data pengujian balik, yang tidak mewakili trend masa depan. Parameter harus diselaraskan dengan sewajarnya semasa perdagangan langsung.

  4. Kelayakan perdagangan yang tinggi adalah risiko perdagangan berlebihan. Tetapan kitaran pendek boleh menyebabkan kekerapan perdagangan yang berlebihan dan risiko untuk keuntungan yang stabil dalam jangka panjang.

  5. Stop loss dan mengambil strategi keuntungan boleh dioptimumkan untuk mengurangkan risiko.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Tambah pengesanan trend untuk mengelakkan pembalikan rawak di pasaran bukan trend, menggunakan turun naik, saluran dan lain-lain untuk mengukur trend dan menangkap pembalikan.

  2. Mengoptimumkan berhenti dan mengambil untuk menyesuaikan berdasarkan turun naik pasaran, menggunakan kaedah berasaskan peratusan, ATR atau lain-lain kaedah penyesuaian.

  3. Tambah analisis jumlah untuk mengelakkan isyarat palsu dari corak harga sahaja.

  4. Pembahagian portfolio ke pelbagai produk untuk mengurangkan risiko aset tunggal.

  5. Pengoptimuman parameter dan pembelajaran mesin. Kumpulkan lebih banyak data sejarah dan gunakan pembelajaran mesin untuk mengoptimumkan parameter secara automatik untuk strategi yang lebih mantap.

Kesimpulan

Strategi penembusan kontrarian memberikan isyarat perdagangan yang baik dengan menangkap pembalikan harga melalui operasi kontrarian. Kelebihan termasuk konfigurasi yang fleksibel, kawalan risiko dan kesesuaian untuk perdagangan automatik. Tetapi risiko ada dan peningkatan berterusan dalam parameter dan logik diperlukan untuk keuntungan stabil jangka panjang.


/*backtest
start: 2023-10-17 00:00:00
end: 2023-10-24 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)






Lebih lanjut