Estratégia de Reversão de Mercado Dual Momentum


Data de criação: 2024-02-29 15:10:11 última modificação: 2024-02-29 15:10:11
cópia: 9 Cliques: 599
1
focar em
1617
Seguidores

Estratégia de Reversão de Mercado Dual Momentum

Visão geral

A estratégia combina o uso de indicadores de supertrend e a troca de pescoço para procurar oportunidades de curto prazo quando o mercado se reverte. Pode ser aplicada a diferentes criptomoedas, ações e mercados, ajustando os parâmetros de supertrend e troca de pescoço. Quando o sinal de venda aparece, ele mostra o tamanho da posição e o ponto de parada e o ponto de ganho.

Princípio da estratégia

A estratégia primeiro calcula a mudança de Fibonacci de 10 ciclos. Quando a linha de mudança de Fibonacci ultrapassa 2,5 do ponto baixo para cima, gera um sinal de venda. Ao mesmo tempo, calcula a amplitude real média de 10 ciclos como um canal de supertrend. Quando o preço atravessa a partir de uma trajetória abaixo da trajetória, gera um sinal de venda.

Especificamente, ele calcula o preço de fechamento atual da linha K abaixo do supercanal do ciclo anterior e, quando o ciclo anterior está acima do canal inferior, julga-se uma reversão de mercado, gerando um sinal de venda. Ao mesmo tempo, ele calcula o indicador de troca de preço de venda, quando a linha de troca de preço de venda se rompe a partir do ponto baixo de 2.5, e o valor de troca de preço de venda do ciclo anterior é inferior ao valor atual, julgando como uma reversão de tendência, gerando um sinal de venda.

Portanto, a estratégia precisa simultaneamente de satisfazer os dois critérios de reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência de uma reversão de tendência.

Vantagens estratégicas

A estratégia, combinada com o canal de supertrend e o indicador de inversionismo, pode capturar com mais precisão os pontos de reversão do mercado. Em comparação com o uso de supertrend ou inversionismo sozinho, ela pode reduzir os falsos sinais, aumentando a estabilidade da estratégia.

Além disso, a estratégia oferece a flexibilidade de ajustar os parâmetros de canalização de tendências super e de variação de Fisher. O usuário pode escolher o melhor conjunto de parâmetros de acordo com diferentes mercados e variedades, para se adequar ao mercado de forma direcionada. Esta é uma estratégia que pode ser personalizada e otimizada.

A estratégia também oferece gerenciamento de quantidade de risco. O usuário pode ajustar facilmente a quantidade de capital de risco por unidade para atender às suas necessidades de gerenciamento de risco.

Risco estratégico

A estratégia baseia-se principalmente na estrutura do mercado para determinar o canal de supertrend. Quando a tendência é prolongada, o supercanal pode falhar. Nesse caso, o parâmetro de ciclo do canal ou o múltiplo de ATR deve ser ampliado adequadamente.

Além disso, a troca de Fisher é mais propensa a produzir sinais errados ou sinais prematuros. Quando a volatilidade do mercado é grande, os parâmetros de ciclo da troca de Fisher devem ser adequadamente ajustados, filtrando parte do ruído.

Além disso, a taxa de sucesso geral de uma estratégia de inversão de classes pode ser limitada. Deve ser combinado com indicadores de acompanhamento de tendências, evitando abrir posições entre os períodos de turbulência, ou participar novamente depois que a tendência é mais clara. A média móvel pode ser adicionada como filtro e melhorar a estabilidade da estratégia.

Direção de otimização da estratégia

A estratégia pode ser melhorada em vários aspectos:

  1. Otimizar o número de ciclos ATR e o número de múltiplos ATR do canal de tendências super, selecionando a melhor combinação de parâmetros para diferentes variedades e condições de mercado

  2. Parâmetros de ciclo de otimização de variação de Fibonacci, redução de ruído de curva de suavização, prevenção de erros de sinalização

  3. Aumentar a média móvel ou a faixa de Brin como indicador auxiliar para evitar posições em mercados de turbulência

  4. Combinação de mudanças de Fisher em diferentes períodos de tempo para obter um julgamento de inversão mais estável e confiável

  5. Aumentar os módulos de gestão de posições, tais como a taxa de alavancagem, o número de posições, as regras de aumento de posição, etc., para controlar o risco

  6. Combinação de métodos como aprendizado de máquina para otimização automática de parâmetros e adequação de estratégias

Resumir

A estratégia combina a supertrend com o indicador de inversão de Fisher, com uma certa flexibilidade ao julgar a reversão do mercado, e pode ser adaptada a diferentes variedades por meio de ajustes de parâmetros. Em comparação com um único indicador, ela permite um julgamento de sinal e controle de risco mais confiáveis. Com otimização contínua, a estratégia espera aumentar ainda mais a estabilidade e aumentar a lucratividade. É uma estratégia de alta qualidade que vale a pena acompanhar e acumular a longo prazo.

Código-fonte da estratégia
/*backtest
start: 2024-02-21 00:00:00
end: 2024-02-27 03:00:00
period: 2m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend and Fisher_SHORT", overlay=true)

//This block is for  Fisher Transformation Calculation.
len = input.int(10, minval=1, title="Length") // Length is optional. 10 is good but is up to you.
high_ = ta.highest(hl2, len)
low_ = ta.lowest(hl2, len)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1]))
fish1 = 0.0
fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1])
fish2 = fish1[1]

// Sell condition for Fisher transformation.
sell_signal = (fish1 > 2.5) and (fish2 > fish1)
durum = 0 //just for the situation.

if (sell_signal)
    durum := -1 // now it changes from 0 to -1.

// Supertrend indicator inputs and calculations (same as in the indicator)
Periods = input(title='ATR Period', defval=10) // period is 10, but you can change it
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=2) //atr multiplier is important. it is 2 for this strategy but you can find another for best performance 
RiskAmount = input.float(title='Risk Amount ($)', defval=10.0, minval=0.0, step=1.0) // ıf you use risk-reward method, risk is 10$ for each position. you can also change it
changeATR = input(title='Change ATR Calculation Method ?', defval=true)

atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Calculate position size based on risk amount
riskPerContract = atr * Multiplier
contracts = RiskAmount / (riskPerContract * syminfo.mintick)

//short signal condition
sellSignal = trend == -1 and trend[1] == 1 and durum == -1

plotshape(sellSignal, title='Sell Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) //shows the signal.

// variables
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float atr1 = na
var float takeProfit2 = na
var float takeProfit3 = na

//it calculates the stop level and reward profit levels using atr.
if (sellSignal)
    entryPrice := close
    atr1 := atr
    stopLoss := entryPrice + atr1 * Multiplier
    contracts := entryPrice / (stopLoss - entryPrice) * RiskAmount / entryPrice
    takeProfit := entryPrice - atr1 * Multiplier
    takeProfit2 := entryPrice - 2 * atr1 * Multiplier
    takeProfit3 := entryPrice - 3 * atr1 * Multiplier

if (sellSignal)
    strategy.entry("Sell", strategy.short, qty=1)

// 
if (close >= stopLoss)
    strategy.close("Sell", comment="Stop Loss Hit")
else if (close <= takeProfit)
    strategy.close("Sell", comment="Take Profit Hit")

// draw the stop, entry and profit levels
plot(stopLoss, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(entryPrice, title="Entry Price", color=color.orange, linewidth=1, style=plot.style_linebr)
plot(takeProfit, title="Take Profit", color=color.green, linewidth=1, style=plot.style_linebr)
plot(takeProfit2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(takeProfit3, title="Take Profit 3", color=color.purple, linewidth=1, style=plot.style_linebr)