Estratégia de rede DCA de reversão média de dupla base

Autora:ChaoZhang, Data: 2024-02-20 11:09:33
Tags:

img

Resumo

A estratégia DCA Grid de reversão média de duplo fundo aplica principalmente o preço médio de reversão e a estratégia DCA para implementar a construção gradual de posições. Determina oportunidades de reversão com base no padrão de reversão duplo fundo.

Estratégia lógica

A estratégia primeiro verifica se existem dois preços de fechamento consecutivos iguais ao fundo no gráfico de velas, o que é chamado de double bottom. Se um fundo duplo for detectado, considera que pode haver uma oportunidade de reversão de preço. Neste ponto, a estratégia irá definir várias ordens de limite em torno do preço inferior. Os preços dessas ordens serão calculados com base no ATR e na volatilidade, formando uma zona de grade. Isso atinge o efeito DCA e permite que os comerciantes construam gradualmente posições a preços diferentes após a reversão.

Especificamente, o indicador ATR sobre os 14 velas recentes é obtido primeiro através de ta.atr. Em seguida, a volatilidade de preço sobre os 5 velas recentes é calculada. Eles são os principais parâmetros usados para determinar a zona da grade. A grade contém 4 níveis de preço - preço inferior + volatilidade, preço inferior + volatilidade 0,75 *, e assim por diante. Uma vez que a condição de fundo duplo é ativada, 4 ordens de limite de tamanho igual serão colocadas de acordo com esta fórmula. As ordens não preenchidas serão canceladas após vários velas.

Além disso, a estratégia também define um preço de stop loss e um preço de take profit. O preço de stop loss é definido no preço mais baixo do fundo duplo menos um tamanho de tick, enquanto o preço de take profit é definido no preço de entrada mais 5 vezes o ATR. Estes dois preços serão atualizados em tempo real quando o tamanho da posição for maior que 0.

Forças

As principais vantagens desta estratégia são:

  1. Usando fundo duplo para determinar a inversão melhora a precisão e evita falhas de ruptura.
  2. A rede DCA permite que os operadores construam gradualmente posições a preços diferentes, reduzindo a base de custos.
  3. Os parâmetros dinâmicos ATR e volatilidade ajustam a rede e a gama de lucros com base nas alterações do mercado.
  4. Auto stop loss efetivamente controla o montante da perda por negociação.

Análise de riscos

Riscos principais:

  1. O preço pode atravessar o suporte sem reversão, desencadeando stop loss e perdas.
  2. A configuração inadequada da grade DCA pode levar a uma baixa taxa de enchimento.
  3. Considere permitir múltiplos de lucro mais amplos.

Áreas de melhoria

Algumas áreas que podem ser melhoradas:

  1. Adicione o julgamento da tendência, só negocie reversões ao longo da tendência principal para evitar perdas.
  2. Considere um tamanho maior para a primeira entrada e tamanhos menores para as entradas da rede para otimizar a eficiência do uso do capital.
  3. Teste diferentes combinações de parâmetros para encontrar parâmetros ótimos ou desenhe lógicas de ajuste dinâmico.
  4. Integrar o aprendizado de máquina na plataforma avançada para alcançar a otimização de parâmetros automáticos.

Resumo

A Estratégia de Grade DCA de Reversão de Mean Reversão de Double Bottom consolida o padrão de preços, técnicas de indicadores e negociação de grade. Ele tem tempo preciso, base de custo controlada e proteção de retirada. Ainda tem espaço para otimização e vale a pena pesquisar.


/*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)



Mais.