Esta estratégia usa o índice CHOP como os principais indicadores técnicos para identificar e rastrear tendências. Ele entra quando o índice quebra os trilhos superior e inferior, combinado com a direção da tendência como sinais de entrada; e sai com stop loss ou take profit quando o índice reentra na área do cinturão.
Utilize o ATR para calcular o tamanho da caixa e construir o canal Renko para determinar a direção da tendência do preço.
Aplique o índice CHOP para julgar se o mercado é adequado para negociação. Este índice incorpora o preço mais alto, o preço mais baixo e ATR. Quando está entre 38,2-61,8, indica baixa volatilidade do mercado; caso contrário, sinaliza alta volatilidade e mercado de negociação inadequado.
Quando o índice CHOP quebra o trilho superior de 61,8, o preço entra em uma tendência de queda. Se a EMA rápida de curto prazo também mostrar que o preço está liderando, vá curto. Por outro lado, quando o CHOP quebra o trilho inferior de 38,2 e a EMA de curto prazo sobe, vá longo.
Quando o preço voltar a entrar na área da faixa 38.2-61.8 do CHOP, feche a posição com stop loss ou take profit.
Esta estratégia combina o julgamento da tendência e o controlo da volatilidade, que podem capturar as tendências de preços e controlar os riscos.
O canal Renko construído pela ATR pode efetivamente acompanhar as tendências dos preços.
O índice CHOP avalia a taxa de volatilidade do mercado para evitar negociações incorretas em flutuações violentas.
A combinação da EMA rápida para determinar a direcção da tendência a curto prazo evita a operação inversa.
A estratégia stop loss/take profit controla perdas únicas.
Os principais riscos que esta estratégia enfrenta são:
No mercado lateral, o canal ATR e os sinais CHOP podem produzir sinais incorretos.
A combinação de um único indicador técnico não pode evitar totalmente as perdas, sendo necessária uma intervenção manual para determinar as principais tendências.
A posição de stop loss definida muito solta pode levar a uma perda única de tamanho excessivo.
Esta estratégia pode ser otimizada nos seguintes aspectos:
Aumentar outros indicadores auxiliares para determinar sinais, como padrões de candelabro, volume, etc. para melhorar a precisão do sinal.
Otimizar os parâmetros do ATR e do CHOP para melhor captar as flutuações de preços.
Estabelecer posições de stop loss/take profit dinâmicas para maiores margens de lucro e stop loss mais rápidos.
Afrouxar adequadamente o intervalo de stop loss após determinar a tendência principal para obter mais lucros na tendência.
Esta estratégia integra indicadores técnicos comumente usados e é simples e prática. Com ajuste e otimização de parâmetros, efeitos de rastreamento satisfatórios podem ser obtidos. Mas ainda requer julgamento manual das principais tendências e não pode ser totalmente automatizado. Pode servir como uma ferramenta auxiliar de tomada de decisão e referência para outras estratégias.
/*backtest start: 2022-12-28 00:00:00 end: 2024-01-03 00:00:00 period: 1d basePeriod: 1h 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/ // © sharatgbhat //@version=4 strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500) maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float) // strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity) method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method") methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value") pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source") useClose = pricesource == "Close" useOpenClose = pricesource == "Open / Close" or useClose useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume") isOscillating = input(defval=false, type=input.bool, title="Oscillating") normalize = input(defval=false, type=input.bool, title="Normalize") vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume op = useClose ? close : open hi = useOpenClose ? close >= op ? close : op : high lo = useOpenClose ? close <= op ? close : op : low if method == "ATR" methodvalue := atr(round(methodvalue)) if method == "Part of Price" methodvalue := close / methodvalue currclose = float(na) prevclose = nz(currclose[1]) prevhigh = prevclose + methodvalue prevlow = prevclose - methodvalue currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose direction = int(na) direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1]) directionHasChanged = change(direction) != 0 directionIsUp = direction > 0 directionIsDown = direction < 0 barcount = 1 barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount vol := not directionHasChanged ? vol[1] + vol : vol res = barcount > 1 ? vol / barcount : vol plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume") length = input(14, minval=1) ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length) offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(ci, "CHOP", color=#2962FF, offset = offset) band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed) band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed) fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background") MomentumBull = close>ema(close,8) MomentumBear = close<ema(close,8) Tradecon = crossunder(ci,61.8) if (MomentumBull and directionIsUp and Tradecon) strategy.entry("Buy", strategy.long) if (MomentumBear and directionIsDown and Tradecon ) strategy.entry("Sell", strategy.short) strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10) strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)