Strategi perdagangan automatik algoritma dwi saluran


Tarikh penciptaan: 2023-10-10 15:25:53 Akhirnya diubah suai: 2023-10-10 15:25:53
Salin: 0 Bilangan klik: 396
1
fokus pada
1166
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan kedua-dua indikator Supertrend dan StochRSI untuk menganalisis trend harga dan overbought dan oversold dalam tempoh masa yang berbeza untuk mengenal pasti isyarat beli dan jual yang berpotensi. Strategi ini bertujuan untuk berdagang mengikut arah trend utama dan menangkap arah utama harga pada garis tengah dan panjang.

Prinsip Strategi

Strategi ini menggunakan indikator Supertrend untuk dua tempoh masa 1 jam dan 4 jam untuk menentukan arah trend harga. Apabila kedua-dua tempoh masa Supertrend berada di arah yang sama, kita boleh menganggap bahawa terdapat trend harga yang lebih kuat.

Selain itu, strategi menggunakan indikator StochRSI untuk menentukan sama ada terdapat keadaan jual beli yang berlebihan. Indikator StochRSI menggabungkan kelebihan kedua-dua indikator RSI dan Stochastic Oscillator.

Jika StochRSI juga menunjukkan fenomena overbought dan oversold pada masa yang sama, maka ini adalah masa yang baik untuk membeli atau menjual. Untuk mengesahkan isyarat lebih lanjut, strategi ini juga menetapkan tempoh pengembalian, selepas StochRSI menunjukkan isyarat overbought dan oversold, perlu mengembalikan beberapa baris K, jika pergerakan harga dalam tempoh ini mengesahkan isyarat StochRSI, maka ia akan mencetuskan membeli atau menjual.

Secara keseluruhannya, strategi ini menggabungkan penggunaan Supertrend dalam bingkai masa dua untuk menentukan trend besar, dan kaedah StochRSI untuk menentukan penyesuaian tempatan, untuk melakukan perdagangan jenis trend di garis tengah dan panjang.

Kelebihan Strategik

  • Menggunakan indikator kitaran masa berbilang untuk menilai, anda boleh menyaring isyarat yang salah dengan berkesan
  • Kelebihan gabungan Supertrend dan StochRSI untuk menilai trend dan terlalu banyak membeli terlalu banyak menjual
  • Tetapkan tempoh pengulangan untuk mengesahkan isyarat, untuk mengelakkan transaksi yang tidak perlu
  • Menggunakan strategi operasi talian panjang dan sederhana untuk mengurangkan kehilangan titik tergelincir yang disebabkan oleh terlalu banyak perdagangan
  • Kombinasi dua indikator yang mudah difahami, parameter yang boleh disesuaikan secara fleksibel

Risiko Strategik

  • Pada masa kejutan pasaran, trend garis tengah tidak jelas, mungkin terdapat lebih banyak isyarat salah
  • Terlalu lama untuk kembali ke masa lalu, mungkin anda terlepas peluang membeli/menjual yang lebih baik
  • Parameter StochRSI tidak betul dan mungkin memberi isyarat overbought dan oversold yang salah
  • Peraturan parameter Supertrend yang tidak betul, mungkin menilai arah trend yang salah
  • Dengan mengikuti isyarat indikator secara automatik, perubahan asas yang besar mudah diabaikan

Kaedah pengoptimuman:

  • Mengoptimumkan kombinasi parameter StochRSI dan Supertrend
  • Sesuaikan panjang kitaran pengembalian dalam pelbagai persekitaran
  • Memeriksa dengan penunjuk seperti jumlah urus niaga
  • Perhatian kepada berita asas yang penting, campur tangan apabila perlu

Arah pengoptimuman strategi

  • Tambah lebih banyak indikator Supertrend untuk tempoh masa yang berbeza, membentuk penyaringan pelbagai peringkat
  • Menggantikan indikator StochRSI dengan indikator jenis overbought dan oversold lain seperti KD, RSI dan sebagainya
  • Meningkatkan strategi henti rugi bergerak untuk mendapatkan keuntungan yang lebih besar mengikut trend
  • Menggabungkan penunjuk rata-rata penting, seperti rata-rata 30 kitaran, untuk menilai trend besar
  • Membangunkan program pengoptimuman parameter automatik untuk menjadikan strategi lebih kasar

ringkaskan

Strategi dapur dapur dua saluran memanfaatkan kaedah Supertrend untuk menentukan trend besar dan penilaian StochRSI untuk penyesuaian tempatan, untuk mewujudkan strategi pemantauan trend yang boleh dipercayai. Strategi ini mengutamakan pengendalian garis tengah, yang dapat menghalang kerugian pendapatan yang disebabkan oleh perdagangan yang terlalu kerap.

Kod 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)