
Trata-se de uma estratégia de negociação de tendências em múltiplos pontos, que combina a análise de transações e a análise de transações. A estratégia toma decisões de negociação através da comparação de sinais cruzados de médias móveis de curto e longo prazo, combinando indicadores de transações. Quando a média de curto prazo atravessa a média de longo prazo e a transação aumenta significativamente, o sistema emite um sinal múltiplo.
A lógica central da estratégia é baseada nos seguintes elementos-chave:
Risco de mercado de choque: em mercados de choque horizontal, a frequência de cruzamentos de equilíbrio pode levar a várias falsas rupturas. Solução: Pode ser adicionado um indicador de confirmação de tendência, como o ADX ou um indicador de força de tendência.
Risco de deslizamento: quando o volume de negócios aumenta, pode haver uma perda de deslizamento maior. Solução: Recomenda-se a definição de tolerâncias de deslizamento razoáveis e o uso de lista de limite para abrir uma posição.
Risco de desencadeamento de stop loss: O stop loss de porcentagem fixa pode ser muito sensível quando a volatilidade do mercado aumenta. Solução: Pode-se considerar a utilização de ATR para parar a perda dinâmica ou a correção da taxa de flutuação.
A estratégia é construída em um sistema de negociação relativamente completo, combinando tendências de preços e mudanças de volume de transação. A vantagem da estratégia é o mecanismo de confirmação múltipla e o controle de risco perfeito, mas pode enfrentar o risco de falsas rupturas em mercados turbulentos.
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Crossover with Volume (Long Only) + Stop Loss", overlay=true)
// Input settings for Moving Averages
shortMaLength = input.int(9, title="Short MA Length", minval=1)
longMaLength = input.int(21, title="Long MA Length", minval=1)
// Input settings for Volume
volumeMaLength = input.int(20, title="Volume MA Length", minval=1)
volumeThresholdMultiplier = input.float(1.5, title="Volume Multiplier (x times the average)", step=0.1)
// Input settings for Stop Loss
stopLossPercent = input.float(2.0, title="Stop Loss (%)", minval=0.1, step=0.1) / 100 // Stop loss in percentage
// Calculating Moving Averages
shortMa = ta.sma(close, shortMaLength)
longMa = ta.sma(close, longMaLength)
// Calculating Volume Metrics
volumeMa = ta.sma(volume, volumeMaLength) // Average volume
isVolumeAboveAverage = volume > (volumeMa * volumeThresholdMultiplier) // Volume above threshold
isVolumeIncreasing = volume > volume[1] // Volume increasing compared to the previous bar
// Plotting Moving Averages
plot(shortMa, color=color.blue, title="Short MA")
plot(longMa, color=color.orange, title="Long MA")
// Buy Condition with Volume
longCondition = ta.crossover(shortMa, longMa) and isVolumeAboveAverage and isVolumeIncreasing
exitCondition = ta.crossunder(shortMa, longMa) // Exit when the MAs cross downward
// Calculate Stop Loss Level
var float entryPrice = na // Variable to store entry price
if (strategy.position_size > 0 and na(entryPrice)) // Update entry price only when entering a new trade
entryPrice := strategy.position_avg_price
stopLossLevel = entryPrice * (1 - stopLossPercent) // Stop-loss level based on entry price
// Strategy Entry (Long Only)
if (longCondition)
strategy.entry("Long", strategy.long)
// Close position on Stop Loss or Exit Condition
if (strategy.position_size > 0)
if (low < stopLossLevel) // If the price drops below the stop-loss level
strategy.close("Long", comment="Stop Loss Hit")
if (exitCondition)
strategy.close("Long", comment="Exit Signal Hit")
// Debugging Plots
plot(volumeMa, color=color.purple, title="Volume MA", style=plot.style_area, transp=80)
hline(0, "Zero Line", color=color.gray)