Estratégia de negociação de média móvel de canal de preço de volatilidade


Data de criação: 2023-12-12 11:44:15 última modificação: 2023-12-12 11:44:15
cópia: 0 Cliques: 552
1
focar em
1621
Seguidores

Estratégia de negociação de média móvel de canal de preço de volatilidade

Visão geral

A estratégia baseia-se em indicadores de tendência super e indicadores de canal de preço, em combinação com sinais de equilíbrio. A idéia central é usar o canal de preço para determinar se o preço atual está em um estado anormal, a tendência super para determinar a direção da tendência atual e gerar um sinal de negociação com uma combinação de sinais de equilíbrio.

Princípio da estratégia

  1. Calcule o indicador de tendência super. Em que a linha de alta e a linha de baixa são N vezes o preço atual mais/menos o indicador ATR. Quando o preço está acima da linha de alta, é um aumento, e quando o preço está abaixo da linha de baixa, é uma queda.

  2. Calcule o indicador de canal de preço. Em que a linha de canal de preço é M vezes a diferença padrão de N dias do preço. O preço acima / abaixo da linha de canal é considerado um estado anormal.

  3. Calcule a linha média. Leve a média do preço de abertura, do preço de fechamento e da super tendência, respectivamente.

  4. Geração de sinais de transação:

    • Sinais de compra: o preço de fechamento atravessa a linha de tendência super e está acima da linha média de abertura

    • Sinais de venda: ultrapassar a linha de tendência super abaixo do preço de fechamento e abaixo da linha média de abertura

  5. Configure um canal de preço de parada de perda.

Análise de vantagens estratégicas

  1. Combine vários indicadores para evitar falsos sinais.

  2. A utilização de um canal de preços para avaliar o estado anormal dos preços pode filtrar alguns pontos de entrada não desejáveis.

  3. A linha de equilíbrio combina a direção da tendência para evitar operações de contra-corrente.

  4. Configure o limite de suspensão de danos e controle de risco.

Análise de Riscos

  1. A configuração dos parâmetros é muito subjetiva e precisa ser otimizada.

  2. A barreira de bloqueio pode estar muito grande.

  3. Os parâmetros do canal de preço podem não ser adequados para todas as variedades e precisam ser testados individualmente para diferentes variedades.

  4. A tendência é de que os investidores deveriam investir mais em ações de investimento e em ações de retorno.

Direção de otimização

  1. Teste e otimize os parâmetros para encontrar a melhor combinação.

  2. Teste diferentes períodos de média e escolha o melhor parâmetro.

  3. Os testes foram realizados em várias variedades e os parâmetros foram selecionados de acordo com o desempenho.

  4. Optimizar a estratégia de stop loss para evitar perdas excessivas em uma única operação.

Resumir

Esta estratégia integra vários indicadores para determinar a anormalidade do preço e a direção da tendência. Em teoria, é possível filtrar certos sinais falsos. Mas a configuração dos parâmetros ainda é bastante subjetiva e há um certo espaço para otimização. Além disso, no mercado real específico, é necessário considerar o impacto dos custos de transação, como comissões e pontos de deslizamento.

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

//@version=4
strategy(title="Vol ST VM", overlay=true)

source = close
hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol = (volume / hilow)
spreadvol = (openclose * vol)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

v =  spreadvol + cum(spreadvol)
smooth = sma(v, v_len)
v_spread = stdev(v - smooth, window_len)
shadow = (v - smooth) / v_spread * price_spread

out = shadow > 0 ? high + shadow : low + shadow
//
src = out
src1=open
src2=low
src3=high
tf =input(720)
len = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   tf / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7

c = ema(src, len)
plot(c,color=color.red)
o = ema(src1,len)
plot(o,color=color.blue)
//h = ema(src3,len)
//l=ema(src2,len)
//
col=c > o? color.lime : color.orange
vis = true
vl = c
ll = o
m1 = plot(vl, color=col, linewidth=1, transp=60)
m2 = plot(vis ? ll : na,  color=col, linewidth=2, transp=80)

fill(m1, m2,  color=col, transp=70)
//

vpt=ema(out,len)

// INPUTS //
st_mult   = input(1,   title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01)
st_period = input(10, title = 'SuperTrend Period',     minval = 1)

// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := close[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend ==1 ? up_trend : down_trend

// Plotting
plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy=crossover( close, st_line) and close>o
sell=crossunder(close, st_line) and close<o
//plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny)
//plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny)
plotshape(buy, title="buy", color=color.green, style=shape.arrowup, location=location.belowbar, size=size.normal, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", color=color.red, style=shape.arrowdown, location=location.abovebar, size=size.normal, textcolor=color.white, transp=0)  //plot for sell icon


//
multiplier = input(title="TP", type=input.float, defval=2, minval=1)
src5 = close
len5 = input(title="TP length", defval=150, minval=1)
offset = 0

calcSlope(src5, len5) =>
    sumX = 0.0
    sumY = 0.0
    sumXSqr = 0.0
    sumXY = 0.0
    for i = 1 to len5
        val = src5[len5-i]
        per = i + 1.0
        sumX := sumX + per
        sumY := sumY + val
        sumXSqr := sumXSqr + per * per
        sumXY := sumXY + val * per
        
        
    slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX)
    average = sumY / len5
    intercept = average - slope * sumX / len5 + slope
    [slope, average, intercept]

var float tmp = na
[s, a, i] = calcSlope(src5, len5)

vwap1=(i + s * (len5 - offset))
sdev = stdev(close, len5)
dev = multiplier * sdev
top=vwap1+dev
bott=vwap1-dev

//
z1 = vwap1 + dev
x1 = vwap1 - dev

low1 = crossover(close, x1)  
high1 = crossunder(close, z1) 

plotshape(low1, title="low", text="TP", color=color.red, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(high1, title="high", text="TP", color=color.green, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon



strategy.entry(id="Enter Long MA", long=true, comment="Buy", when=high1)
strategy.entry(id="Short Entry MA", long=false, comment="Sell", when=low1)

/////// Alerts /////
alertcondition(buy,title="buy")
alertcondition(sell,title="sell")
alertcondition(low1,title="sell tp")
alertcondition(high1,title="buy tp")