Estratégia de arbitragem transcultural baseada em múltiplos indicadores

Autora:ChaoZhang, Data: 2024-01-29 11:10:33
Tags:

img

Resumo

Esta estratégia utiliza uma combinação de três indicadores técnicos diferentes para construir uma estratégia de arbitragem transcultural que capta as tendências dos preços em diferentes prazos para alcançar retornos excessivos de baixo risco.

Estratégia lógica

Os três indicadores técnicos usados nesta estratégia são o canal de Keltner (KC), a parada de volatilidade (Vstop) e o Alligador de Williams (WAE). O canal de Keltner é usado para determinar se os preços estão fora da faixa do canal e, assim, gerar sinais de negociação. A parada de volatilidade é usada para ajustar dinamicamente as posições de stop loss para garantir a parada de perda, reduzindo a perda de parada desnecessária. O indicador de alligador de Williams é usado para determinar se os preços estão em uma forte tendência. Especificamente:

  1. Quando o preço está acima do trilho superior do Canal de Keltner, é considerado um sinal de alta.

  2. A posição de stop loss é definida com base na volatilidade do preço e na largura do canal, podendo ajustar-se dinamicamente para garantir o stop loss e evitar posições de stop loss excessivamente conservadoras.

  3. O indicador Williams Alligator avalia se os preços estão numa forte tendência ascendente ou descendente através do cálculo da largura do canal MACD e da Banda de Bollinger.

Ao combinar esses três indicadores, os sinais em diferentes prazos são validados cruzando-se. Isso reduz a probabilidade de julgamento errado e constrói uma lógica estratégica otimizada.

Análise das vantagens

A maior vantagem desta estratégia são os sinais de negociação precisos trazidos pela combinação de vários indicadores. Os três indicadores funcionam em diferentes prazos e se validam mutuamente, o que pode efetivamente reduzir a probabilidade de julgamento errado e melhorar a precisão dos sinais. Além disso, a configuração de parada de volatilidade é dinâmica e pode ajustar a posição de stop loss de acordo com a volatilidade em tempo real para controlar ainda mais os riscos.

Em comparação com as estratégias de indicador único, esta estratégia combinada pode fornecer sinais de negociação mais precisos e eficientes. Ao mesmo tempo, os três indicadores trabalham juntos para formar julgamentos de negociação em vários prazos, o que é um projeto de lógica muito científico e razoável que vale a pena aprender.

Análise de riscos

O principal risco desta estratégia é que configurações incorretas de parâmetros podem causar sobreajuste. Os três indicadores têm 8 parâmetros no total.

Para reduzir esses riscos, a adaptabilidade a diferentes ambientes de mercado deve ser totalmente considerada durante a configuração de parâmetros e a combinação ideal de parâmetros deve ser ajustada por meio de análise de backtesting. Além disso, ajuste adequadamente os pesos entre os indicadores para garantir que os sinais de negociação possam ser ativados efetivamente.

Orientações de otimização

O espaço de otimização desta estratégia concentra-se principalmente em dois aspectos: ajuste de parâmetros e melhoria das estratégias de stop loss.

  1. Escolha os parâmetros do indicador de forma mais científica e otimize as combinações de parâmetros. Os algoritmos podem ser usados para encontrar os parâmetros ideais com objetivos como maximização do retorno e minimização de riscos.

  2. Melhorar a estratégia de stop loss para reduzir ainda mais a stop loss desnecessária, garantindo a stop loss, melhorando assim a taxa de ganho.

  3. Otimizar os pesos entre os indicadores e a lógica dos julgamentos de sinais de negociação para reduzir a taxa de julgamento errado.

  4. Tente introduzir modelos de aprendizagem de máquina para obter otimização automática de parâmetros ou use programação de aprendizagem de reforço profundo para avaliação e melhoria de estratégia.

Resumo

