Esta estratégia é uma estratégia de negociação de tendência baseada em médias móveis. Ele usa 3 médias móveis com diferentes parâmetros para gerar sinais de negociação. Ele vai longo quando o preço cruza acima da média móvel e vai curto quando o preço cruza abaixo.
A estratégia calcula a média móvel da linha ma com comprimento len utilizando a função sma. Em seguida, calcula 3 linhas médias móveis adicionais longline1, longline2, longline3 que são deslocadas em -4%, -5%, -6% respectivamente com base na ma.
Para a geração de sinal longo, se a posição atual for plana, ela vai longa com 1 lote quando o preço cruza acima da longline1. Se já for 1 lote longo, ela adiciona mais 1 lote quando o preço cruza acima da longline2. Se já for 2 lotes longos, ela adiciona mais 1 lote quando o preço cruza acima da longline3.
Para a geração de sinal curto, se já for longo, ele sai de todas as posições longas quando o preço cruza abaixo de ma.
A entrada por etapas permite que a estratégia siga a tendência.
Soluções de riscos:
A estratégia pode ser otimizada nos seguintes aspectos:
Adicionar outros indicadores como o MACD para determinar a força da tendência
Otimizar os parâmetros da média móvel para encontrar a melhor combinação
Ajustar o tamanho e a proporção dos lotes de entrada por etapas para evitar a busca de preços elevados
Adicionar um mecanismo de stop loss em movimento baseado no ATR
Ajustar dinamicamente o tamanho da posição com base na volatilidade do mercado, reduzir o tamanho quando a volatilidade for elevada
Parâmetros de ensaio em diferentes produtos para encontrar o símbolo ideal
Desenvolver módulo de saída para considerar a obtenção de lucros em certos padrões
Em geral, a estratégia negocia com base na direção da tendência determinada por médias móveis e lucros das tendências através de entradas escalonadas. Mas tem alguns problemas atrasados e riscos de perseguir preços altos. Podemos otimizá-lo adicionando indicadores auxiliares, otimizando parâmetros, ajustando o tamanho da posição, adicionando stop loss, etc., para se adaptar a diferentes condições de mercado e alcançar lucros constantes.
/*backtest start: 2022-10-02 00:00:00 end: 2023-10-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's ShiftMA-multi Strategy v1.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(3, minval = 1, title = "MA Lenghs") src = input(ohlc4, title = "MA Source") longlevel1 = input(-4.0, title = "Long line 1") longlevel2 = input(-5.0, title = "Long line 2") longlevel3 = input(-6.0, title = "Long line 3") needoffset = input(true, title = "Offset") //Variables size = strategy.position_size mult = 1 / syminfo.mintick //MA ma = sma(src, len) longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult //Lines offset = needoffset ? 1 : 0 plot(ma, color = color.blue) plot(longline1, offset = offset, color = color.lime) plot(longline2, offset = offset, color = color.lime) plot(longline3, offset = offset, color = color.lime) //Trading lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] lots = 0.0 if ma > 0 lots := round(size / lot) strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0)) lots := round(size / lot) strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1)) lots := round(size / lot) strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2)) if size > 0 strategy.entry("TP", strategy.short, 0, limit = ma)