这是一个基于均线交叉和成交量分析的量化交易策略系统。该策略通过多种类型的移动平均线(包括EMA、SMA和WMA)的交叉信号,结合成交量指标进行交易决策。系统支持灵活配置均线类型和参数,同时引入了量能分析作为交易确认条件,提高了交易的可靠性。
策略采用双均线交叉系统作为核心交易信号,结合成交量分析作为辅助判断。具体来说: 1. 使用两条不同周期的移动平均线(MA1和MA2),支持在SMA、EMA和WMA之间自由切换。 2. 引入成交量均线(Volume SMA)作为量能参考标准。 3. 使用200周期EMA作为长期趋势判断基准。 4. 当快速均线向上穿越慢速均线,且当前成交量大于成交量均线时,系统发出做多信号。 5. 当快速均线向下穿越慢速均线,且当前成交量大于成交量均线时,系统发出做空信号。
这是一个结合技术分析经典理论的量化交易策略,通过均线交叉和成交量分析建立交易系统。策略设计合理,具有较强的实用性和可扩展性。通过参数优化和模块完善,可以进一步提升策略的稳定性和盈利能力。建议在实盘使用前进行充分的回测验证,并根据具体交易品种特点调整参数。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Cruzamento de Médias com Volume ☾︎ 𝔇𝔞𝔯𝔎 ✞︎ 𝔗𝔯𝔞𝔡𝔢𝔯 ☽︎", overlay=true)
// Criação de opções no editor para selecionar o tipo de média móvel
maType1 = input.string(title="Tipo de Média Móvel 1", defval="EMA", options=["SMA", "EMA", "WMA"])
maType2 = input.string(title="Tipo de Média Móvel 2", defval="EMA", options=["SMA", "EMA", "WMA"])
// Função para selecionar a média móvel de acordo com o tipo escolhido
getMovingAverage(maType, src, length) =>
if maType == "SMA"
ta.sma(src, length)
else if maType == "EMA"
ta.ema(src, length)
else if maType == "WMA"
ta.wma(src, length)
else
na
// Parâmetros para o cálculo das médias móveis
length1 = input.int(9, title="Período da Média 1")
length2 = input.int(21, title="Período da Média 2")
// Cálculo das médias móveis escolhidas
ma1 = getMovingAverage(maType1, close, length1)
ma2 = getMovingAverage(maType2, close, length2)
// Parâmetro editável para o período da média de volume
volLength = input.int(20, title="Período da Média de Volume")
// Cálculo da média móvel do volume com período ajustável
volSMA = ta.sma(volume, volLength) // Média móvel simples do volume
// Cálculo da EMA de 200 períodos para visualizar a tendência primária
ema200 = ta.ema(close, 200)
// Condições para compra: ma1 cruza acima da ma2 + Volume acima da média de volume ajustável
longCondition = ta.crossover(ma1, ma2) and volume > volSMA
// Condições para venda: ma1 cruza abaixo da ma2 + Volume acima da média de volume ajustável
shortCondition = ta.crossunder(ma1, ma2) and volume > volSMA
// Executa a operação de compra
if (longCondition)
strategy.entry("Compra", strategy.long)
// Executa a operação de venda
if (shortCondition)
strategy.entry("Venda", strategy.short)
// Plotando as médias móveis no gráfico de preços
plot(ma1, color=color.green, title="Média Móvel 1", linewidth=2)
plot(ma2, color=color.red, title="Média Móvel 2", linewidth=2)
// Plotando a EMA de 200 períodos para visualização da tendência de longo prazo
plot(ema200, color=color.orange, title="EMA 200", linewidth=2)
// Plotando a média de volume para visualização no painel inferior
plot(volSMA, color=color.blue, title="Média de Volume", linewidth=2)