A estratégia configura a combinação de várias linhas médias rápidas e lentas, fazendo mais quando todas as linhas rápidas atravessam as linhas lentas; quando pelo menos uma linha rápida atravessa as linhas lentas, a estratégia se aproveita da vantagem de várias linhas médias, formando um sistema de decisão de posição mais forte.
Os principais componentes e regras da estratégia são os seguintes:
Múltiplos grupos de médias rápidas e lentas: usando vários indicadores de média, como SMA, WMA, VWMA.
Faça mais sinais: Faça mais sinais em todas as linhas rápidas quando atravessam linhas lentas.
Sinais de equilíbrio: equilíbrio em qualquer linha rápida que atravesse a linha lenta.
Stop Loss: Configure o ponto de stop loss fixo com o valor ATR.
Configuração: Configuração flexível de múltiplos conjuntos de parâmetros de linha média.
A entrada em campo pode ser efetivamente aumentada com a votação de posições de combinação de linha média múltipla. Os parâmetros de linha média múltipla podem ser configurados de forma personalizada, com flexibilidade.
A estratégia tem as seguintes vantagens em comparação com a estratégia de linha única:
A combinação de linhas médias múltiplas fornece um julgamento de tendências mais abrangente.
A votação foi feita de forma a evitar que o ruído possa confundir as transações.
Os parâmetros da linha média podem ser configurados livremente, otimizando o espaço.
Suporte para vários indicadores de linha média e flexibilidade de uso.
A configuração de um ponto de parada de parada para controlar a perda de lucro individual.
O uso de ciclos mais longos é mais eficaz, reduzindo a oscilação da curva.
O cálculo é simples, intuitivo, fácil de implementar e operar.
Em geral, a estabilidade e durabilidade são melhores do que a média linear.
Mas a estratégia também traz riscos:
A linha média multiplicada aumenta a complexidade da estratégia.
Há um risco de otimização excessiva dos parâmetros.
A linha média é essencialmente uma identificação atrasada de mudanças de tendência.
O volume de transações não foi levado em consideração, podendo ocorrer uma paralisação.
A configuração do Stop Loss é arbitrária e pode levar a uma liquidação desnecessária.
Os efeitos são mais variáveis em função das mudanças no mercado.
A taxa de retração dos lucros deve ser observada para evitar que a curva fique muito curta.
Os parâmetros necessários para verificar a estabilidade em várias variedades.
Com base na análise acima, a estratégia pode ser reforçada em:
Parâmetros de linha média para testar robustez em diferentes variedades.
Aumentar o volume de transações ou verificar a volatilidade.
Optimizar o parâmetro de parada de parada.
Configure a tolerância máxima de retirada.
Construir um mecanismo de gestão de posições dinâmicas.
Avaliar o efeito da introdução do aprendizado de máquina.
Atenção à concentração máxima da curva de retirada e receita.
A estratégia de repetição para evitar otimização.
A estratégia configura uma combinação de linhas de multiples e medianas, formando um mecanismo de tomada de decisão de posição mais robusto. Mas qualquer estratégia precisa evitar o overfit e fazer ajustes dinâmicos de acordo com o cenário do mercado. A estratégia só pode se adaptar ao mercado a longo prazo se for testada e quantificada com otimização contínua.
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © levieux
//@version=5
strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config")
source= input.source(high)
maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"])
atrPeriod= input(14, title="ATR Period")
profitAtr = input(10, title="Profit ATR x")
lossAtr = input(5, title="Loss ATR x")
ma(src,length,type) =>
float ma = switch type
"SMA" => ta.sma(src, length)
"WMA" => ta.wma(src, length)
"VWMA" => ta.vwma(src, length)
crossoverGroups= str.split(crossoverConfig, ",")
crossoverCount= array.size(crossoverGroups)
crossovers= array.new_string(crossoverCount)
positions= array.new_int(crossoverCount, 0)
longVotes= 0
for i= 0 to crossoverCount-1
crossover= str.tostring(array.get(crossoverGroups, i))
crossoverBoundaries= str.split(crossover, "x")
int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0)))
int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1)))
wmaFast= ma(source,fastLength,maType)
wmaSlow= ma(source,slowLength,maType)
if wmaFast>wmaSlow
longVotes:= longVotes + 1
array.set(positions, i, 1)
longCondition= longVotes==crossoverCount and strategy.position_size==0
//profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick
//lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick
profitPrice= close+profitAtr*ta.atr(atrPeriod)
lossPrice= close-lossAtr*ta.atr(atrPeriod)
if strategy.position_size>0
profitPrice:= profitPrice[1]
lossPrice:= lossPrice[1]
plot(profitPrice, color=color.green)
plot(lossPrice, color=color.red)
if longCondition and profitPrice>0
strategy.entry("Long", strategy.long)
if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice)
strategy.close("Long")
longVotes:= 0