Estratégia de rastreamento de tendência de diferença múltipla de média móvel


Data de criação: 2024-01-04 17:43:17 última modificação: 2024-01-04 17:43:17
cópia: 0 Cliques: 630
1
focar em
1619
Seguidores

Estratégia de rastreamento de tendência de diferença múltipla de média móvel

Visão geral

A estratégia baseia-se em uma diferença de nível de multi-quadro de tempo na linha média, acompanhando a tendência da linha média e longa, adotando um modelo de seguimento de posições de diferença de nível, para alcançar o crescimento indexado do capital. A maior vantagem da estratégia é poder capturar a tendência da linha média e longa, fazendo um acompanhamento em etapas, para obter lucros excedentes.

Princípio da estratégia

  1. A construção de um quadro de tempo múltiplo baseado na linha média de 9 dias, 100 dias e 200 dias.
  2. O sinal de compra é gerado quando a média de curto período se aproxima da média de longo período.
  3. O modelo de recuperação de posições de diferença de 7 níveis é usado para avaliar se as posições anteriores estão cheias a cada abertura de uma nova posição. Se já houver 6 posições, não será mais necessário adicionar posições.
  4. Cada posição estabelece um ponto de parada fixo de 3% para o controle de risco.

A lógica básica da estratégia é essa.

Vantagens estratégicas

  1. A partir de janeiro, o mercado de criptomoedas será capaz de capturar as tendências de longo prazo e aproveitar ao máximo o crescimento do índice.
  2. O uso de uma linha média de vários períodos de tempo para a diferença de grau, pode efetivamente evitar a interferência do ruído do mercado de linha curta.
  3. Estabeleça um ponto de parada fixo para controlar o risco de cada posição.
  4. O modelo de rastreamento de diferença de nível, construção em lotes, é capaz de aproveitar as oportunidades de tendência e obter ganhos extras.

Riscos estratégicos e soluções

  1. Existe o risco de ser terminado. Se a situação se detonar, não conseguir parar a perda de saída em tempo, pode enfrentar grandes perdas. A solução é reduzir o ciclo de linha média e acelerar a parada de perda.
  2. Existe risco de posição. Se um evento inesperado levar a perdas acima do limite suportado, há risco de adicionar um bônus ou explodir a posição. A solução é reduzir adequadamente a proporção da posição inicial.
  3. Existe um risco de perdas excessivas. Se o mercado cair drasticamente, a diferença de nível se voltará para cima, podendo perder até 700% ou mais. A solução é aumentar a taxa de parada fixa e acelerar a parada.

Direção de otimização da estratégia

  1. É possível testar combinações lineares de diferentes parâmetros para encontrar o melhor parâmetro.
  2. Número de posições que podem ser otimizadas para construção de uma posição. Teste diferentes posições de diferença de grau para encontrar a melhor solução.
  3. Pode-se testar a configuração de parada de perda fixa. Aumente adequadamente o alcance da parada, buscando uma maior taxa de retorno.

Resumir

Em geral, a estratégia é muito adequada para capturar a tendência de linha longa da situação, adotando um método de acompanhamento por etapas de lotes, que pode obter um lucro excedente muito alto em relação ao risco e ao lucro. Ao mesmo tempo, há um certo risco operacional, que precisa ser controlado por meio de ajustes de parâmetros, entre outros métodos, para encontrar um equilíbrio entre o lucro e o risco. Em geral, a estratégia é muito digna de ser testada em laboratório e ajustada para otimização com base nos resultados do teste.

Código-fonte da estratégia
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 1m
basePeriod: 1m
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/
    // © Coinrule
    
//@version=3
strategy(shorttitle='Pyramiding Entry On Early Trends',title='Pyramiding Entry On Early Trends (by Coinrule)', overlay=false, pyramiding= 7, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.1)
    
    
//Backtest dates
fromMonth = input(defval = 1,  title = "From Month")     
fromDay   = input(defval = 10,    title = "From Day")       
fromYear  = input(defval = 2020, title = "From Year")       
thruMonth = input(defval = 1,    title = "Thru Month")     
thruDay   = input(defval = 1,    title = "Thru Day")     
thruYear  = input(defval = 2112, title = "Thru Year")       
    
showDate  = input(defval = true, title = "Show Date Range")
    
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"
    
    
//MA inputs and calculations
inSignal=input(9, title='MAfast')
inlong1=input(100, title='MAslow')
inlong2=input(200, title='MAlong')
    
MAfast= sma(close, inSignal)
MAslow= sma(close, inlong1)
MAlong= sma(close, inlong2)
    
    
Bullish = crossover(close, MAfast) 
    
longsignal = (Bullish and MAfast > MAslow and MAslow < MAlong and window())
    
//set take profit
    
ProfitTarget_Percent = input(3)
Profit_Ticks = (close * (ProfitTarget_Percent / 100)) / syminfo.mintick
    
//set take profit
    
LossTarget_Percent = input(3)
Loss_Ticks = (close * (LossTarget_Percent / 100)) / syminfo.mintick
    
    
//Order Placing
    
strategy.entry("Entry 1", strategy.long, when = (strategy.opentrades == 0) and longsignal)
    
strategy.entry("Entry 2", strategy.long, when = (strategy.opentrades == 1) and longsignal)
        
strategy.entry("Entry 3", strategy.long, when = (strategy.opentrades == 2) and longsignal)
    
strategy.entry("Entry 4", strategy.long, when = (strategy.opentrades == 3) and longsignal)
    
strategy.entry("Entry 5", strategy.long, when = (strategy.opentrades == 4) and longsignal)
        
strategy.entry("Entry 6", strategy.long, when = (strategy.opentrades == 5) and longsignal)
        
strategy.entry("Entry 7", strategy.long, when = (strategy.opentrades == 6) and longsignal)
    
    
    
if (strategy.position_size > 0)
    strategy.exit(id="Exit 1", from_entry = "Entry 1", profit = Profit_Ticks, loss = Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry = "Entry 2", profit = Profit_Ticks, loss = Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry = "Entry 3", profit = Profit_Ticks, loss = Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry = "Entry 4", profit = Profit_Ticks, loss = Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry = "Entry 5", profit = Profit_Ticks, loss = Loss_Ticks)
    strategy.exit(id="Exit 6", from_entry = "Entry 6", profit = Profit_Ticks, loss = Loss_Ticks)
    strategy.exit(id="Exit 7", from_entry = "Entry 7", profit = Profit_Ticks, loss = Loss_Ticks)