Estratégia de negociação quantitativa multifuncional baseada em tendência e cruzamento de média móvel


Data de criação: 2023-12-08 12:14:50 última modificação: 2023-12-08 12:14:50
cópia: 0 Cliques: 631
1
focar em
1621
Seguidores

Estratégia de negociação quantitativa multifuncional baseada em tendência e cruzamento de média móvel

Visão geral

A estratégia integra vários indicadores técnicos e conceitos de negociação que podem ser usados para gerar automaticamente sinais de compra e venda. A principal característica é a combinação de indicadores de análise de tendências para otimizar o stop loss e, ao mesmo tempo, gerar sinais de negociação usando a cruz de equilíbrio.

Princípio da estratégia

Indicadores técnicos

  • Indicador UTSTC personalizado: um indicador de stop loss de rastreamento adaptável baseado na amplitude real média é implementado, podendo ser ajustado de acordo com a volatilidade do mercado.

  • Indicador STC: diferencial entre as médias móveis simples rápidas e as médias móveis simples lentas, usado para determinar a direção da tendência do mercado e o potencial ponto de reversão.

  • Média móvel simples (SMA) e Média móvel indexada (EMA): calcula e traça médias móveis de diferentes períodos, fornecendo informações adicionais para avaliar tendências.

Sinais de negociação

  • Um sinal de compra é gerado quando o indicador UTSTC é atravessado pelo preço de fechamento e o indicador STC está em baixa.

  • Um sinal de venda é gerado quando o preço de fechamento atravessa o indicador UTSTC abaixo e o indicador STC está em baixa.

Vantagens estratégicas

  • A integração de vários indicadores para determinar as tendências do mercado pode melhorar a precisão do sinal.

  • O indicador UTSTC ajusta automaticamente o limite de parada de acordo com a amplitude real, controlando efetivamente cada perda.

  • A utilização de cruzamentos de equilíbrio para gerar sinais de negociação simples e eficazes.

  • A combinação de diferentes configurações de parâmetros pode ser adaptada a mais ambientes de mercado.

Risco estratégico

  • Os indicadores de tendência, como o STC, estão atrasados e podem ter perdido a oportunidade de uma reversão de curto prazo.

  • O sinal de cruzamento de equilíbrio pode produzir um falso sinal.

  • É necessário avaliar cuidadosamente as configurações de parâmetros, pois uma combinação inadequada pode reduzir os lucros ou aumentar os prejuízos.

  • Um limite de perda muito grande pode aumentar o risco de perdas, e um limite muito pequeno pode causar perda prematura.

Direção de otimização

  • Teste os parâmetros do indicador STC de diferentes períodos de comprimento, procurando a configuração com menor impacto na estratégia.

  • Tente combinar outros indicadores para filtrar falsos sinais, como KDJ, MACD, etc.

  • Adapte o parâmetro de parada de acordo com os resultados da ressonância e encontre a combinação de parâmetros ideal.

  • Avaliar diferentes configurações de tempo de detenção para encontrar o melhor período de detenção.

Resumir

A estratégia integra vários módulos de julgamento de tendências, gestão automática de stop loss e julgamento de sinais de negociação, formando um programa de negociação quantitativa mais abrangente. Através do ajuste de parâmetros e extensão de funções, espera-se obter ganhos estáveis. No entanto, nenhuma estratégia pode evitar perdas completamente, e é necessário verificar cuidadosamente o efeito e fazer um bom controle de risco.

Código-fonte da estratégia
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OB+LQ+UTSTC+SMA+EMA-NORA-MIP21-Jashore-Bangladesh-OneMinuteTF", shorttitle="OB+LS+UTSTC-MIP21-Jashore-Bangladesh-OneMinuteTF", overlay=true)

// Order Block + Liquidity Swings [NORA] Settings
pivot_length = input(14, title="Pivot Lookback")
bull_ext_last = input(3, title="Bullish OB Extension")
bear_ext_last = input(3, title="Bearish OB Extension")
swing_length = input(5, title="Swing Length")
area = input("Wick Extremity", title="Swing Area", options=["Wick Extremity", "Full Range"])
min_profit = input(0.5, title="Minimum Profit Target")
max_loss = input(0.5, title="Maximum Loss Stop")

// Variables
var float bull_ob_price = na
var float bear_ob_price = na
var float swing_high = na
var float swing_low = na

// Calculate Order Block Prices
var float low_lowest = na
var float high_highest = na
if bar_index >= pivot_length
    low_lowest := lowest(low, pivot_length)
    high_highest := highest(high, pivot_length)
    bull_ob_price := low_lowest
    bear_ob_price := high_highest

// Calculate Swing High/Low Prices
var float low_lowest_swing = na
var float high_highest_swing = na

if area == "Wick Extremity"
    low_lowest_swing := lowest(low, swing_length)
    high_highest_swing := highest(high, swing_length)
else
    low_lowest_swing := lowest(high - low, swing_length)
    high_highest_swing := highest(high - low, swing_length)

swing_low := low_lowest_swing
swing_high := high_highest_swing

// Trading Logic for Order Block + Liquidity Swings
buy_liquidity = crossover(close, bull_ob_price) and close > swing_low
sell_liquidity = crossunder(close, bear_ob_price) and close < swing_high

// Plot Buy/Sell Signals for Order Block + Liquidity Swings
plotshape(series=buy_liquidity, style=shape.labelup, location=location.belowbar, color=color.rgb(39, 166, 175), size=size.small, title="Bullish LQ")
plotshape(series=sell_liquidity, style=shape.labeldown, location=location.abovebar, color=color.rgb(248, 95, 215), size=size.small, title="Bearish LQ")

// UTSTC-SMA-EMA-NORA-New Settings
keyvalue = input(3, title="UT Bot Key Value", step=0.5)
atrperiod = input(10, title="UT Bot ATR Period")
src = close

xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=xcolor, title="UT Bot Trailing Stop")

// STC Settings
stc_length = input(12, title="STC Length")
fastLength = input(26, title="STC Fast Length")
slowLength = input(50, title="STC Slow Length")
fastMA = ema(close, fastLength)
slowMA = ema(close, slowLength)
STC = fastMA - slowMA
STCColor = STC > STC[1] ? color.green : color.red
plot(STC, color=STCColor, title="STC")

// Add SMAs
sma21 = sma(close, 21)
sma44 = sma(close, 44)
plot(sma21, color=color.blue, title="SMA 21")
plot(sma44, color=color.orange, title="SMA 44")

// Add EMA
ema5 = ema(close, 5)
plot(ema5, color=color.yellow, title="EMA 5")

// Combined Strategy
buySignal = crossover(src, xATRTrailingStop) and STC < 25 and STCColor == color.green
sellSignal = crossunder(src, xATRTrailingStop) and STC > 75 and STCColor == color.red

// Plot Buy and Sell signals as triangles
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)