Estratégia de grade DCA de média móvel de reversão de fundo duplo


Data de criação: 2024-02-20 11:09:33 última modificação: 2024-02-20 11:09:33
cópia: 3 Cliques: 839
1
focar em
1617
Seguidores

Estratégia de grade DCA de média móvel de reversão de fundo duplo

Visão geral

A estratégia de grelha de DCA de dupla base inversa e média é aplicada principalmente à inversão de preço de linha média e à estratégia de DCA para a construção de posições em grelha. Ela julga a oportunidade de reversão com base na forma de inversão de dupla base. Uma vez que a forma de reversão é acionada, use vários mandados de preços diferentes para criar posições em grelha progressiva em combinação com a DCA.

Princípio da estratégia

A estratégia primeiro determina se a linha K apresenta dois fundos consecutivos com preços de fechamento iguais, o que é conhecido como um duplo fundo. Se um duplo fundo for detectado, é possível que haja uma oportunidade de reversão de preço. Nesse momento, a estratégia estabelece vários contratos de limite de preço perto do fundo, cujos preços são calculados de acordo com o ATR e a volatilidade, formando uma zona de grade. Isso realiza o efeito do DCA, permitindo que os comerciantes construam posições em diferentes pontos de preços que se revertem.

Concretamente, primeiro se calcula o índice ATR das 14 linhas K mais recentes através do ta.atr, e depois se calcula a taxa de flutuação de preços das 5 linhas K mais recentes, que é o principal parâmetro usado para determinar o intervalo de grade. O intervalo de grade é dividido em 4 pontos de preço, respectivamente, preço de base + taxa de flutuação, preço de base + 0,75 vezes a taxa de flutuação, e assim por diante.

Além disso, a estratégia também define um ponto de parada e um ponto de parada. O preço de parada é o preço mínimo do fundo duplo - o mínimo de salto, o preço de parada é o preço de entrada + o indicador ATR 5 vezes.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O uso de um duplo fundo para determinar o momento da reversão pode ser eficaz para evitar falsas rupturas.
  2. O design da grade DCA permite que os comerciantes construam posições gradualmente a preços diferentes, reduzindo os custos das posições.
  3. ATR e os parâmetros de taxa de flutuação podem ajustar dinamicamente a grelha e o espaço de parada para se adaptar às mudanças do mercado.
  4. O mecanismo de parada automática de perdas pode controlar eficazmente os prejuízos individuais.

Análise de Riscos

Os principais riscos são:

  1. O preço pode não reverter e cair diretamente abaixo do nível de suporte do duplo fundo. Neste momento, o stop loss será acionado e causará perdas. A distância de stop loss pode ser aumentada adequadamente.
  2. O intervalo da grade DCA foi configurado de forma inadequada e a maioria dos clientes não conseguiu negociar. Vários parâmetros podem ser testados para garantir a taxa de transação.
  3. Quando o mercado está em alta, os stop-loss podem ser frequentemente acionados. Considerar a expansão apropriada do multiplicador de stop-loss.

Direção de otimização

A estratégia também pode ser melhorada nas seguintes direções:

  1. Aumentar o discernimento de tendências, operando de forma inversa apenas quando se vê mais tendências, evitando perder as grandes tendências.
  2. Considere aumentar a posição inicial, reduzir gradualmente a posição da grade subsequente e otimizar a eficiência do uso do capital.
  3. Teste diferentes combinações de parâmetros para encontrar o melhor. Também pode projetar parâmetros dinâmicos, ajustados em tempo real de acordo com o mercado.
  4. Pode integrar aprendizado de máquina em plataformas avançadas para otimização automática de parâmetros.

Resumir

A estratégia de rede DCA de linha de equilíbrio de inversão de dupla base utiliza vários meios técnicos, como formas de preço, indicadores de equilíbrio e negociação de rede. Ela possui vantagens como precisão de ponto de julgamento, controle de custos e proteção de retirada. A estratégia de otimização é grande e merece pesquisa e aplicação em profundidade. Se os parâmetros forem ajustados adequadamente, pode obter bons resultados em situações de turbulência.

Código-fonte da estratégia
/*backtest
start: 2024-02-12 00:00:00
end: 2024-02-19 00:00:00
period: 3m
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/
// © cherepanovvsb

//@version=5
strategy("Reversal (only long)", overlay=true, margin_long=1, margin_short=1,initial_capital=1000,commission_type = strategy.commission.percent,commission_value =0.1,currency='USD', process_orders_on_close=true)
plotshape(low == low[1], style=shape.triangleup, location=location.belowbar, color=color.blue, title="1 Setup")
plotshape(low == low[1] and low[1]==low[2], style=shape.triangleup, location=location.belowbar, color=color.red, title="Triple Setup")

ATRlenght   = input.int(title="ATR length for taking profit", defval=14, group="Strategy Settings")
rewardMultiplier= input.int(title="ATR multiplier", defval=5, group="Strategy Settings")
Volatility_length=input.int(title='Volatility length',defval=5,group="Strategy Settings")
Volatility_multiplier=input.float(title='Volatility multiplier',defval=0.5,step=0.1, group="Strategy Settings")
Candles_to_wait=input.int(title='How many candles to wait after placing orders grid?',defval=4,group="Strategy Settings")

// Get ATR
atr1 = ta.atr(ATRlenght)

//Get volatility values (not ATR) 
float result = 0
for i = 0 to Volatility_length
	result+=high[i]-low[i]
volatility=result*Volatility_multiplier/Volatility_length

//Validate entrance points
validlow =  low [2]== low[1] and not na(atr1) 
validlong = validlow and strategy.position_size == 0  and low[1]<low


// Calculate SL/TP
longStopPrice = low[1]-syminfo.mintick
longStopDistance = close - longStopPrice
longTargetPrice = close + (longStopDistance * rewardMultiplier)
strategy.initial_capital = 50000
//Assign all variables
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0
var point1=0.0
var point2=0.0
var point3=0.0
var point4=0.0
var contracts = int(strategy.initial_capital/close)/4
if validlong 
    tradeStopPrice := longStopPrice
    tradeTargetPrice := longTargetPrice
    point1:=low[1]+volatility
    point2:=low[1]+volatility*0.75
    point3:=low[1]+volatility*0.5
    point4:=low[1]+volatility*0.25

strategy.entry ("Long1", strategy.long,limit=point1,qty=contracts, when=validlong)
strategy.entry ("Long2", strategy.long,limit=point2,qty=contracts, when=validlong)
strategy.entry ("Long3", strategy.long,limit=point3,qty=contracts, when=validlong)
strategy.entry ("Long4", strategy.long,limit=point4,qty=contracts, when=validlong)

stopcondition = ta.barssince(validlong) == Candles_to_wait

strategy.cancel("Long1",when=stopcondition)
strategy.cancel("Long2",when=stopcondition)
strategy.cancel("Long3",when=stopcondition)
strategy.cancel("Long4",when=stopcondition)
    
strategy.exit(id="Long Exit", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0)

plot(strategy.position_size != 0 or validlong ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, linewidth=3)
plot(strategy.position_size != 0 or validlong ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, linewidth=3)

plot(strategy.position_size != 0? point1 : na, title="Long1", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point2 : na, title="Long2", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point3 : na, title="Long3", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point4 : na, title="Long4", color=color.green, style=plot.style_linebr, transp=0)