
A principal ideia da estratégia é rastrear periodicamente o preço médio de baixa após o fim de uma queda de curto prazo. Concretamente, a estratégia identifica o momento em que a queda de curto prazo termina no final de cada mês e, portanto, adiciona posições regularmente; ao mesmo tempo, limpa a posição no final da linha K.
Isso é o processo de negociação e o princípio básico da estratégia. Vale a pena notar que a estratégia usa o rastreamento de fundos de US \( 1.000 por mês por padrão, que será ampliado para 33 meses em backtest, ou seja, um total de US \) 33.000 em investimentos.
A maior vantagem da estratégia é a capacidade de construir posições regularmente em níveis baixos, obtendo custos de compra mais favoráveis a longo prazo, gerando uma taxa de retorno mais alta. Além disso, o uso do indicador MACD para identificar pontos de compra de curto prazo também é mais confiável e claro, não entra em um beco sem saída, o que também pode evitar perdas até certo ponto.
No geral, é uma estratégia de custo-benefício, mais adequada para quem possui linhas médias e longas, que compram em lotes regulares e obtêm retornos mais satisfatórios.
O principal risco da estratégia é a incapacidade de determinar com precisão o ponto final de uma queda a curto prazo, o MACD pode ter um atraso no tempo de conclusão da queda, o que pode levar ao custo de não comprar no melhor. Além disso, o investimento disperso de fundos também aumenta os custos operacionais.
Pode-se considerar a inclusão de mais indicadores para determinar a tendência, como a linha de Bryn, KDJ, etc., que podem determinar antecipadamente o momento da reversão. Ao mesmo tempo, pode-se otimizar a quantidade de capital investido mensalmente para reduzir o impacto do custo operacional sobre a receita.
A estratégia pode ser melhorada em várias direções:
Otimizar o período de tempo de rastreamento regular, por exemplo, mudando para rastreamento regular a cada dois meses, reduzindo o problema de transações muito frequentes.
Combinado com mais indicadores para determinar o momento em que a queda de curto prazo termina, o ponto de compra é mais próximo do ponto mais baixo.
Otimizar a quantidade mensal de investimentos e encontrar a melhor configuração.
Tente incorporar estratégias de parada de perdas para evitar perdas em quedas profundas.
Teste os efeitos de diferentes períodos de posse sobre o rendimento e encontre o número de dias de posse ideal.
A estratégia de preço médio de vale-baixo acompanha periodicamente a ideia geral de forma clara e fácil de entender. Com a combinação de adição regular e julgamento de curto prazo, é possível obter um preço de custo mais favorável. Os investidores que possuem a estratégia podem obter um retorno estável, adequado para investidores que buscam o valor do investimento a longo prazo.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
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/
// © BHD_Trade_Bot
// @version=5
strategy(
shorttitle = 'DCA After Downtrend v2',
title = 'DCA After Downtrend v2 (by BHD_Trade_Bot)',
overlay = true,
calc_on_every_tick = false,
calc_on_order_fills = false,
use_bar_magnifier = false,
pyramiding = 1000,
initial_capital = 0,
default_qty_type = strategy.cash,
default_qty_value = 1000,
commission_type = strategy.commission.percent,
commission_value = 1.1)
// Backtest Time Period
start_year = input(title='Start year' ,defval=2017)
start_month = input(title='Start month' ,defval=1)
start_day = input(title='Start day' ,defval=1)
start_time = timestamp(start_year, start_month, start_day, 00, 00)
end_year = input(title='end year' ,defval=2050)
end_month = input(title='end month' ,defval=1)
end_day = input(title='end day' ,defval=1)
end_time = timestamp(end_year, end_month, end_day, 23, 59)
window() => time >= start_time and time <= end_time ? true : false
h1_last_bar = (math.min(end_time, timenow) - time)/1000/60/60 < 2
// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 20)
hist = emacd - emacd_signal
// BHD Unit
bhd_unit = ta.rma(high - low, 200) * 2
bhd_upper = ema200 + bhd_unit
bhd_upper2 = ema200 + bhd_unit * 2
bhd_upper3 = ema200 + bhd_unit * 3
bhd_upper4 = ema200 + bhd_unit * 4
bhd_upper5 = ema200 + bhd_unit * 5
bhd_lower = ema200 - bhd_unit
bhd_lower2 = ema200 - bhd_unit * 2
bhd_lower3 = ema200 - bhd_unit * 3
bhd_lower4 = ema200 - bhd_unit * 4
bhd_lower5 = ema200 - bhd_unit * 5
// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
if window()
nPastCandles := nPastCandles + 1
// ENTRY CONDITIONS
// 24 * 30 per month
entry_condition1 = nPastCandles > entryNumber * 24 * 30
// End of downtrend
entry_condition2 = emacd < 0 and hist < 0 and hist > hist[2]
ENTRY_CONDITIONS = entry_condition1 and entry_condition2
if ENTRY_CONDITIONS
entryNumber := entryNumber + 1
entryId = 'Long ' + str.tostring(entryNumber)
strategy.entry(entryId, strategy.long)
// CLOSE CONDITIONS
// Last bar
CLOSE_CONDITIONS = barstate.islast or h1_last_bar
if CLOSE_CONDITIONS
strategy.close_all()
// Draw
colorRange(src) =>
if src > bhd_upper5
color.rgb(255,0,0)
else if src > bhd_upper4
color.rgb(255,150,0)
else if src > bhd_upper3
color.rgb(255,200,0)
else if src > bhd_upper2
color.rgb(100,255,0)
else if src > bhd_upper
color.rgb(0,255,100)
else if src > ema200
color.rgb(0,255,150)
else if src > bhd_lower
color.rgb(0,200,255)
else if src > bhd_lower2
color.rgb(0,150,255)
else if src > bhd_lower3
color.rgb(0,100,255)
else if src > bhd_lower4
color.rgb(0,50,255)
else
color.rgb(0,0,255)
bhd_upper_line = plot(bhd_upper, color=color.new(color.teal, 90))
bhd_upper_line2 = plot(bhd_upper2, color=color.new(color.teal, 90))
bhd_upper_line3 = plot(bhd_upper3, color=color.new(color.teal, 90))
bhd_upper_line4 = plot(bhd_upper4, color=color.new(color.teal, 90))
bhd_upper_line5 = plot(bhd_upper5, color=color.new(color.teal, 90))
bhd_lower_line = plot(bhd_lower, color=color.new(color.teal, 90))
bhd_lower_line2 = plot(bhd_lower2, color=color.new(color.teal, 90))
bhd_lower_line3 = plot(bhd_lower3, color=color.new(color.teal, 90))
bhd_lower_line4 = plot(bhd_lower4, color=color.new(color.teal, 90))
bhd_lower_line5 = plot(bhd_lower5, color=color.new(color.teal, 90))
// fill(bhd_upper_line5, bhd_lower_line5, color=color.new(color.teal, 95))
plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=color.teal, linewidth=3)
plot(close, color=color.teal, linewidth=1)
plot(close, color=colorRange(close), linewidth=3, style=plot.style_circles)