
A estratégia combina o Dollar Cost Averaging (DCA) com a função Trailing Take Profit na plataforma de negociação. Ela define um desvio de preço de 1% para compra e um objetivo de lucro de 0,5% por venda. Esta pequena vantagem é justificada para garantir o bom funcionamento do robô de negociação e evitar o risco de ficar preso em períodos de baixa do mercado.
A estratégia primeiro define os parâmetros configuráveis de parada de deslizamento, percentual de deslizamento máximo de pedidos de DCA, percentual de deslizamento de preço, etc. Em seguida, ele acompanha variáveis como o preço de compra anterior, o número de compras, o preço de compra inicial e o preço de parada de deslizamento. Na lógica de compra, se o preço atual for inferior ao preço de compra anterior (-1 - percentual de deslizamento de preço), e o número de pedidos de compra não atingir o máximo de pedidos de DCA, um sinal de compra será emitido e o preço de compra será registrado.
A combinação de investimentos fixos em DCA e stop-loss de ponto de deslizamento garante tanto o custo-médio de compra de quantia regular quanto o bloqueio de parte dos lucros para evitar a retirada.
O mecanismo de stop loss é flexível e pode ser ajustado de acordo com as condições do mercado, reduzindo o risco.
A retrospectiva tem melhor desempenho do que a estratégia tradicional de compra e posse, com uma taxa de retorno anual estável e adequada para investimentos de longo prazo.
A implementação é simples, com configuração de parâmetros flexíveis e fácil de aplicar nas plataformas de câmbio principais.
O número de compras de DCA é limitado, e os prejuízos podem aumentar se o mercado estiver em uma queda prolongada.
A configuração inadequada do ponto de parada pode levar ao bloqueio frequente de lucros ou à expansão de perdas.
Os custos de transação têm um certo impacto nos lucros. A configuração de alto ponto de parada de perda aumenta o número de transações.
A falta de fundos iniciais pode levar a compras insuficientes.
Pode-se configurar um stop loss de ponto de deslizamento flutuante, que diminui gradualmente o ponto de deslizamento quando o lucro atinge uma certa proporção.
Combinando com a linha média, aumentar a compra de ações perto dos pontos críticos de suporte.
Adesão ao mecanismo de reequilíbrio, ajustando o valor de cada compra de DCA de acordo com o total de ativos.
Optimizar a configuração de parâmetros para testar a taxa de retorno em diferentes períodos de posse.
A estratégia integra o método de investimento fixo DCA e o stop loss de deslizamento, permitindo a negociação quantitativa com ganhos estáveis a longo prazo. O retrospecto é bom e é adequado para investidores que buscam um crescimento estável. O código é simples e fácil de entender.
/*backtest
start: 2023-02-16 00:00:00
end: 2024-02-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Stavolt
//@version=5
strategy("DCA Strategy with Trailing Take Profit", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Correctly using input to define user-configurable parameters
takeProfitPercent = input.float(0.6, title="Take Profit (%)", minval=0.1, maxval=5)
trailingPercent = input.float(0.1, title="Trailing Stop (%)", minval=0.05, maxval=1)
maxDCAOrders = input.int(10, title="Max DCA Orders", minval=1, maxval=20)
priceDeviationPercent = input.float(1.0, title="Price Deviation (%)", minval=0.5, maxval=5)
var float lastBuyPrice = na
var int buyCount = 0
var float initialBuyPrice = na
var float trailingStopPrice = na
// Strategy logic here...
// Note: The detailed logic for buying and selling based on the DCA strategy
// needs to be tailored to your specific requirements and tested for correctness.
if (buyCount < maxDCAOrders)
if (na(lastBuyPrice) or close < lastBuyPrice * (1 - priceDeviationPercent / 100))
strategy.entry("Buy", strategy.long)
lastBuyPrice := close
buyCount += 1
if (na(initialBuyPrice))
initialBuyPrice := close
if (not na(lastBuyPrice) and close > lastBuyPrice * (1 + takeProfitPercent / 100))
if (na(trailingStopPrice) or close > trailingStopPrice)
trailingStopPrice := close * (1 - trailingPercent / 100)
if (close < trailingStopPrice)
strategy.close("Buy")
lastBuyPrice := na
trailingStopPrice := na
buyCount := 0
initialBuyPrice := na