Double Channel Kitchen - Strategi Perdagangan Algoritma Berfokus pada Pertumbuhan Kekayaan

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

Gambaran umum

Strategi Double Channel Kitchen menggunakan indikator Supertrend dan StochRSI untuk menganalisis tren harga dan kondisi overbought/oversold dalam jangka waktu yang berbeda, untuk mengidentifikasi sinyal beli dan jual potensial.

Logika Strategi

Strategi ini menggunakan indikator Supertrend dalam jangka waktu 1 jam dan 4 jam untuk menentukan arah tren harga. Ketika Supertrends dalam kedua jangka waktu menunjuk ke arah yang sama, itu menandakan tren harga yang relatif kuat.

Selain itu, indikator StochRSI digunakan untuk mendeteksi kondisi overbought/oversold. StochRSI menggabungkan kekuatan dari indikator RSI dan Stochastic Oscillator. Ketika garis StochRSI melintasi di atas ambang overbought, itu menunjukkan kondisi oversold yang mungkin terjadi dalam harga. Ketika garis StochRSI melintasi di bawah ambang oversold, itu menandakan kondisi overbought potensial.

Seiring dengan konfirmasi dua Supertrend dari tren harga, jika StochRSI juga menunjukkan sinyal overbought/oversold, ini merupakan kesempatan yang baik untuk membeli atau menjual. Untuk memverifikasi sinyal lebih lanjut, periode lookback dilaksanakan di mana setelah sinyal StochRSI overbought/oversold, pergerakan harga dalam beberapa bar terakhir diperiksa - jika itu mengkonfirmasi sinyal StochRSI, maka pembelian atau penjualan akan dipicu.

Singkatnya, strategi ini menggunakan kerangka waktu ganda Supertrend untuk menentukan tren utama, dan StochRSI untuk mengidentifikasi pembalikan lokal, untuk melakukan perdagangan mengikuti tren dalam jangka menengah hingga panjang.

Keuntungan dari Strategi

  • Menggunakan indikator di beberapa kerangka waktu membantu menyaring sinyal palsu
  • Menggabungkan kekuatan Supertrend dan StochRSI untuk analisis tren dan overbought/oversold
  • Verifikasi kembali menghindari perdagangan yang tidak perlu
  • Operasi jangka menengah hingga panjang menghindari perdagangan yang berlebihan dan slippage
  • Mudah dipahami pengaturan indikator ganda, dengan pengaturan parameter yang fleksibel

Risiko dari Strategi

  • Pasar yang bergolak tanpa tren jangka menengah dan panjang yang jelas dapat menghasilkan sinyal palsu
  • Periode review yang berlebihan dapat menyebabkan kehilangan peluang masuk yang baik
  • Pengaturan parameter StochRSI yang buruk dapat menyebabkan sinyal overbought/oversold yang salah
  • Parameter Supertrend yang tidak benar dapat menyebabkan penilaian arah tren yang salah
  • Sinyal mekanik berikut mengabaikan perubahan mendasar besar

Peningkatan:

  • Mengoptimalkan kombinasi parameter StochRSI dan Supertrend
  • Penyesuaian periode review berdasarkan kondisi pasar yang berbeda
  • Tambahkan indikator volume untuk verifikasi sinyal
  • Memantau peristiwa berita utama, intervensi manual bila diperlukan

Bidang Peningkatan

  • Tambahkan lebih banyak indikator Supertrend di berbagai kerangka waktu untuk skrining multi-tahap
  • Ganti StochRSI dengan indikator overbought/oversold lainnya misalnya KD, RSI
  • Menggabungkan strategi stop loss untuk mengendarai tren
  • Gabungkan rata-rata bergerak utama misalnya MA 30 periode untuk menentukan tren utama
  • Mengembangkan optimasi parameter otomatis untuk ketahanan

Kesimpulan

Strategi Double Channel Kitchen secara efektif memanfaatkan Supertrend untuk tren utama dan StochRSI untuk pembalikan lokal, untuk menerapkan sistem trend berikut yang dapat diandalkan. Strategi ini berfokus pada kepemilikan jangka menengah dan panjang untuk menghindari perdagangan dan slippage yang berlebihan. Melalui optimasi parameter, menggabungkan indikator, strategi ini dapat mencapai hasil positif yang stabil. Namun investor harus tetap memperhatikan perubahan fundamental utama, daripada hanya mengikuti sinyal indikator secara mekanis. Secara keseluruhan, strategi ini menawarkan pendekatan analisis teknis yang efektif bagi investor aktif untuk menghasilkan pengembalian positif dengan kesadaran risiko yang tepat.


/*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 banyak