Estratégia da DCA com lucro em atraso

Autora:ChaoZhang, Data: 2024-02-23 14:01:20
Tags:

img

Resumo

Esta estratégia combina a média de custo do dólar (DCA) com o recurso de retorno de lucro disponível nas plataformas de câmbio. Esta configura um desvio de preço de 1% para compras e visa 0,5% de lucro em cada venda. A razão para o objetivo de pequenos lucros é garantir operações suaves para o bot de negociação, evitando ficar preso durante períodos de mercado lentos. Com base em backtesting, este bot provou ser adaptável o suficiente para suportar flutuações e manipulação do mercado.

Princípios

A estratégia primeiro define parâmetros configuráveis como porcentagem de trailing stop, ordem máxima de DCA, porcentagem de desvio de preço, etc. Em seguida, rastreia variáveis como último preço de compra, número de compras, preço inicial de compra, preço de trailing stop, etc. Na lógica de compra, se o preço atual estiver abaixo do último preço de compra * (1 - porcentagem de desvio de preço) e o número de compras não atingir o máximo de ordens de DCA, ele emitirá um sinal de compra e registrará o preço de compra. Na lógica de venda, se o preço atual estiver acima do último preço de compra * (1 + porcentagem de lucro), ele estabelecerá um preço de trailing stop. Se o preço continuar a subir acima desse preço de trailing stop, o preço de trailing stop é atualizado para o preço atual * (1 - porcentagem de trailing). Se o preço cair abaixo da variabilidade de trailing stop, um sinal é emitido enquanto o preço de venda é relevante, se preparando para a próxima rodada de compras de DCA.

Vantagens

  1. Combina DCA e stop loss para garantir a média dos custos, bloqueando lucros parciais para evitar drawdowns.

  2. Mecanismo flexível de trailing stop com lucro ajustável e percentagem de trailing para minimizar o risco.

  3. Os resultados verificados superam os resultados obtidos com a compra e a detenção, com rendimentos anuais constantes adequados para investimentos de longo prazo.

  4. Simples de implementar com parâmetros ajustáveis para uma aplicação fácil nas principais plataformas de troca.

Riscos

  1. O número limitado de compras de DCA significa que as perdas podem agravar-se se o mercado tiver tendências descendentes durante períodos prolongados.

  2. As configurações de stop loss de atraso precárias podem conduzir à obtenção de lucros prematuros ou a perdas precipitadas.

  3. Os custos de negociação podem corroer os lucros.

  4. Requer capital suficiente para suportar compras frequentes de DCA.

Melhorias

  1. Implementar paradas de atraso adaptativas, diminuindo a percentagem de atraso à medida que certos marcos de lucro são alcançados.

  2. Incorporar médias móveis, aumentando os montantes de compra em torno das principais áreas de suporte.

  3. Adicionar um mecanismo de reequilíbrio para ajustar os montantes de DCA com base nos activos totais.

  4. Otimizar as definições dos parâmetros e testar a rentabilidade em vários períodos de detenção.

Conclusão

Esta estratégia combina DCA e trailing stops para retornos de negociação algorítmicos estáveis durante longos períodos. Os resultados testados são fortes e adequados para investidores focados em crescimento estável. Código simples e limpo torna fácil de entender e implementar. Mais ganhos de desempenho podem ser alcançados através da otimização de parâmetros e incorporando indicadores adicionais.


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


Mais.