
Эта стратегия сочетает в себе доллар-стоимость-среднее ((Dollar Cost Averaging, DCA) с функцией стоп-слизинг ((Trailing Take Profit) на биржевой платформе. Она устанавливает 1% отклонение в цене для покупки и нацелена на получение прибыли в размере 0,5% от каждой продажи. Эта небольшая прибыль обоснована тем, что обеспечивает стабильную работу торгового робота, избегая риска оказаться в ловушке в период замедления рынка.
Сначала в стратегии устанавливаются такие параметры, как стоп-стоп для скольжения, максимальное количество заказов DCA, процент отклонения от цены. Затем она отслеживает такие параметры, как цена последней покупки, количество покупок, начальная цена покупки и стоп-стоп для скольжения. В логике покупки, если текущая цена ниже цены последней покупки (%) и количество заказов DCA не достигло максимального количества, появляется сигнал покупки и записывается текущая цена покупки. В логике продажи, если текущая цена выше цены последней покупки (%) + стоп-стоп для скольжения.
В сочетании с фиксированным вложением DCA и скользящим стоп-потерей, обеспечивается как средняя стоимость регулярных фиксированных покупок, так и блокировка части прибыли, чтобы избежать ее отзыва.
Механизм остановки скольжения является гибким и позволяет корректировать остановку и соотношение скольжения в зависимости от рыночных условий, чтобы снизить риск.
Отзывные показатели превосходят традиционные стратегии покупки и владения, стабильная годовая доходность, подходящая для долгосрочных инвестиций.
Простая реализация, гибкая настройка параметров, легко применяемая на основных биржевых платформах.
Покупки DCA ограничены, и убытки могут увеличиться в случае длительного падения.
Неправильная установка стоп-лосса может привести к частому блокированию прибыли или увеличению убытков.
Стоимость сделки оказывает определенное влияние на прибыль. Высокая стоп-стоп настройка увеличивает количество сделок.
Недостаток первоначального капитала может привести к недостаточному количеству покупок.
Можно установить плавающий скользящий стоп-убыток, который постепенно уменьшается, когда прибыль достигает определенной пропорции.
В сочетании с показателями средней линии, увеличить покупку доли вблизи критической поддержки.
Присоединение к механизму ребалансировки с корректировкой суммы каждой покупки DCA в соответствии с общим количеством активов.
Оптимизация параметров, тестирование доходности при различных периодах хранения позиций.
Стратегия объединяет методы фиксированного инвестирования DCA и стоп-стоп с скользящими потерями, обеспечивает количественную торговлю с долгосрочной стабильной прибылью. Отзывчивость хороша и подходит для инвесторов, стремящихся к устойчивому росту.
/*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