Dapur Saluran Berganda - Strategi Dagangan Algoritma Berfokus pada Pertumbuhan Kekayaan

Penulis:ChaoZhang, Tarikh: 2023-10-10 15:25:53
Tag:

Ringkasan

Strategi Double Channel Kitchen menggunakan penunjuk Supertrend dan StochRSI untuk menganalisis trend harga dan keadaan overbought/oversold dalam jangka masa yang berbeza, untuk mengenal pasti isyarat beli dan jual yang berpotensi. Strategi ini bertujuan untuk berdagang di sepanjang arah trend utama dan menangkap pergerakan harga utama dalam jangka sederhana hingga panjang.

Logika Strategi

Strategi ini menggunakan penunjuk Supertrend dalam kedua-dua bingkai masa 1 jam dan 4 jam untuk menentukan arah trend harga. Apabila Supertrends dalam kedua-dua bingkai masa menunjuk ke arah yang sama, ia menandakan trend harga yang agak kuat.

Di samping itu, penunjuk StochRSI digunakan untuk mengesan keadaan overbought / oversold. StochRSI menggabungkan kekuatan kedua-dua penunjuk RSI dan Stochastic Oscillator. Apabila garis StochRSI melintasi di atas ambang overbought, ia menunjukkan keadaan oversold yang mungkin dalam harga. Apabila garis StochRSI melintasi di bawah ambang oversold, ia menandakan keadaan overbought yang berpotensi.

Bersama dengan pengesahan trend harga Supertrend berganda, jika StochRSI juga menunjukkan isyarat overbought / oversold, ia memberikan peluang yang baik untuk membeli atau menjual. Untuk mengesahkan isyarat lebih lanjut, tempoh melihat balik dilaksanakan di mana selepas isyarat overbought / oversold StochRSI, pergerakan harga dalam beberapa bar yang lalu diperiksa - jika ia mengesahkan isyarat StochRSI, maka pembelian atau penjualan akan dicetuskan.

Ringkasnya, strategi ini menggunakan bingkai masa ganda Supertrend untuk menentukan trend utama, dan StochRSI untuk mengenal pasti pembalikan tempatan, untuk menjalankan perdagangan trend-mengikut trend dalam jangka sederhana hingga panjang.

Kelebihan Strategi

  • Menggunakan penunjuk di pelbagai jangka masa membantu menapis isyarat palsu
  • Menggabungkan kekuatan Supertrend dan StochRSI untuk analisis trend dan overbought / oversold
  • Pemantauan kembali mengelakkan perdagangan yang tidak perlu
  • Operasi jangka sederhana hingga panjang mengelakkan perdagangan yang berlebihan dan slippage
  • Mudah difahami tetapan penunjuk dua, dengan penyesuaian parameter yang fleksibel

Risiko Strategi

  • Pasaran yang bergelora tanpa trend jangka menengah dan panjang yang jelas boleh menghasilkan isyarat palsu
  • Tempoh yang terlalu lama boleh menyebabkan peluang kemasukan yang baik hilang
  • Tetapan parameter StochRSI yang buruk boleh menyebabkan isyarat overbought/oversold yang salah
  • Parameter Supertrend yang tidak betul boleh menyebabkan penilaian arah trend yang salah
  • Isyarat mekanikal berikut mengabaikan perubahan asas utama

Penambahbaikan:

  • Mengoptimumkan gabungan parameter StochRSI dan Supertrend
  • Penyesuaian tempoh semula berdasarkan keadaan pasaran yang berbeza
  • Tambah penunjuk jumlah untuk pengesahan isyarat
  • Memantau peristiwa berita utama, campur tangan manual jika perlu

Kawasan Peningkatan

  • Tambah lebih banyak penunjuk Supertrend dalam jangka masa yang berbeza untuk penyaringan pelbagai peringkat
  • Ganti StochRSI dengan penunjuk overbought/oversold lain e.g. KD, RSI
  • Menggabungkan strategi stop loss untuk menunggang trend
  • Menggabungkan purata bergerak utama e.g. MA 30 tempoh untuk menentukan trend utama
  • Membangunkan pengoptimuman parameter automatik untuk ketahanan

Kesimpulan

