Strategi Perdagangan Otomatis Algoritma Saluran Ganda


Tanggal Pembuatan: 2023-10-10 15:25:53 Akhirnya memodifikasi: 2023-10-10 15:25:53
menyalin: 0 Jumlah klik: 639
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggunakan dua indikator, Supertrend dan StochRSI, untuk menganalisis tren harga dan overbought dan oversold pada periode waktu yang berbeda untuk mengidentifikasi sinyal buy dan sell potensial. Strategi ini bertujuan untuk melakukan perdagangan mengikuti arah tren utama dan menangkap arah utama harga di garis tengah dan panjang.

Prinsip Strategi

Strategi ini menggunakan indikator Supertrend dari dua periode waktu 1 jam dan 4 jam untuk menentukan arah tren harga. Ketika dua periode waktu Supertrend berada di arah yang sama, kita dapat menganggap ada tren harga yang lebih kuat.

Selain itu, strategi menggunakan indikator StochRSI untuk menentukan apakah ada oversold. Indikator StochRSI menggabungkan keuntungan dari kedua indikator RSI dan Stochastic Oscillator. Ketika harga melewati garis overbought di bagian atas indikator StochRSI, ini menunjukkan kemungkinan adanya oversold.

Untuk lebih memverifikasi sinyal, strategi ini juga mengatur periode mundur, setelah StochRSI menunjukkan sinyal overbought dan oversold, perlu mundur sejumlah K-line, dan jika pergerakan harga selama ini mengkonfirmasi sinyal StochRSI, maka akan memicu pembelian atau penjualan.

Secara keseluruhan, strategi ini menggabungkan penggunaan Supertrend pada dua frame waktu untuk menentukan tren besar, dan metode StochRSI untuk menentukan penyesuaian lokal, untuk melakukan perdagangan jenis trend-following pada garis tengah-panjang.

Keunggulan Strategis

  • Menggunakan indikator siklus waktu ganda untuk menilai, dapat secara efektif memfilter sinyal yang salah
  • Keuntungan dari indikator Supertrend dan StochRSI yang terintegrasi, untuk menilai tren dan menilai overbought dan oversold
  • Menetapkan periode mundur untuk verifikasi sinyal untuk menghindari transaksi yang tidak perlu
  • Menggunakan strategi operasi medium dan panjang dapat mengurangi kehilangan slippage yang disebabkan oleh terlalu sering berdagang
  • Kombinasi indikator ganda yang mudah dipahami, parameter yang dapat disesuaikan secara fleksibel

Risiko Strategis

  • Pada saat bergejolak, garis tengah dan panjang tidak jelas, dan mungkin ada lebih banyak sinyal yang salah.
  • Terlalu lama untuk memutar waktu, Anda mungkin melewatkan kesempatan yang lebih baik untuk membeli/menjual
  • Parameter StochRSI tidak disetel dengan benar, dapat menyebabkan sinyal overbought dan oversold yang salah
  • Parameter Supertrend tidak disetel dengan benar dan dapat menilai arah tren yang salah
  • Mengikuti sinyal indikator secara mekanis, mudah mengabaikan perubahan fundamental yang signifikan

Metode optimasi:

  • Mengoptimalkan kombinasi parameter StochRSI dan Supertrend
  • Sesuaikan panjang siklus pengembalian dalam lingkungan disk yang berbeda
  • Verifikasi dengan indikator seperti volume transaksi
  • Perhatian terhadap berita penting dan mendasar, intervensi proaktif jika diperlukan

Arah optimasi strategi

  • Menambahkan lebih banyak indikator Supertrend dari periode waktu yang berbeda, membentuk pemfilteran multi-level
  • Mengganti StochRSI dengan indikator lain dari tipe overbought/oversold, seperti KD, RSI, dan lain-lain
  • Meningkatkan strategi Stop Loss Mobile untuk mendapatkan keuntungan yang lebih besar sesuai dengan tren
  • Menggabungkan indikator rata-rata penting, seperti rata-rata 30 periode, untuk menilai tren besar
  • Mengembangkan program optimasi parameter otomatis untuk membuat strategi lebih kasar

Meringkaskan

Strategi yang menggunakan Supertrend untuk menilai tren besar dan StochRSI untuk menilai penyesuaian lokal adalah strategi pelacakan tren yang dapat diandalkan. Strategi ini didasarkan pada pengendalian garis tengah dan dapat secara efektif menghindari kerugian pendapatan yang disebabkan oleh perdagangan yang terlalu sering. Strategi ini dapat memperoleh keuntungan positif yang stabil melalui pengoptimalan parameter dan pengujian indikator gabungan.

Kode Sumber Strategi
/*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)