Esta estratégia utiliza dois indicadores, o Supertrend e o StochRSI, para analisar tendências de preços e tendências de sobrevenda em diferentes períodos de tempo, a fim de identificar potenciais sinais de compra e venda. A estratégia visa negociar seguindo a direção das principais tendências, capturando a direção principal dos preços nas linhas médias e longas.
A estratégia usa o indicador de Supertrend em dois períodos de tempo de 1 hora e 4 horas para determinar a direção da tendência dos preços. Quando os dois períodos de tempo de Supertrend estão na mesma direção, podemos considerar que uma tendência de preços mais forte ocorreu.
Além disso, a estratégia usa o indicador StochRSI para determinar se há sobrevenda ou sobrevenda. O indicador StochRSI combina os benefícios dos dois indicadores RSI e Stochastic Oscillator.
Ao mesmo tempo em que a dupla Supertrend confirma a direção da tendência de preços, se o StochRSI também mostra um fenômeno de sobrevenda e sobrevenda, então é um bom momento para comprar ou vender. Para verificar ainda mais o sinal, a estratégia também define um período de retorno, após o StochRSI mostrar um sinal de sobrevenda e sobrevenda, é necessário retroceder um certo número de linhas K. Se a tendência de preços confirmar o sinal do StochRSI durante esse período de tempo, então será a compra ou venda.
Em geral, a estratégia combina o uso do Supertrend de dois quadros de tempo para determinar a tendência maior e o método StochRSI para determinar o ajuste local, fazendo negociações de seguimento de tendência na linha média e longa.
Métodos de otimização:
A estratégia de cozinha de dois canais aproveita ao máximo o método da Supertrend para determinar a tendência geral e o ajustamento local do StochRSI para determinar uma estratégia de acompanhamento de tendência confiável. A estratégia, baseada na manipulação de linha média, pode evitar efetivamente a perda de receita causada pela troca frequente. Através de meios como otimização de parâmetros e verificação de indicadores de combinação, a estratégia pode obter um retorno positivo estável.
/*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)