Stan The Man - Uma estratégia avançada de negociação de ações baseada em média móvel dupla e volatilidade

Autora:ChaoZhang, Data: 2023-12-20 14:54:41
Tags:

img

Resumo

Esta estratégia utiliza o sistema de média móvel dupla e índice de força relativa, combinado com a volatilidade histórica do estoque, para automatizar os sinais de compra e venda para a negociação de ações.

Estratégia lógica

A estratégia aproveita a média móvel de 150 semanas e a média móvel rápida de 50 dias para formar um sistema de MA duplo. Ele também usa MA ultra rápida de 20 dias. Quando o preço cruza acima da MA de 150 semanas, ele sinaliza o início de uma tendência de alta. Quando o preço cruza abaixo da MA de 50 dias, ele sinaliza uma tendência de queda. Isso nos permite comprar no caminho para cima e vender no caminho para baixo.

Além disso, a estratégia também usa o preço mais alto anualizado com base na volatilidade e no índice de força relativa para determinar pontos de entrada específicos.

Vantagens

  1. O sistema de MA duplo pode identificar eficazmente as alterações de tendência para perseguir a tendência ascendente e parar a tendência descendente.

  2. A medida de volatilidade e o RSI garantem que não nos deixemos levar pelos mercados laterais.

  3. A MA rápida de 20 dias permite um stop loss mais rápido.

Riscos

  1. Há algum atraso, incapaz de perceber o stop loss rapidamente.

  2. Não há stop loss, pode levar a grandes perdas.

  3. Falta de otimização de parâmetros, parâmetros definidos de forma bastante arbitrária.

Para mitigar os riscos, o stop loss pode ser adicionado ou usar múltiplos de ATR como porcentagem de stop loss.

Oportunidades de melhoria

  1. Adicionar mecanismo de stop loss
  2. Encontrar parâmetros ideais através da otimização
  3. Considere adicionar outros filtros como volume
  4. Podia construí-lo em um modelo multifator com mais fatores

Resumo

Em resumo, esta é uma estratégia de investimento em ações bastante conservadora. Usando o sistema de MA duplo para medir a tendência geral, combinando com as medidas de volatilidade e força para a entrada no tempo, ele pode filtrar efetivamente falhas. O MA rápido também permite saídas rápidas. No entanto, a estratégia pode ser melhorada adicionando stop loss, otimização de parâmetros, etc. No geral, ele é adequado para investidores de ações de longo prazo.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Relative Strength
strategy("Stan my man", overlay=true)
comparativeTickerId = input("BTC_USDT:swap",  title="Comparative Symbol")
l = input(50, type=input.integer, minval=1, title="Period")
baseSymbol = security(syminfo.tickerid, timeframe.period, close)
comparativeSymbol = security(comparativeTickerId, timeframe.period, close)
hline(0, color=color.black, linestyle=hline.style_dotted)
res = baseSymbol / baseSymbol[l] /(comparativeSymbol / comparativeSymbol[l]) - 1
plot(res, title="RS", color=#1155CC)

//volume ma
vol1 = sma(volume,20)
// 30 week ma
ema1 = ema(close, 150)
//consolidation
h1 = highest(high[1],365)

fastPeriod = input(title="Fast MA", type=input.integer, defval=50)
slowPeriod = input(title="Slow MA", type=input.integer, defval=150)
fastestperiod = input(title="Fastest MA", type=input.integer, defval=20)

fastEMA = ema(close, fastPeriod)
slowEMA = ema(close, slowPeriod)
fastestEMA = ema(close, fastestperiod)

monitorStrategy = close < close[20]


// trade conditions
buytradecondition1 = close >ema1 and res>0 and volume> 1.5*vol1 and close > h1
buytradecondition2 = close > fastEMA  and volume> 1.5* vol1 
selltradecondition1  = close< 0.95 * fastEMA 
selltradecondition2  = close< 0.90 * open

if (buytradecondition1)
    strategy.entry("long",strategy.long,alert_message ="Seems ready to Buy")
    alert("Buy Alert Price (" + tostring(close) + ") crossed over Slow moving average",alert.freq_all)
    
if (buytradecondition2)
    strategy.entry("long",strategy.long,alert_message ="Seems ready to Buy")
    alert("Buy Alert Price (" + tostring(close) + ") crossed over fast moving average",alert.freq_all)
    
if (selltradecondition1)
    strategy.close("long",alert_message ="Seems ready to Sell")
    alert("Sell Alert Price (" + tostring(close) + ") crossed down fast moving average",alert.freq_all)
    
if (selltradecondition2)
    strategy.close("long",alert_message ="Seems ready to Sell")
    alert("Sell Alert Price (" + tostring(close) + ") crossed down 10% below open price  ",alert.freq_all)

//alertcondition(buytradecondition1,title ="BuySignal", message ="Price Crossed Slow Moving EMA ")

plot(fastEMA, color=color.navy)
plot(slowEMA, color=color.fuchsia)
plot(fastestEMA, color=color.green)

Mais.