Esta estratégia é baseada em uma estratégia de múltiplos espaços em média móvel. Ela usa três médias móveis de diferentes parâmetros para geração de sinais de negociação.
A estratégia usa a função sma para calcular uma média móvel de comprimento de len, chamada de ma. Em seguida, com base em ma, calcula uma média móvel de uma certa proporção de três movimentos planos, chamados longline1, longline2 e longline3.
Quando o sinal de compra é gerado, se não houver posição atual, abra mais posição quando o preço atravessar a longline 1; se já houver uma posição de 1 mão, abra mais uma mão quando o preço atravessar a longline 2; se já houver uma posição de 2 mãos, abra mais uma mão quando o preço atravessar a longline 3, com o máximo de 3 mãos.
Quando o sinal de venda é gerado, se houver uma posição em excesso no momento, a posição em baixa será mantida quando o preço estiver abaixo de ma.
A estratégia pode ser aplicada por lotes, de modo a obter um efeito de acompanhamento de tendências.
A solução para o risco:
A estratégia pode ser melhorada em vários aspectos:
Adicionar outros indicadores para determinar a direção da tendência, como adicionar o MACD para determinar a força da tendência
Optimizar os parâmetros de média móvel para encontrar a combinação de parâmetros mais adequada
O número e a proporção de excessos em lotes devem ser ajustados para evitar que os excessos sejam seguidos.
Adição de um mecanismo móvel de stop loss, que permite a configuração de stop loss com base no ATR
Pode ajustar o número de posições de acordo com a dinâmica da taxa de flutuação do mercado, reduzindo as posições quando houver grande flutuação
Testar o efeito de diferentes variedades para encontrar as variedades mais adequadas para a estratégia
Desenvolvimento de módulos de saída que consideram a saída de parada em determinados casos
Em geral, a estratégia usa a média móvel para determinar a direção da tendência e, através de uma escalação por lotes, pode acompanhar a tendência para obter lucro. Mas há um certo atraso e risco de acompanhamento. Podemos otimizar a estratégia adicionando indicadores de julgamento auxiliares, parâmetros de otimização, ajustando o gerenciamento de posições e aumentando o mecanismo de parada.
/*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)