A estratégia combina principalmente os sinais cruzados da média móvel de Hull e do indicador WT para aproveitar os benefícios de seus respectivos indicadores e tomar decisões mais precisas sobre o julgamento de tendências e a escolha do momento de entrada.
A estratégia é composta principalmente por sinais de cruzamento entre a média móvel de Hull e o indicador WT.
Hull Moving Averages Parte, para determinar a direção da tendência através do cálculo de curto e longo prazo Hull MA, e preenchimento de cores. A fórmula de cálculo é:
Hull MA = WMA2*WMA(n/2) - WMA(n), sqrt(n))
Hull MA a longo prazo = WMA*3 - WMA(n/2), n/2)
Onde WMA é a média móvel ponderada. Quando a linha curta atravessa a linha longa, é um sinal de otimismo, caso contrário, é um sinal de baixa.
A parte do indicador WT, para julgar a entrada, calcule a linha média de vazio do indicador WT e observe o cruzamento da linha média. A fórmula de cálculo é:
TCI = (Close - EMA(Close,n1)) / (k * STD(Close - EMA(Close,n1),n1))
WT1 = EMA(TCI,n2)
WT2 = SMA(WT1,m)
O TCI é o índice composto de tendência, que reflete o desvio do EMA da linha média entre o preço e o canal. O WT1 é o EMA de suavização do TCI, o WT2 é o SMA do WT1 e o m é geralmente 4. Quando o WT1 atravessa o WT2 é um sinal de múltiplas cabeças e o WT1 atravessa o WT2 é um sinal de cabeças vazias.
O julgamento de tendência do Hull MA combinado com o sinal de cruzamento do indicador WT, pode entrar em campo, desde que a direção da tendência seja correta.
A estratégia combina os benefícios dos indicadores Hull MA e WT, com as seguintes vantagens:
O Hull MA, através da modificação do método de cálculo das médias móveis, pode capturar mais rapidamente as tendências de mudanças de preços e efetivamente filtrar o ruído do mercado para avaliar as tendências com precisão e confiabilidade.
O indicador WT usa a característica de flutuação de preços dentro do canal para capturar rapidamente os pontos de inflexão e emitir sinais de negociação mais precisos.
A combinação de ambos, que leva em consideração o julgamento de tendências e os sinais de cruzamento, permite controlar o risco ao mesmo tempo que a força da tendência.
Os parâmetros de suavização do Hull MA e os parâmetros do indicador WT são configuráveis e podem ser ajustados e otimizados de acordo com as características de diferentes variedades e preferências comerciais.
Pode-se negociar com o uso de sinais de cruzamento dos indicadores Hull MA ou WT isoladamente ou em combinação com o uso de rastreamento de tendências e verificação cruzada.
Pode-se configurar uma estratégia de stop loss para controlar o risco de uma única transação.
A estratégia apresenta os seguintes principais riscos:
Os indicadores Hull MA e WT têm um certo grau de obscuridade no tratamento dos preços, o que pode levar a um atraso, o que pode levar a um tempo de entrada pouco preciso.
O indicador WT é propenso a produzir falsos sinais de múltiplos backends e backends em branco, o que aumenta o risco de negociação se não for combinado com o julgamento de tendências.
A configuração inadequada dos parâmetros também pode afetar os resultados das transações, e é necessário testar e otimizar continuamente de acordo com as características da variedade.
No caso de uma tendência de baixa, o stop loss pode ser frequentemente acionado, causando uma certa perda na negociação.
A resposta ao risco pode ser otimizada e melhorada através dos seguintes métodos:
Ajustar os parâmetros Hull MA e WT para encontrar o melhor ponto de equilíbrio. Também é possível testar outros indicadores em combinação com o Hull MA.
Aumentar o mecanismo de julgamento de tendências, evitando que o indicador WT dê sinais errados quando não há uma tendência clara.
Utilize a retrospectiva e a simulação de negociação para encontrar os melhores parâmetros e configure um limite de perda razoável.
Quando a tendência é incerta, reduzir o tamanho da posição ou não negociar temporariamente.
A estratégia pode ser melhorada em várias direções:
Teste diferentes combinações de médias móveis com indicadores WT para encontrar melhores pontos de equilíbrio. Como KAMA, TEMA, etc.
A adição de outros indicadores de julgamento, como os indicadores de oscilação, Bollinger Bands, etc., aumenta a precisão da tomada de decisão.
Optimizar a configuração de parâmetros, através de ressonância e simulação para encontrar a melhor combinação de parâmetros. Pode-se criar um programa de otimização de parâmetros para encontrar rapidamente o parâmetro ideal.
Otimização de estratégias de stop loss, como o uso de stop loss móvel, stop loss de oscilação, stop loss de proximidade e de distância, para reduzir a probabilidade de que o stop loss seja acionado.
Optimizar a estratégia de gestão de posições, reduzir a frequência de negociação e o tamanho das posições quando a tendência é incerta, reduzindo o risco.
A adição de tecnologias avançadas, como aprendizado de máquina, para decisões de negociação mais inteligentes e adaptação de parâmetros.
A estratégia integra a característica do cruzamento entre a Hull MA e a WT, além do julgamento de tendências e da verificação cruzada. O risco pode ser controlado de forma eficaz se a negociação for feita com a premissa de garantir a direção correta. A estabilidade e a eficácia da estratégia podem ser melhoradas através da configuração de parâmetros de otimização, estratégias de parada e gerenciamento de posições.
/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// WT CROSS @author [© LazyBear]
// © pigsq
// @version=5
strategy("Kahlman HullMA / WT Cross Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100)
_1 = input(false, '───────── SP/TP SETTINGS ─────────')
stoploss1 = input(title='Stop Loss On/Off?', defval=true)
stoploss = input.float(5, "Stop Loss", minval = 1, step = 1)/100
takeprofit1 = input(title='Take Profit On/Off?', defval=true)
takeprofit = input.float(10, "Take Profit", minval = 1, step = 1)/100
_2 = input(false, '──────── WT CROSS SETTINGS ────────')
wtcross = input(title='WT Cross On/Off?', defval=true)
wtcross2 = input(title='Change WT Cross Method ( If WT Cross ON )', defval=false)
/// WT CROSS ///
n1 = input(10, 'Channel Length')
n2 = input(21, 'Average Length')
ap = hlc3
esa = ta.ema(ap, n1)
r = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * r)
tci = ta.ema(ci, n2)
wt1 = tci
wt2 = ta.sma(wt1, 4)
/// WT CROSS ///
/// HULL TREND WITH KAHLMAN ///
_3 = input(false, '──────── HULLMA SETTINGS ────────')
srchull = input(hl2, 'Source')
lengthhull = input(24, 'Lookback')
gain = input(10000, 'Gain')
kh = input(true, 'Use Kahlman')
hma(_srchull, _lengthhull) =>
ta.wma((2 * ta.wma(_srchull, _lengthhull / 2)) - ta.wma(_srchull, _lengthhull), math.round(math.sqrt(_lengthhull)))
hma3(_srchull, _lengthhull) =>
p = lengthhull / 2
ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p)
kahlman(x, g) =>
kf = 0.0
dk = x - nz(kf[1], x)
smooth = nz(kf[1], x) + dk * math.sqrt(g / 10000 * 2)
velo = 0.0
velo := nz(velo[1], 0) + g / 10000 * dk
kf := smooth + velo
kf
a = kh ? kahlman(hma(srchull, lengthhull), gain) : hma(srchull, lengthhull)
b = kh ? kahlman(hma3(srchull, lengthhull), gain) : hma3(srchull, lengthhull)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]
p1hma = plot(a, color=c, linewidth=1, title='Long Plot', transp=75)
p2hma = plot(b, color=c, linewidth=1, title='Short Plot', transp=75)
fill(p1hma, p2hma, color=c, title='Fill', transp=55)
/// HULL TREND WITH KAHLMAN ///
/// DATE ///
_4 = input(false, '───────── DATE SETTINGS ─────────')
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=999, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
time >= start and time <= finish ? true : false
/// DATE ///
/// LONG/SHORT CONDITION ///
longCondition = crossup and ta.crossover(wt1,wt2)
longCondition1 = crossup
longCondition2 = crossup and wt1 > wt2
if (wtcross == true ? longCondition : wtcross == false ? longCondition1:na)
strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
else if (wtcross2 == true ? longCondition2 : wtcross2 == false ? longCondition:na)
strategy.entry("LONG", strategy.long, when=window(), comment="Enter Long")
shortCondition = crossdn and ta.crossunder(wt1,wt2)
shortCondition1 = crossdn
shortCondition2 = crossdn and wt1 < wt2
if (wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na)
strategy.entry("SHORT", strategy.short, when=window(), comment="Enter Short")
else if (wtcross2 == true ? shortCondition2 : wtcross2 == false ? shortCondition:na)
strategy.entry("LONG", strategy.long, when=window(), comment="Enter Short")
/// LONG/SHORT CONDITION ///
/// CLOSE STRATEGY ///
strategy.close("LONG", when=wtcross == true ? shortCondition : wtcross == false ? shortCondition1:na, comment = "Close Long")
strategy.close("SHORT", when=wtcross == true ? longCondition : wtcross == false ? longCondition1:na, comment = "Close Short")
/// EXIT STRATEGY ///
strategy.exit("LONG", when=strategy.position_size > 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 - stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 + takeprofit):na, comment="Exit Long")
strategy.exit("SHORT", when=strategy.position_size < 0, stop=stoploss1 == true ? strategy.position_avg_price * (1 + stoploss):na, limit=takeprofit1 == true ? strategy.position_avg_price * (1 - takeprofit):na, comment ="Exit Short")
/// LONG SL/TP LINE ///
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 - stoploss) : na, title='Long Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeprofit) : na, title='Long Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)
/// LONG SL/TP LINE ///
/// SHORT SL/TP LINE ///
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 + stoploss) : na, title='Short Stop Loss', color=stoploss1 == true ? color.new(color.red, 0):na, style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeprofit) : na, title='Short Take Profit', color=takeprofit1 == true ? color.new(color.green, 0):na, style=plot.style_linebr)
/// SHORT SL/TP LINE ///