Esta estratégia combina os quatro indicadores RSI, MFI, Stoch RSI e MACD para implementar a negociação intradiária de bitcoin. As ordens só serão colocadas quando vários indicadores derem sinais de compra ou venda simultaneamente para controlar os riscos.
O indicador RSI é usado para determinar se o mercado está sobrecomprado ou sobrevendido.
O indicador de IFM avalia o fluxo de capitais no mercado, gerando um sinal de compra quando a IFM está abaixo de 23 e um sinal de venda quando a IFM está acima de 80.
O indicador Stoch RSI determina se o mercado está sobrecomprado ou sobrevendido.
O indicador MACD avalia a tendência e o impulso do mercado. Ele gera um sinal de compra quando a linha rápida está abaixo da linha lenta e o histograma é negativo, e um sinal de venda para o cenário oposto.
A combinação de quatro indicadores principais melhora a precisão do sinal e evita perdas causadas pela falha de um único indicador.
As ordens são colocadas apenas quando vários indicadores emitem sinais simultaneamente, o que reduz muito a probabilidade de falsos sinais.
A adoção de estratégias de negociação intradiária evita riscos overnight e reduz os custos de capital.
A frequência de negociação da estratégia pode ser relativamente baixa, com certos riscos temporais. Os parâmetros do indicador podem ser adequadamente relaxados para aumentar o número de negociações.
Ainda existe a probabilidade de que os indicadores possam dar sinais errados. Algoritmos de aprendizado de máquina podem ser introduzidos para ajudar a julgar a confiabilidade dos sinais do indicador.
Os parâmetros dos indicadores podem ser ajustados em conformidade ou pode ser adicionada mais lógica dos indicadores.
Adicionar a funcionalidade de parâmetros de indicador adaptativo. Ajustar os parâmetros de indicador em tempo real com base na volatilidade do mercado e velocidade de mudança.
Adicione a lógica de stop loss. Stop loss de saída se as perdas excederem uma certa porcentagem para controlar eficazmente a perda única.
Incorporar indicadores de sentimento. Aumentar julgamentos multidimensionais, como o calor do mercado e medo do mercado para melhorar o espaço de lucro estratégico.
Ao verificar os sinais através de quatro principais indicadores, esta estratégia pode efetivamente reduzir a taxa de sinal falso e é uma estratégia de lucro relativamente estável de alta frequência.
/*backtest start: 2023-11-29 00:00:00 end: 2023-12-06 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('John Day Stop Loss', overlay=false, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency='USD', precision=2) strategy.risk.allow_entry_in(strategy.direction.long) from_day = input.int(defval=1, title='From Day', minval=1) from_month = input.int(defval=1, title='From Month', minval=1) from_year = input.int(defval=2021, title='From Year', minval=2020) to_day = input.int(defval=1, title='To Day', minval=1) to_month = input.int(defval=1, title='To Month', minval=1) to_year = input.int(defval=2025, title='To Year', minval=2020) time_cond = time > timestamp(from_year, from_month, from_day, 00, 00) and time < timestamp(to_year, to_month, to_day, 00, 00) //time_cond = true //Stop Loss longProfitPerc = input.float(title="Stop Loss Profit (%)", defval=2.1) / 100 longExitPrice = strategy.position_avg_price * (1 - longProfitPerc) //RSI - yellow up = ta.rma(math.max(ta.change(close), 0), 14) down = ta.rma(-math.min(ta.change(close), 0), 14) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) plot(rsi, "RSI", color=#00FFFF) buy_rsi = true // rsi < 40 sell_rsi = true //rsi > 70 //MFI - cyan mf = ta.mfi(hlc3, 14) plot(mf, "MF", color=#FFFF00) buy_mfi = mf < input.int(defval=23, title='Max MF', minval=1) sell_mfi = mf > input.int(defval=80, title='Min MF', minval=1) //Stoch RSI OverBought_StochRSI = input(80) OverSold_StochRSI = input(34) smoothK = input.int(3, "K", minval=1) smoothD = input.int(2, "D", minval=1) lengthRSI = input.int(14, "RSI Length", minval=1) lengthStoch = input.int(14, "Stochastic Length", minval=1) srcRSI = input(close, title="RSI Source") rsi1 = ta.rsi(srcRSI, lengthRSI) kStochRSI = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(kStochRSI, smoothD) co = ta.crossover(kStochRSI,d) cu = ta.crossunder(kStochRSI,d) buy_stochRSI = co and kStochRSI < OverSold_StochRSI sell_stochRSI = cu and kStochRSI > OverBought_StochRSI plot(kStochRSI, "K", color=#2962FF) plot(d, "D", color=#FF6D00) h0 = hline(OverBought_StochRSI, "Upper Band", color=#787B86) h1 = hline(OverSold_StochRSI, "Lower Band", color=#787B86) fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background") //MACD // Getting inputs fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) src = input(title="Source", defval=close) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9) sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"]) sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"]) // Plot colors //col_macd = input(#2962FF, "MACD Line ", group="Color Settings", inline="MACD") //col_signal = input(#FF6D00, "Signal Line ", group="Color Settings", inline="Signal") //col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above") //col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above") //col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below") //col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below") // Calculating fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal buy_MACD = macd < signal and hist < 0 sell_MACD = macd > signal and hist > 0 //buy_MACD = true //sell_MACD = true //plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below))) //plot(macd, title="MACD", color=col_macd) //plot(signal, title="Signal", color=col_signal) sessionColor = color(na) if time_cond if (not na(kStochRSI) and not na(d)) cmt = str.tostring(close) if (buy_stochRSI and buy_MACD and buy_mfi and buy_rsi) strategy.entry("BUY", strategy.long, comment='BUY @ ' + cmt) if longProfitPerc != 0 strategy.exit(id="x", stop=longExitPrice, comment='EXIT @ ' + str.tostring(longExitPrice)) sessionColor := input.color(#0000FF, "buy") //red if (sell_stochRSI and sell_MACD and sell_mfi and sell_rsi) strategy.entry("SELL", strategy.short, comment='SELL @ ' + cmt) sessionColor := input.color(#FF0000, "sell") //green bgcolor(sessionColor)