Strategi Saluran Pembalikan Rendah CCI

Penulis:ChaoZhang, Tarikh: 2023-11-01 16:20:45
Tag:

img

Ringkasan

Strategi ini direka sebagai sistem perdagangan trend yang fleksibel berdasarkan penunjuk CCI. Ia boleh menghasilkan isyarat perdagangan berdasarkan persimpangan garis sifar CCI atau persimpangan jalur atas / bawah tersuai. Strategi ini membolehkan menetapkan stop loss tetap dan mengambil nisbah keuntungan, berdagang dalam bingkai masa tertentu, dan banyak lagi.

Logika Strategi

  1. Gunakan penyeberangan garis sifar CCI untuk menentukan trend pasaran.

  2. Tetapkan jalur CCI atas dan bawah yang disesuaikan. CCI yang melintasi di atas jalur atas adalah bullish dan melintasi di bawah jalur bawah adalah bearish.

  3. Pilihan untuk hanya berdagang dalam jangka masa tertentu dan menutup semua kedudukan di luar tempoh tersebut.

  4. Tetapkan stop loss tetap dan ambil peratusan keuntungan.

  5. Mesej amaran yang boleh disesuaikan untuk isyarat masuk dan keluar.

  6. Strategi yang sangat disesuaikan dengan parameter CCI yang boleh disesuaikan, jalur, berhenti, dll.

Analisis Kelebihan

  1. CCI sensitif terhadap perubahan harga, baik untuk menangkap pembalikan trend.

  2. Band khusus boleh diselaraskan untuk pasaran yang berbeza.

  3. Menyokong perdagangan dalam jangka masa yang berbeza dengan parameter yang dioptimumkan berdasarkan ciri.

  4. Rasio risiko / ganjaran yang ditetapkan dan risiko terhad.

  5. Parameter yang boleh disesuaikan sepenuhnya mengoptimumkan strategi untuk produk dan keadaan pasaran yang berbeza.

Analisis Risiko

  1. CCI terdedah kepada isyarat palsu, harus mengesahkan isyarat dengan petunjuk jangka masa yang lebih lama.

  2. Peratusan berhenti / mengambil tetap tidak dapat disesuaikan dengan keadaan pasaran yang berubah.

  3. Perdagangan dalam jangka masa tetap berisiko kehilangan peluang semasa tempoh julat.

  4. Pengoptimuman parameter yang kerap boleh membawa kepada perdagangan berlebihan atau perdagangan yang hilang.

  5. Faktor makro harus dipertimbangkan, pengoptimuman sahaja tidak mencukupi untuk menghilangkan risiko.

Arahan pengoptimuman

  1. Tambah penunjuk jangka masa yang lebih lama untuk mengesahkan isyarat CCI.

  2. Menggabungkan hentian/mengambil dinamik seperti ATR.

  3. Uji parameter dalam jangka masa yang berbeza dan cari tempoh kecekapan tinggi.

  4. Mengoptimumkan parameter dan jalur CCI untuk pasaran yang berubah.

  5. Pertimbangkan untuk memasukkan faktor lain seperti turun naik dan jumlah.

  6. Pilih jangka masa yang sesuai untuk produk yang didagangkan.

  7. Pertimbangkan pembelajaran mesin untuk mengotomatiskan pengoptimuman strategi.

Ringkasan

Secara keseluruhan, ini adalah sistem trend yang sangat fleksibel dan boleh disesuaikan. Kelebihan utama adalah menggunakan CCI untuk trend, jalur tersuai untuk mengehadkan risiko, berhenti tetap / mengambil, dan pemilihan jangka masa. Perlu melihat isyarat CCI palsu dan berhenti yang tidak fleksibel. Penambahbaikan masa depan boleh datang dari pengoptimuman parameter, penapisan isyarat, memilih jangka masa yang cekap, dan menggabungkan pembelajaran mesin untuk penyesuaian automatik terhadap perubahan pasaran, untuk mencapai pulangan yang lebih konsisten.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
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/
// © REV0LUTI0N

//@version=4

strategy(title="CCI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)


//CCI Code

length = input(20, minval=1, title="CCI Length")
src = input(close, title="Source")
ma = sma(src, length)
cci = (src - ma) / (0.015 * dev(src, length))


// Strategy Backtesting
startDate  = input(timestamp("2099-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-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


//Strategy Settings

//Strategy Settings - Enable Check Boxes
enableentry = input(true, title="Enter First Trade ASAP")
enableconfirmation = input(false, title="Wait For Cross To Enter First Trade")
enablezero =input(true, title="Use CCI Simple Cross Line For Entries & Exits")
enablebands = input(false, title="Use Upper & Lower Bands For Entries & Exits")

//Strategy Settings - Band Sources
ccisource = input(0, title="CCI Simple Cross")
upperbandsource =input(100, title="CCI Enter Long Band")
upperbandexitsource =input(100, title="CCI Exit Long Band")
lowerbandsource =input(-100, title="CCI Enter Short Band")
lowerbandexitsource =input(-100, title="CCI Exit Short Band")

//Strategy Settings - Crosses
simplecrossup = crossover(cci, ccisource)
simplecrossdown = crossunder(cci, ccisource)
uppercrossup = crossover(cci, upperbandsource)
lowercrossdown = crossunder(cci, lowerbandsource)
uppercrossdown = crossunder(cci, upperbandexitsource)
lowercrossup = crossover(cci, lowerbandexitsource)
upperstop = crossunder(cci, upperbandsource)
lowerstop = crossover(cci, lowerbandsource)


// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? 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

//Strategy Execution - Simple Line Cross
if (cci > ccisource and enablezero and enableentry and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (cci < ccisource and enablezero and enableentry and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

if (simplecrossup and enablezero and enableconfirmation and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (simplecrossdown and enablezero and enableconfirmation and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

//Strategy Execution - Upper and Lower Band Entry
if (uppercrossup and enablebands and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (lowercrossdown and enablebands and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

//Strategy Execution - Upper and Lower Band Exit
if strategy.position_size > 0 and uppercrossdown and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowercrossup and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Upper and Lower Band Stops
if strategy.position_size > 0 and upperstop and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowerstop and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Close Trade At End Of Time Frame    
if strategy.position_size > 0 and timetoclose and enableclose and time_cond
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose and time_cond
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Stop Loss and Take Profit
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)



Lebih lanjut