Estratégia de acompanhamento de tendência de média móvel dupla


Data de criação: 2023-09-24 13:14:08 última modificação: 2023-09-24 13:14:08
cópia: 0 Cliques: 694
1
focar em
1617
Seguidores

Visão geral

Esta estratégia usa uma combinação de médias RMA de longo prazo e médias EMA de curto prazo para avaliar a tendência e realizar um stop loss de seguimento de tendência com uma ruptura de alta e baixa. Também é configurado um intervalo sem negociação para filtrar brechas falsas.

Princípio da estratégia

  1. Use a RMA de longo período e a EMA de curto período para determinar a direção da tendência. O RMA de longo período é usado como sinal de expectativa abaixo da EMA de curto prazo e o RMA de longo prazo é usado como sinal de expectativa acima.

  2. Quando o preço quebra o preço mais alto do último período determinado, o método de seguimento do preço mais alto é usado para parar. Quando o preço quebra o preço mais baixo do último período determinado, o método de seguimento do preço mais baixo é usado para parar.

  3. O setor não-negociação, onde o preço entra na zona não abriu posição, para evitar ser coberto. A faixa de intervalos é determinada por uma certa proporção da linha média RMA.

  4. Depois de entrar, estabeleça um preço de parada para sair de lucro em uma certa proporção.

Vantagens estratégicas

  1. A combinação binária de equilíbrio determina a direção da tendência com precisão e confiabilidade.

  2. O Stop Loss Tracking permite que o Stop Loss siga a tendência.

  3. Configurar uma zona de não transação para filtrar os sinais de falha.

  4. A configuração Stop Stop permite que a estratégia elimine ativamente a posição após ter acumulado lucro suficiente.

Risco estratégico

  1. Pode haver um atraso na geração de forquilhas duplas, o que aumenta a perda.

  2. O ponto de parada de rastreamento pode ser atingido pelo ruído antecipado se estiver muito perto do preço.

  3. A configuração de uma zona sem transações muito larga pode levar a oportunidades de transações perdidas.

  4. A falta de liquidação oportuna pode levar a um aumento dos prejuízos.

Resolução:

  1. Optimizar os parâmetros da linha média e reduzir a probabilidade de atraso.

  2. A liberação apropriada do ponto de paragem para evitar a hipersensibilidade.

  3. O teste ajusta o alcance da zona sem transações para evitar oportunidades perdidas.

  4. Adicionar outros métodos de parada de perdas para limitar o máximo de perdas.

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

  1. Teste outras combinações de indicadores de equilíbrio para encontrar combinações mais adequadas.

  2. Aumentar a diferença de preços, MACD e outros indicadores de julgamento para aumentar a estabilidade da estratégia.

  3. A introdução de parâmetros de otimização de algoritmos de aprendizagem de máquina para tornar as estratégias mais inteligentes.

  4. Combine os indicadores de tendência forte com os indicadores de tendência fraca, evitando a negociação de contrapartida.

  5. Otimizar a estratégia de gestão de fundos e aumentar a taxa de sucesso.

Resumir

Esta estratégia usa a dupla linha de equilíbrio para determinar a direção da tendência e bloquear o lucro da tendência com filtros de alto e baixo para rastrear o stop-loss e o no-trading. A estrutura da estratégia é simples, clara e extensivel, e pode ser otimizada por meio do ajuste do intervalo de parâmetros, otimização da estratégia de stop-loss e introdução de outros indicadores de julgamento auxiliares.

Código-fonte da estratégia
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-12 00:00:00
period: 3h
basePeriod: 15m
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/
// © PatrickGwynBuckley

//@version=5
//var initialCapital = strategy.equity

strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true)
shortma = input.int(55, title="quick ma's")
longma = input.int(100, title="long ma's")
ema55h = ta.ema(high, shortma)
ema55l = ta.ema(low, shortma)
ema200h = ta.rma(high, longma)
ema200l = ta.rma(low, longma)
stock = ta.stoch(close, high, low, 14)

lev = input.int(3, title="leverage")
hhVal = input.int(170, title="Highest high period")
llVal = input.int(170, title="Lowest low period")

hh = ta.highest(high, hhVal)
ll = ta.lowest(low, llVal)
//plot(stock)

plot(hh, color=color.new(color.green, 50))
plot(ll, color=color.new(color.red, 50))
var float downtrade = 0
p = input.float(3.0, title="no trade zone")
l = 3
emadistlong = ema200h + ((ema200h/100)*p)
emadistshort = ema200l - ((ema200h/100)*p)

plot(ema55h)
plot(ema55l)
ntl = plot(emadistlong, color=color.new(color.red, 10))
nts = plot(emadistshort, color=color.new(color.red, 10))
fill(ntl, nts, color=color.new(color.red, 90))

//position size

EntryPrice = close
//positionValue = initialCapital
positionSize = (strategy.equity*lev) / EntryPrice

//plot(strategy.equity)


//standard short

if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 
    strategy.entry("short", strategy.short, qty=positionSize, comment="short")
    downtrade := 1

//reset count    
if (ta.crossunder(ema55h, ema200l)) and downtrade == 1
    downtrade := 0

//standard long    
if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 
    strategy.entry("long", strategy.long, qty=positionSize, comment="long")
    downtrade := 0

//RESET COUNT ON MA CROSS
if (ta.crossover(ema55l, ema200h)) and downtrade == 0
    downtrade := 1
    
longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)//
shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)//

sl = 3.5
tp = input.float(6.9, title="take profit %")
tp2 = 10


strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))
strategy.close("long", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")
//strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("long2", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")

strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300)
strategy.close("short", when = shortclose2, comment = "short exit")
//strategy.close("short", when = (downtrade == 0), comment = "short exit")
//strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("short2", when = shortclose2, comment = "short exit")
//strategy.close("short2", when = (downtrade == 0), comment = "short exit")

//if (strategy.exit("long exit", "long"))
    //downtrade := 1
//else 
   // downtrade := 0