Estratégia de negociação de votação de média móvel múltipla configurável


Data de criação: 2023-09-23 15:52:06 última modificação: 2023-09-23 15:52:06
cópia: 2 Cliques: 646
1
focar em
1617
Seguidores

Visão geral

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.

Princípio da estratégia

Os principais componentes e regras da estratégia são os seguintes:

  1. Múltiplos grupos de médias rápidas e lentas: usando vários indicadores de média, como SMA, WMA, VWMA.

  2. Faça mais sinais: Faça mais sinais em todas as linhas rápidas quando atravessam linhas lentas.

  3. Sinais de equilíbrio: equilíbrio em qualquer linha rápida que atravesse a linha lenta.

  4. Stop Loss: Configure o ponto de stop loss fixo com o valor ATR.

  5. 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.

Análise de vantagens

A estratégia tem as seguintes vantagens em comparação com a estratégia de linha única:

  1. A combinação de linhas médias múltiplas fornece um julgamento de tendências mais abrangente.

  2. A votação foi feita de forma a evitar que o ruído possa confundir as transações.

  3. Os parâmetros da linha média podem ser configurados livremente, otimizando o espaço.

  4. Suporte para vários indicadores de linha média e flexibilidade de uso.

  5. A configuração de um ponto de parada de parada para controlar a perda de lucro individual.

  6. O uso de ciclos mais longos é mais eficaz, reduzindo a oscilação da curva.

  7. O cálculo é simples, intuitivo, fácil de implementar e operar.

  8. Em geral, a estabilidade e durabilidade são melhores do que a média linear.

Análise de Riscos

Mas a estratégia também traz riscos:

  1. A linha média multiplicada aumenta a complexidade da estratégia.

  2. Há um risco de otimização excessiva dos parâmetros.

  3. A linha média é essencialmente uma identificação atrasada de mudanças de tendência.

  4. O volume de transações não foi levado em consideração, podendo ocorrer uma paralisação.

  5. A configuração do Stop Loss é arbitrária e pode levar a uma liquidação desnecessária.

  6. Os efeitos são mais variáveis em função das mudanças no mercado.

  7. A taxa de retração dos lucros deve ser observada para evitar que a curva fique muito curta.

  8. Os parâmetros necessários para verificar a estabilidade em várias variedades.

Direção de otimização

Com base na análise acima, a estratégia pode ser reforçada em:

  1. Parâmetros de linha média para testar robustez em diferentes variedades.

  2. Aumentar o volume de transações ou verificar a volatilidade.

  3. Optimizar o parâmetro de parada de parada.

  4. Configure a tolerância máxima de retirada.

  5. Construir um mecanismo de gestão de posições dinâmicas.

  6. Avaliar o efeito da introdução do aprendizado de máquina.

  7. Atenção à concentração máxima da curva de retirada e receita.

  8. A estratégia de repetição para evitar otimização.

Resumir

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.

Código-fonte da estratégia
/*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