
A estratégia de acompanhamento de tendências do canal celta do cruzeiro do ouro é uma estratégia de negociação apenas na direção da tendência. Combina o cruzeiro do ouro da média móvel e o canal celta como sinais de entrada para capturar a direção da tendência.
A estratégia usa duas médias móveis, a média móvel de curto prazo e a média móvel de longo prazo, para determinar a direção da tendência, formando um cruzamento de ouro e um cruzamento de morte. Ao mesmo tempo, ela usa múltiplos definidos pelo usuário para traçar os trajectos ascendentes e descendentes do canal celta, gerando um sinal de negociação quando o preço quebra o canal.
Especificamente, a estratégia primeiro julga se a média móvel de longo prazo está acima da média móvel de curto prazo, e se for, é cruzada para o ouro, julgando-a como uma tendência para cima; se a média móvel de curto prazo estiver abaixo da média móvel de longo prazo, é cruzada para a morte, julgando-a como uma tendência para baixo.
Com base no julgamento de tendências, se o preço quebrar o trajeto, um sinal de multiplicação é gerado; se o preço cair para baixo, um sinal de ruptura é gerado. O usuário pode ajustar o ciclo da média móvel e a largura do canal, ajustando assim os parâmetros da estratégia.
Após a entrada, a estratégia usa o ATR de stop loss definido pelo usuário para definir o stop loss. Além disso, a estratégia também fornece condições de stop loss e stop loss adicionais, permitindo um controle mais flexível da posição.
A estratégia combina os benefícios do acompanhamento de tendências e do rompimento de canais, permitindo uma avaliação eficiente do movimento do mercado e das oportunidades de captura de tendências. Os benefícios específicos são os seguintes:
Usando o cruzeiro dourado para determinar a direção da tendência, pode-se filtrar de forma eficaz os negócios ruidosos que não estão de acordo com a grande tendência.
A brecha do canal celta, combinada com a determinação da direção da tendência, pode melhorar a precisão do tempo de entrada no mercado.
O mecanismo de stop-loss bloqueia o lucro e controla ativamente o risco.
Os parâmetros da estratégia podem ser ajustados de forma flexível para diferentes variedades e ambientes de mercado.
Pode fazer mais curto-circuito ao mesmo tempo, ampliando o alcance da estratégia.
Embora a estratégia tenha muitos benefícios, há alguns riscos a serem considerados:
O que é que se passa com as pessoas que não têm acesso a internet?
Se a tendência geral mudar, pode haver um risco de perdas adversas.
A configuração inadequada dos parâmetros pode levar a transações excessivamente flexíveis ou frequentes.
O risco de passar a noite fora.
Existe um certo risco de curva de adequação.
Para isso, pode-se reduzir o risco por meio de otimização de parâmetros, ajuste do ciclo da média móvel em tempo hábil, ou reduzir adequadamente o tamanho da posição.
A estratégia ainda tem espaço para ser melhorada:
Pode-se considerar a inclusão de mais indicadores de julgamento, a formação de modelos multifatores, a melhoria da precisão da estratégia. Por exemplo, a inclusão do MACD, RSI, etc.
Os parâmetros podem ser otimizados com base no aprendizado de máquina para se adaptar melhor a diferentes ambientes de mercado.
Pode-se considerar o ajuste dinâmico das condições de stop loss para buscar maiores ganhos, com a premissa de garantir lucros.
O tamanho da posição pode ser ajustado de acordo com a dinâmica da variação da taxa de flutuação.
Estudar as preferências de parâmetros de diferentes variedades e desenvolver combinações de parâmetros adequadas para diferentes variedades.
Adicionar mecanismos de redução da frequência de transação para reduzir o impacto das taxas de transação.
A estratégia de acompanhamento de tendências do canal celta do cruzeiro do ouro é, em geral, uma estratégia de acompanhamento de tendências mais estável e confiável. Combina os benefícios do julgamento de tendências e do rompimento de canais, para identificar efetivamente a direção da tendência do mercado e selecionar oportunidades de negociação de alta probabilidade. Com otimização de parâmetros e melhorias no mecanismo, a estratégia pode se tornar uma poderosa ferramenta de negociação quantitativa.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 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/
// © OversoldPOS
//@version=5
// strategy("Keltner Channel Strategy by OversoldPOS", overlay=true,initial_capital = 100000,default_qty_type = strategy.percent_of_equity,default_qty_value = 10, commission_type = strategy.commission.cash_per_order, commission_value = 7)
// Parameters
length = input(21, title="MA Length")
Entrymult = input(1, title="Entry ATR")
profit_mult = input(4, title="Profit Taker")
exit_mult = input(-1, title="Exit ATR")
// Moving Average Type Input
ma_type = input.string("SMA", title="Moving Average Type", options=["SMA", "EMA", "WMA"])
// Calculate Keltner Channels for different ATR multiples
atr_value = ta.atr(length)
basis = switch ma_type
"SMA" => ta.sma(close, length)
"EMA" => ta.ema(close, length)
"WMA" => ta.wma(close, length)
//
EntryKeltLong = basis + Entrymult * ta.atr(10)
EntryKeltShort = basis - Entrymult * ta.atr(10)
upper_channel1 = basis + 1 * ta.atr(10)
lower_channel1 = basis - 1 * ta.atr(10)
upper_channel2 = basis + 2 * ta.atr(10)
lower_channel2 = basis - 2 * ta.atr(10)
upper_channel3 = basis + 3 * ta.atr(10)
lower_channel3 = basis - 3 * ta.atr(10)
upper_channel4 = basis + 4 * ta.atr(10)
lower_channel4 = basis - 4 * ta.atr(10)
// Entry condition parameters
long_entry_condition = input(true, title="Long Positions")
short_entry_condition = input(true, title="Enable Short Positions")
// Additional conditions for long and short entries
is_long_entry = ta.ema(close, 20) > ta.ema(close, 50)
is_short_entry = ta.ema(close, 20) < ta.ema(close, 50)
// Additional conditions for long and short entries
MAShort = input(50, title="Short MA for Golden Cross")
MALong = input(200, title="Long MA for Golden Cross")
is_long_entry2 = ta.ema(close, MAShort) > ta.ema(close, MALong)
is_short_entry2 = ta.ema(close, MAShort) < ta.ema(close, MALong)
// Exit condition parameters
long_exit_condition1_enabled = input(true, title="Enable Long Profit Taker")
long_exit_condition2_enabled = input(true, title="Enable Long Stop")
short_exit_condition1_enabled = input(true, title="Enable Short Profit Taker")
short_exit_condition2_enabled = input(true, title="Enable Short Stop")
// Take Profit condition parameters
take_profit_enabled = input(true, title="Enable Take Profit Condition")
Takeprofit = basis + profit_mult * atr_value
STakeprofit = basis - profit_mult * atr_value
// Long entry condition
long_condition = long_entry_condition and ta.crossover(close, EntryKeltLong) and is_long_entry2
// Short entry condition
short_condition = short_entry_condition and ta.crossunder(close, EntryKeltShort) and is_short_entry2
// Exit conditions
long_exit_condition1 = long_exit_condition1_enabled and close > Takeprofit
long_exit_condition2 = long_exit_condition2_enabled and close < basis + exit_mult * atr_value
short_exit_condition1 = short_exit_condition1_enabled and close < STakeprofit
short_exit_condition2 = short_exit_condition2_enabled and close > basis - exit_mult * atr_value
// Strategy logic
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)
if (long_exit_condition1 or long_exit_condition2)
strategy.close("Long")
if (short_exit_condition1 or short_exit_condition2)
strategy.close("Short")
// Moving Averages
var float MA1 = na
var float MA2 = na
if (ma_type == "SMA")
MA1 := ta.sma(close, MAShort)
MA2 := ta.sma(close, MALong)
else if (ma_type == "EMA")
MA1 := ta.ema(close, MAShort)
MA2 := ta.ema(close, MALong)
else if (ma_type == "WMA")
MA1 := ta.wma(close, MAShort)
MA2 := ta.wma(close, MALong)
// Plotting Keltner Channels with adjusted transparency
transparentColor = color.rgb(255, 255, 255, 56)
plot(upper_channel1, color=transparentColor, title="Upper Channel 1")
plot(lower_channel1, color=transparentColor, title="Lower Channel 1")
plot(upper_channel2, color=transparentColor, title="Upper Channel 2")
plot(lower_channel2, color=transparentColor, title="Lower Channel 2")
plot(upper_channel3, color=transparentColor, title="Upper Channel 3")
plot(lower_channel3, color=transparentColor, title="Lower Channel 3")
plot(upper_channel4, color=transparentColor, title="Upper Channel 4")
plot(lower_channel4, color=transparentColor, title="Lower Channel 4")
plot(basis, color=color.white, title="Basis")
plot(MA1, color=color.rgb(4, 248, 216), linewidth=2, title="Middle MA")
plot(MA2, color=color.rgb(220, 7, 248), linewidth=2, title="Long MA")