Esta estratégia combina o MACD Momentum Indicator com o RSI Overbought/Overbought Indicator para verificar se o RSI também completou a correspondente reversão de toque de fundo/toque de topo no momento em que o MACD ocorreu, produzindo assim um sinal de negociação mais confiável.
Calcule o DIFF, o DEA e o MACD do indicador MACD. Quando o DIFF atravessa o DEA, gera um sinal de garfo de ouro e, quando o DIFF atravessa o garfo de morte.
Calcule o indicador RSI para determinar se o fundo rebotou ou o topo recuou. E configure a janela de retrospectiva para determinar se um fundo ou um topo ocorreu na fase mais recente.
Quando o MACD forca o ouro, se o RSI completar a reversão de ponta dentro da janela de retrospectiva, um sinal de olhar para cima será gerado. Quando o MACD forca o ouro, se o RSI completar a reversão de ponta, um sinal de olhar para baixo será gerado.
O ponto de paragem após a entrada é definido para controlar o risco.
O MACD é sensível ao momento de uma reviravolta de tendência. O RSI é sensível ao momento de uma sobrevenda ou sobrevenda.
Ao mesmo tempo, verifica os tokens MACD e RSI e filtra os sinais falsos.
A partir daí, a janela de avaliação aumenta a confiabilidade do sinal.
A configuração de stop loss ajuda na gestão de risco.
O MACD e o RSI estão atrasados e podem ter perdido os melhores pontos de entrada.
A menor probabilidade de ocorrência de dois sinais de indicadores ao mesmo tempo, menor sinal.
O blogueiro diz que o governo não tem em conta as tendências globais e é fácil de ser enganado.
A configuração de parada de prejuízos pode ser excessivamente relaxada ou rígida.
Resolução:
Ajustar os parâmetros MACD e RSI para reduzir a probabilidade de atraso.
Ampliar adequadamente o intervalo de eficácia do indicador para fornecer mais sinais.
Aumentar a filtragem de tendências e evitar a entrada de reversão.
Teste diferentes configurações de parâmetros de parada para encontrar o melhor.
Teste a eficácia de outros equilíbrios, como o SMA.
Aumentar o Stop Loss móvel para tornar o Stop Loss mais flexível.
Adicionar indicadores de tendência para avaliar os avanços e desvantagens.
Introdução ao aprendizado de máquina para a previsão de indicadores.
A escolha do momento da admissão, combinada com outros fatores, foi otimizada.
A estratégia usa a combinação de MACD e RSI para entrar em jogo depois de selecionar um sinal de reversão confiável. A estratégia é clara, o ajuste de parâmetros é flexível e pode ser ampliada em termos de seleção de indicadores, julgamento de tendências, parada de perdas, entre outros, para obter mais oportunidades de negociação, mantendo uma base estável.
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//based on Range Strat - MACD/RSI
// strategy("MACD/RSI - edited",
// overlay=true,
// default_qty_type=strategy.percent_of_equity,
// default_qty_value=10, precision=2, initial_capital=100000,
// pyramiding=2,
// commission_value=0.05)
//Backtest date range
StartDate = input(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = true
// RSI Input Settings
rsisrc = input(title="RSI Source", defval=close, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" )
rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings")
// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
co = ta.crossover(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)
// Function looking for a happened condition during lookback period
f_somethingHappened(_cond, _lookback) =>
bool _crossed = false
for i = 1 to _lookback
if _cond[i]
_crossed := true
_crossed
coCheck = f_somethingHappened(co, rsi_lookback)
cuCheck = f_somethingHappened(cu, rsi_lookback)
// MACD Input Settings
macdsrc = input(title="MACD Source", defval=close, group="MACD Settings")
fast_length = input(title="Fast Length", defval=12, group="MACD Settings")
slow_length = input(title="Slow Length", defval=26, group="MACD Settings")
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD Settings")
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal
MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)
// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
// Calculating Stop Loss
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)
// Strategy Entry
if (not na(vrsi))
if (inDateRange and MACDcrossover and coCheck)
strategy.entry("LONG", strategy.long, comment="LONG")
if (inDateRange and MACDcrossunder and cuCheck)
strategy.entry("SHORT", strategy.short, comment="SHORT")
// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="SHORT STOP", stop=shortStopPrice)