
Este artigo discute uma estratégia de negociação baseada em uma média móvel simples. A estratégia usa uma média móvel de 17 de comprimento para comparar com o preço de fechamento, fazendo mais quando o preço de fechamento atravessa a média móvel e fazendo zero quando o preço de fechamento atravessa.
A estratégia utiliza os seguintes parâmetros para calcular a média móvel:
De acordo com esses parâmetros, a função getMAType (()) é chamada para calcular o preço de fechamento SMA de 17 ciclos.
Em seguida, compare a relação entre o preço de fechamento e a média móvel:
Quando os preços de fechamento atravessam a média móvel de baixo para cima, geram sinais de fazer mais; quando atravessam de cima para baixo, geram sinais de fazer menos.
Durante o ciclo de retrospecção, se houver um sinal de excesso de negociação, a posição será aberta, e se houver um sinal de excesso de negociação, a posição será aberta.
A maior vantagem da estratégia é que a idéia é muito simples e clara. Apenas um indicador para julgar a mudança de tendência através de sua mudança de direção. A estratégia é fácil de entender, fácil de implementar e adequada para aprendizagem de iniciantes.
Além disso, a média móvel é um indicador de tendência de acompanhamento, que permite efetivamente acompanhar a mudança de tendência, evitando ser interrompido pelo ruído de curto prazo no mercado.
Pode ser adaptado a diferentes períodos e variedades através de ajustes de parâmetros.
Em primeiro lugar, a estratégia baseia-se em apenas um indicador, um critério muito simples, que pode gerar mais sinais errados.
Além disso, a estratégia é um sistema de acompanhamento de tendências que não pode funcionar em mercados de liquidação e de turbulência.
Além disso, não há um parâmetro de stop loss, o que aumenta o risco de expansão dos prejuízos.
A solução é combinar outros indicadores, otimizar a combinação de parâmetros, reduzir os sinais errados. Configurar um stop loss, controlar o risco e otimizar a retirada.
Os seguintes aspectos podem ser considerados como estratégias de otimização:
Ajustar os parâmetros da média móvel, otimizar o número de ciclos. Por exemplo, mudar para 30 ou 50 ciclos.
Experimente diferentes tipos de médias móveis, como EMA, VIDA, etc. Eles são diferentes em termos de sensibilidade às mudanças de preço.
Aumentar a combinação com outros indicadores. Por exemplo, a combinação com o MACD, que permite determinar a força e a fraqueza. Ou a combinação com o RSI, que reduz os sinais errados.
Aumentar o mecanismo de stop loss. Definir o stop loss móvel de uma porcentagem fixa ou o valor do ATR. Controlar a perda individual.
Aumentar o mecanismo de suspensão. Definir a porcentagem de lucro alvo. Maximizar os lucros.
Estas melhorias permitem que a estratégia seja mais estável, evitando grandes retrações.
Este artigo analisa uma estratégia de negociação simples baseada em uma média móvel de 17 períodos. A fonte do sinal da estratégia é simples, fácil de entender e implementar, pertencendo a um típico sistema de acompanhamento de tendências. Através de uma interpretação profunda da estratégia, analisa seus pontos fortes e riscos, e dá uma visão de otimização em várias dimensões. Acredita-se que, com otimização e enriquecimento contínuos, a estratégia pode evoluir gradualmente e também obter ganhos estáveis no mercado real.
/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)
///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) =>
res = sma(close, 1)
if maType == "ema"
res := ema(sourceType, maLen)
if maType == "sma"
res := sma(sourceType, maLen)
if maType == "swma"
res := swma(sourceType)
if maType == "wma"
res := wma(sourceType, maLen)
if maType == "vwma"
res := vwma(sourceType, maLen)
if maType == "rma"
res := rma(sourceType, maLen)
res
MA = getMAType(maType, source, length)
/////////////// Strategy ///////////////
long = close > MA
short = close < MA
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long_signal)
strategy.entry("S", strategy.short, when=short_signal)
/////////////// Plotting ///////////////
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)