Esta estratégia constrói um sistema de arbitragem de ciclo cruzado através da combinação do canal de Keltner, Volatility Stop e Williams Alligator. A combinação de múltiplos indicadores melhora a precisão do sinal e controla os riscos de perda de parada dinâmica. Mas há espaço para melhoria na configuração e otimização de parâmetros.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("QuarryLake", overlay=true)  ///Ultilized modified full kelly for this strategy = 36%

///Keltner channel///
nPeriod = input(title="Keltner Period", type=input.integer, defval=200, minval=1)
Mult = input(title="Keltner Mult", type=input.integer, defval=5, minval=1)
xPrice = ema(hlc3, nPeriod)
xMove = ema(high - low, nPeriod)
xMoveMult = xMove * Mult
xUpper = xPrice + xMoveMult
xLower = xPrice - xMoveMult

// plot(xPrice, color=red, title="KSmid")
p1 = plot(xUpper, color=color.white, title="KSup")
p2 = plot(xLower, color=color.white, title="KSdn")
fill(p1, p2, color=close > xUpper ? color.green : close < xLower ? color.red : color.white)

kclongcondition = close > xUpper
kcshortcondition = close < xLower
kccloselongcondition = crossunder(close, xUpper)
kccloseshortcondition = crossover(close, xLower)

///Volatility Stop///
length = input(title="Vstop length", type=input.integer, defval=3, minval=1)
mult1 = 1.5

atr_ = atr(length)
max1 = 0.0
min1 = 0.0
is_uptrend_prev = false
stop = 0.0
vstop_prev = 0.0
vstop1 = 0.0
is_uptrend = false
is_trend_changed = false
max_ = 0.0
min_ = 0.0
vstop = 0.0
max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)
is_uptrend_prev := nz(is_uptrend[1], true)
stop := is_uptrend_prev ? max1 - mult1 * atr_ : min1 + mult1 * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult1 * atr_ : min_ + mult1 * atr_ : 
   vstop1

plot(vstop, color=is_uptrend ? color.green : color.red, style=plot.style_line, linewidth=1)

vstoplongcondition = close > vstop
vstoplongclosecondition = crossunder(close, vstop)
vstopshortcondition = close < vstop
vstopshortclosecondition = crossover(close, vstop)

///Waddah Attar Explosion///
sensitivity = input(150, title="Sensitivity")
fastLength = input(20, title="FastEMA Length")
slowLength = input(40, title="SlowEMA Length")
channelLength = input(20, title="BB Channel Length")
mult = input(2.0, title="BB Stdev Multiplier")
DEAD_ZONE = nz(rma(tr(true), 100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
    fastMA = ema(source, fastLength)
    slowMA = ema(source, slowLength)
    fastMA - slowMA
calc_BBUpper(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis + dev
calc_BBLower(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis - dev
t1 = (calc_macd(close, fastLength, slowLength) - 
   calc_macd(close[1], fastLength, slowLength)) * sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) - 
   calc_macd(close[3], fastLength, slowLength)) * sensitivity
e1 = calc_BBUpper(close, channelLength, mult) - 
   calc_BBLower(close, channelLength, mult)
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0

waelongcondition = trendUp and trendUp > DEAD_ZONE and trendUp > e1
waeshortcondition = trendDown and trendDown > DEAD_ZONE and trendDown > e1

///Long Entry///
longcondition = kclongcondition and vstoplongcondition and waelongcondition
if longcondition
    strategy.entry("Long", strategy.long)

///Long exit///
closeconditionlong = kccloselongcondition or vstoplongclosecondition
if closeconditionlong
    strategy.close("Long")

///Short Entry///
shortcondition = kcshortcondition and vstopshortcondition and waeshortcondition
if shortcondition
    strategy.entry("Short", strategy.short)

///Short exit///
closeconditionshort = kccloseshortcondition or vstopshortclosecondition
if closeconditionshort
    strategy.close("Short")

///Free Hong Kong, the revolution of our time///


Mais.