Esta estratégia usa uma média móvel rápida e lenta de dois Arnaud Legoux (ALMA) para avaliar sinais de negociação. A ALMA é uma melhoria na média móvel tradicional, reduzindo o atraso e suavizando a curva. A estratégia gera um sinal de compra através de uma ALMA lenta em cima da ALMA rápida, gerando um sinal de venda através de uma ALMA lenta em baixo da ALMA rápida, ao mesmo tempo em que combina filtros de sobreação para formar um sinal de cruzamento mais estável.
Os principais indicadores e regras de negociação da estratégia são:
ALMA Rápido: período mais curto para capturar a ruptura.
ALMA lento: período mais longo, usado para avaliar grandes tendências.
Filtragem de volume de transação: é válida quando a média de curto prazo é usada em cima da média de longo prazo.
Fazer múltiplos sinais: ALMA rápido atravessa ALMA lento e o filtro de transação é efetivo.
Sinais de Ponto: ALMA rápida atravessa ALMA lenta.
Filtro de transferência: ALMA rápido passa pelo ALMA lento e o filtro de transferência funciona.
Sinal de plano: ALMA rápida atravessa ALMA lenta.
A estratégia é simples e intuitiva, mas combina vários indicadores técnicos, como o julgamento de tendências, a captura de brechas e a verificação de volume de transação, formando um sistema de negociação relativamente estável. A combinação de linhas médias rápidas e lentas pode determinar efetivamente a direção da tendência; A aplicação do algoritmo ALMA reduz o impacto do atraso nas negociações; A adição de volume de transação evita muitos falsos brechas indeterminados.
Em comparação com a estratégia tradicional de cruzamento de equilíbrio, a estratégia tem as seguintes vantagens:
O algoritmo ALMA reduz o atraso e melhora a qualidade do sinal.
A filtragem por volume de entrega evita a perda de falhas.
A linha média é usada para avaliar a tendência e evitar a inversão.
As regras são simples, intuitivas e fáceis de entender.
Parâmetros da linha média podem ser ajustados de forma flexível para diferentes mercados.
A gestão de fundos é racional e permite controlar as perdas individuais.
Pode-se melhorar ainda mais a eficácia da estratégia através da otimização dos parâmetros da linha média.
Em geral, a estabilidade e a qualidade do sinal foram melhoradas em comparação com a estratégia de paridade tradicional.
Apesar das vantagens desta estratégia, os riscos a serem levados em conta são:
A estratégia de equilíbrio é, por natureza, suscetível a falhas em mercados turbulentos, resultando em perdas repetidas.
A configuração dos parâmetros do algoritmo ALMA afeta a eficácia da estratégia.
O efeito de amplificação do volume de transação pode induzir o julgamento de sinais de transação.
O atraso não pode ser totalmente evitado.
A otimização de parâmetros tem o risco de ser um exagero.
O sinal falha em caso de anomalias de transmissão.
Algoritmos como o aprendizado de máquina podem ter melhores resultados.
Atenção ao índice de retracção de receita, para evitar que a curva fique muito curva.
Tendo em conta os fatores de risco acima mencionados, a estratégia pode ser otimizada em vários aspectos:
Optimizar os parâmetros da linha média do ALMA para aumentar a sensibilidade da reação.
Experimente diferentes métodos de cálculo de transações.
Introduzir estratégias de stop loss e controlar rigorosamente as perdas individuais.
A criação de um sistema de sinais de transação integrado em combinação com outros indicadores.
A adição de módulos de aprendizagem de máquina permite um ajuste de sinal mais inteligente.
A população é dividida em quatro grupos:
Otimizar a estratégia de gestão de fundos e ajustar as posições de acordo com os diferentes mercados.
Estratégias para a robustez e prevenção da sobre-adaptação.
A estratégia, em geral, aumenta a qualidade e a estabilidade do sinal através do algoritmo ALMA e da verificação de volume de transação, em comparação com a estratégia tradicional de cruzamento de linha média. No entanto, a otimização da estratégia de negociação é um processo contínuo, que ainda requer atenção ao risco e a melhoria da estratégia em várias dimensões para adaptá-la a um ambiente de mercado mais complexo.
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 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/
// © Sarahann999
// Calculations for TP/SL based off: https://kodify.net/tradingview/orders/percentage-profit/
//@version=5
strategy("ALMA Cross", overlay=true)
//User Inputs
src= (close)
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')
//Fast Settings
ALMA1 = input(100, "ALMA Lenghth 1", group= "ALMA Fast Length Settings")
alma_offset = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma1 = ta.alma(src, ALMA1, alma_offset, alma_sigma)
//Slow Settings
ALMA2 = input(120, "ALMA Length 2", group = "ALMA Slow Length Settings")
alma_offset2 = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma2 = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma2 = ta.alma(src, ALMA2, alma_offset2, alma_sigma2)
//Volume
var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
runtime.error("No volume is provided by the data vendor.")
shortlen = input.int(5, minval=1, title = "Short Length", group= "Volume Settings")
longlen = input.int(10, minval=1, title = "Long Length")
short = ta.ema(volume, shortlen)
long = ta.ema(volume, longlen)
osc = 100 * (short - long) / long
//Define Cross Conditions
buy = ta.crossover(Alma1, Alma2)
sell = ta.crossunder(Alma1, Alma2)
//Calculate Take Profit Percentage
longProfitPerc = input.float(title="Long Take Profit", group='Take Profit Percentage',
minval=0.0, step=0.1, defval=2) / 100
shortProfitPerc = input.float(title="Short Take Profit",
minval=0.0, step=0.1, defval=2) / 100
// Figure out take profit price 1
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
// Make inputs that set the stop % 1
longStopPerc = input.float(title="Long Stop Loss", group='Stop Percentage',
minval=0.0, step=0.1, defval=2.5) / 100
shortStopPerc = input.float(title="Short Stop Loss",
minval=0.0, step=0.1, defval=2.5) / 100
// Figure Out Stop Price
longStopPrice = strategy.position_avg_price * (1 - longStopPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)
//Define Conditions
buySignal = buy and osc > 0
and strategy.position_size == 0
//sellSignal
sellSignal = sell and osc > 0
and strategy.position_size == 0
// Submit entry orders
if buySignal and long_entry
strategy.entry(id="Long", direction=strategy.long, alert_message="Enter Long")
alert(message="BUY Trade Entry Alert", freq=alert.freq_once_per_bar)
if sellSignal and short_entry
strategy.entry(id="Short", direction=strategy.short, alert_message="Enter Short")
alert(message="SELL Trade Entry Alert", freq=alert.freq_once_per_bar)
// Submit exit orders based on take profit price
if (strategy.position_size > 0)
strategy.exit(id="Long TP/SL", limit=longExitPrice, stop=longStopPrice, alert_message="Long Exit 1 at {{close}}")
if (strategy.position_size < 0)
strategy.exit(id="Short TP/SL", limit=shortExitPrice, stop=shortStopPrice, alert_message="Short Exit 1 at {{close}}")
//Draw
plot(Alma1,"Alma Fast", color=color.purple, style=plot.style_circles)
plot(Alma2,"Alma Slow", color=#acb5c2, style=plot.style_circles)