Strategi Double Channel Kitchen secara berkesan menggunakan Supertrend untuk trend utama dan StochRSI untuk pembalikan tempatan, untuk melaksanakan sistem trend berikut yang boleh dipercayai. Ia memberi tumpuan kepada pegangan jangka menengah dan panjang untuk mengelakkan perdagangan yang berlebihan dan tergelincir. Melalui pengoptimuman parameter, menggabungkan penunjuk, strategi ini dapat mencapai hasil positif yang mantap. Walau bagaimanapun, pelabur masih harus berhati-hati terhadap perubahan asas utama, dan bukannya hanya mengikuti isyarat penunjuk secara mekanikal. Secara keseluruhan, strategi ini menawarkan pendekatan analisis teknikal yang berkesan untuk pelabur aktif untuk menjana pulangan positif dengan kesedaran risiko yang betul.


/*backtest
start: 2023-09-09 00:00:00
end: 2023-10-09 00:00:00
period: 4h
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/
// © Baby_whale_to_moon

//@version=5
strategy('Kitchen [ilovealgotrading]', overlay=true, format=format.price, initial_capital = 1000)

// BACKTEST DATE
Start_Time = input(defval=timestamp('01 January 2017 13:30 +0000'), title='Start_Time', group = " ################# BACKTEST DATE ################ " )
End_Time = input(defval=timestamp('30 April 2024 19:30 +0000'), title='End_Time', group = " ################# BACKTEST DATE ################ " )

// supertrend 
atrPeriod = input(10, 'ATR Length', group = " #################  Supertrend  ################ ")
factor = input(3, 'Factor', group = " #################  Supertrend  ################ ")

time1 = input.string(title='Short Time Period', defval='07 1h', options=['01 1m','02 3m','03 5m',  '04 15m', '05 30m', '06 45m', '07 1h', '08 2h', '09 3h', '10 4h', '11 1D', '12 1W' ], group = " #################  Supertrend  ################ ",tooltip = "this timeframe is the value of our short-time supertrend indicator")
time2 = input.string(title='Long Time Period', defval='10 4h', options=[ '01 1m','02 3m','03 5m', '04 15m', '05 30m', '06 45m', '07 1h', '08 2h', '09 3h', '10 4h', '11 1D', '12 1W' ], group = " #################  Supertrend  ################ ",tooltip = "this timeframe is the value of our long-time supertrend indicator")


res(Resolution) =>
    if Resolution == '00 Current'
        timeframe.period
    else
        if Resolution == '01 1m'
            '1'
        else
            if Resolution == '02 3m'
                '3'
            else
                if Resolution == '03 5m'
                    '5'
                else
                    if Resolution == '04 15m'
                        '15'
                    else
                        if Resolution == '05 30m'
                            '30'
                        else
                            if Resolution == '06 45m'
                                '45'
                            else
                                if Resolution == '07 1h'
                                    '60'
                                else
                                    if Resolution == '08 2h'
                                        '120'
                                    else
                                        if Resolution == '09 3h'
                                            '180'
                                        else
                                            if Resolution == '10 4h'
                                                '240'
                                            else
                                                if Resolution == '11 1D'
                                                    '1D'
                                                else
                                                    if Resolution == '12 1W'
                                                        '1W'
                                                    else
                                                        if Resolution == '13 1M'
                                                            '1M'


// supertrend Long time period 
[supertrend2, direction2] = request.security(syminfo.tickerid, res(time2), ta.supertrend(factor, atrPeriod))
bodyMiddle4 = plot((open + close) / 2, display=display.none)
upTrend2 = plot(direction2 < 0 ? supertrend2 : na, 'Up Trend', color=color.new(color.green, 0), style=plot.style_linebr, linewidth=2)
downTrend2 = plot(direction2 < 0 ? na : supertrend2, 'Down Trend', color=color.new(color.red, 0), style=plot.style_linebr, linewidth=2)

// supertrend short time period 
[supertrend1, direction1] = request.security(syminfo.tickerid, res(time1), ta.supertrend(factor, atrPeriod))
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction1 < 0 ? supertrend1 : na, 'Up Trend', color=color.new(color.yellow, 0), style=plot.style_linebr)
downTrend = plot(direction1 < 0 ? na : supertrend1, 'Down Trend', color=color.new(color.orange, 0), style=plot.style_linebr)


// Stochastic RSI
low_limit_stoch_rsi = input.float(title = 'Stoch Rsi Low Limit', step=0.5, defval=15, group = " #################  Stoch RSI   ################ ", tooltip = "when Stock rsi value crossover Low Limit value we get Long")
up_limit_stoch_rsi = input.float(title = 'Stoch Rsi Up Limit', step=0.5, defval=85, group = " #################  Stoch RSI   ################ ", tooltip = "when Stock rsi value crossunder Up Limit value we get Short")
stocrsi_back_length = input.int(20, 'Stoch Rsi retroactive length', minval=1, group = " #################  Stoch RSI   ################ ", tooltip = "How many candles are left behind, even if there is a buy or sell signal, it will be valid now")
smoothK = input.int(3, 'Stochastic RSI K', minval=1, group = " #################  Stoch RSI   ################ ")
lengthRSI = input.int(14, 'RSI Length', minval=1, group = " #################  Stoch RSI   ################ ")
lengthStoch = input.int(14, 'Stochastic Length', minval=1, group = " #################  Stoch RSI   ################ ")
src_rsi = input(close, title='RSI Source', group = " #################  Stoch RSI   ################ ")
rsi1 = request.security(syminfo.tickerid, '240', ta.rsi(src_rsi, lengthRSI))
k = request.security(syminfo.tickerid, '240', ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK))

// Strategy settings 
dollar = input.float(title='Dollar Cost Per Position ', defval=20000, group = " #################  Strategy Settings  ################ ")
trade_direction = input.string(title='Trade_direction', group = " #################  Strategy Settings  ################ ", options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
Long_message_open = input('Long Open', title = "Long Open Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Long Open Message ")
Short_message_open = input('Short Open', title = "Short Open Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Short Open Message ")
Long_message_close = input('Long Close', title = "Long Close Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Long Close Message ")
Short_message_close = input('Short Close', title = "Short Close Message", group = " #################  Strategy Settings  ################ ", tooltip = "if you write your alert window this code {{strategy.order.alert_message}} .When trigger Long signal you will get dynamically what you pasted here for Short Close Message ")

Time_interval = true
bgcolor(Time_interval ? color.rgb(255, 235, 59, 95) : na)

back_long = 0
back_short = 0

for i = 1 to stocrsi_back_length by 1
    if ta.crossover(k, low_limit_stoch_rsi)[i] == true 
        back_long += i
        back_long
    if ta.crossunder(k, up_limit_stoch_rsi)[i] == true 
        back_short += i
        back_short

// bgcolor(back_long>0?color.rgb(153, 246, 164, 54):na)
// bgcolor(back_short>0?color.rgb(246, 153, 153, 54):na)

buy_signal = false
sell_signal = false

if direction2 < 0 and direction1 < 0 and back_long > 0
    buy_signal := true
    buy_signal

if direction2 > 0 and direction1 > 0 and back_short > 0
    sell_signal := true
    sell_signal


//bgcolor(buy_signal  ? color.new(color.lime,90) : na ,title="BUY bgcolor")
plotshape( buy_signal[1] == false and  strategy.opentrades == 0 and Time_interval and buy_signal  ? supertrend2 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)

//bgcolor(sell_signal  ? color.new(color.red,90) : na ,title="SELL bgcolor")
plotshape(sell_signal[1] == false and strategy.opentrades == 0 and Time_interval and sell_signal  ? supertrend2 : na , title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)


// Strategy entries 
if strategy.opentrades == 0 and Time_interval and buy_signal and ( trade_direction == 'LONG' or trade_direction == 'BOTH')
    strategy.entry('Long_Open', strategy.long, qty=dollar / close, alert_message=Long_message_open)

if strategy.opentrades == 0 and Time_interval and sell_signal and ( trade_direction == 'SHORT' or trade_direction == 'BOTH')
    strategy.entry('Short_Open', strategy.short, qty=dollar / close, alert_message=Short_message_open)


// Strategy Close
if close < supertrend1 and strategy.position_size > 0 
    strategy.exit('Long_Close',from_entry = "Long_Open", stop=close, qty_percent=100, alert_message=Long_message_close)

if close > supertrend1 and strategy.position_size < 0 
    strategy.exit('Short_Close',from_entry = "Short_Open", stop=close, qty_percent=100, alert_message=Short_message_close)



Lebih lanjut