
A estratégia de negociação de dupla equilíbrio gera um sinal de negociação com base no cruzamento de duas médias móveis, calculadas em média móvel rápida e média móvel lenta. Quando a média móvel lenta é cruzada acima da média móvel rápida, uma estratégia de múltiplas cabeças é adotada; quando a média móvel lenta é cruzada abaixo da média móvel rápida, uma estratégia de vazio é adotada.
A estratégia começa por definir a duração da média móvel rápida (maFastLength) e a média móvel lenta (maSlowLength). A média móvel rápida (fastMA) e a média móvel lenta (slowMA) são então calculadas. A média móvel rápida é mais sensível à mudança de preço e pode ser usada para determinar a tendência atual; a média móvel lenta é mais lenta para responder a mudança de preço e pode ser usada para determinar a direção da tendência.
Quando a média móvel rápida atravessou a média móvel lenta, a estratégia de multiplicação foi adotada, gerando um sinal de goLong (). Quando a média móvel rápida atravessou a média móvel lenta, a posição de equilíbrio foi feita, gerando um sinal de killLong ().
Pode-se optar por fazer apenas estratégias longonly, fazer apenas estratégias shorting, ou swapping de negociação bidirecional.
Quando você faz estratégias em múltiplos, abra mais posições quando o sinal de goLong ((() é emitido; e pare quando o sinal de killLong ((() é emitido.
Quando a estratégia de fechar, fechar a posição quando o sinal de killLong () é emitido; fechar a posição quando o sinal de goLong () é emitido.
No caso de negociação bidirecional, abra uma posição a mais quando o sinal de goLong () for emitido; Peça uma posição a mais e abra uma posição a zero quando o sinal de killLong () for emitido.
Além disso, a estratégia também possui funções como stop loss, stop loss tracking e notificações de negociação, permitindo uma escolha flexível entre elas.
A estratégia é simples, fácil de entender e de implementar.
Pode optar por fazer uma operação a longo prazo, a curto prazo ou a dois lados.
Há uma flexibilidade para escolher entre o uso de funções de gerenciamento de risco, como stop loss e o rastreamento de stop loss.
A mensagem de transação pode ser personalizada, com sugestões de transações em tempo real.
A estratégia de linha média rápida e lenta é sensível às mudanças nas tendências do mercado e pode capturar tendências mais fortes.
Os parâmetros da estratégia são ajustáveis, podem ser ajustados para diferentes mercados e são altamente adaptáveis.
Quando o mercado não tem uma tendência óbvia, pode haver mais falsos sinais, o que leva a uma sobrevenda.
O sistema de linha média não é sensível a eventos de emergência e pode perder oportunidades de emergência.
É necessário escolher razoavelmente os parâmetros da linha média, pois a escolha incorreta dos parâmetros pode afetar o efeito da estratégia.
A estratégia de negociação deve ser rigorosamente seguida para evitar transações arbitrárias.
O impacto dos custos de transação na rentabilidade estratégica deve ser observado.
Pode-se introduzir outros indicadores, como o RSI, para validar os sinais de negociação e evitar a emissão de sinais errados.
Pode-se configurar a função de otimização de parâmetros para encontrar automaticamente a combinação de parâmetros mais adequada.
Pode-se configurar um stop loss dinâmico para bloquear o lucro e ajustar o ponto de stop loss quando necessário.
Os modelos de aprendizagem de máquina podem ser usados para ajudar a determinar a direção das tendências.
Os usuários podem otimizar as notificações para se adequarem aos seus hábitos de negociação.
A estratégia de negociação em linha dupla é, em geral, mais simples e prática, mais sensível às mudanças nas tendências do mercado e pode capturar oportunidades de negociação de tendências mais fortes. Mas também é necessário ter cuidado para evitar erros de negociação em mercados sem tendências e ajustar adequadamente os parâmetros para se adaptar a diferentes ambientes de mercado. Além disso, a inclusão apropriada de indicadores e funções de otimização de tecnologias auxiliares pode aumentar ainda mais a estabilidade e a adaptabilidade da estratégia.
/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === Inputs ===
// short ma
maFastSource = input(defval=close, title="Fast MA Source")
maFastLength = input(defval=3, title="Fast MA Period", minval=1)
// long ma
maSlowSource = input(defval=close, title="Slow MA Source")
maSlowLength = input(defval=9, title="Slow MA Period", minval=1)
// Trade direction
shorting = input(defval=false, title="Short only?")
longonly = input(defval=true, title="Long only?")
swapping = input(defval=false, title="Swap orders?")
// risk management
useStop = input(defval=false, title="Use Initial Stop Loss?")
slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1)
useTS = input(defval=false, title="Use Trailing Stop?")
tslPoints = input(defval=120, title="Trail Points", minval=1)
useTSO = input(defval=false, title="Use Offset For Trailing Stop?")
tslOffset = input(defval=20, title="Trail Offset Points", minval=1)
// Messages for buy and sell
message_long_entry = input("Long entry message", title="Long entry message")
message_long_exit = input("Long exit message", title="Long exit message")
message_short_entry = input("Short entry message", title="Short entry message")
message_short_exit = input("Short exit message", title="Short exit message")
// Calculate start/end date and time condition
startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time)
time_cond = true
// === Vars and Series ===
fastMA = sma(maFastSource, maFastLength)
slowMA = sma(maSlowSource, maSlowLength)
plot(fastMA, color=color.blue)
plot(slowMA, color=color.purple)
goLong() =>
crossover(fastMA, slowMA)
killLong() =>
crossunder(fastMA, slowMA)
// Long only
if longonly
strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit)
// Short only
if shorting
strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)
strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit)
// Order Swapping
if swapping
strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)
if useStop
strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit)
strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)