Esta estratégia gera sinais de negociação através do cálculo de diferentes tipos de médias móveis (Simple Moving Average SMA, Exponential Moving Average EMA, Hull Moving Average HMA e Weighted Moving Average VWMA) e detectando pontos de cruzamento entre eles, para determinar a tendência do mercado e segui-la.
A ideia central desta estratégia é julgar a tendência do mercado comparando duas médias móveis. Especificamente, permite configurar dois MA com tipos e comprimentos diferentes através de parâmetros de entrada. O primeiro MA tem um período mais longo para representar a tendência principal, enquanto o segundo MA tem um período mais curto para a tendência de curto prazo atual.
Quando o MA de curto prazo cruza o MA de longo prazo de baixo, ele sinaliza que a tendência de curto prazo está se fortalecendo e o mercado está entrando em uma tendência ascendente. Assim, um sinal de compra é gerado neste ponto de cruzamento. Por outro lado, quando o MA de curto prazo cruza abaixo do MA de longo prazo, ele sugere que a tendência de curto prazo está enfraquecendo e o mercado está se revertendo para baixo.
Ao detetar tais cruzamento de MA, esta estratégia segue a tendência do mercado para o comércio.
Soluções:
Esta estratégia baseia-se na idéia clássica de usar MA crossovers para a detecção de tendências principais. Com combinações MA flexíveis, é simples de implementar e adequado para automação de negociação algorítmica.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) f_hma(_src, _length)=> _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length))) price1 = if (type1 == "SMA") sma(price, ma1) else if (type1 == "EMA") ema(price, ma1) else if (type1 == "VWMA") vwma(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else if (type2 == "VWMA") vwma(price, ma2) else f_hma(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short)