Стратегия сетки DCA с двойным нижним обратным средним обратным

Автор:Чао Чжан, Дата: 2024-02-20 11:09:33
Тэги:

img

Обзор

Стратегия реверсии среднего значения DCA Grid в основном применяет среднюю цену реверсии и стратегию DCA для реализации постепенного формирования позиций. Она определяет возможности реверсии на основе паттерна реверсии двойного дна. После того, как паттерн реверсии запускается, она использует несколько лимитных ордеров по разным ценам в сочетании с DCA для установления постепенных позиций сетки.

Логика стратегии

Стратегия сначала проверяет, есть ли две последовательные цены закрытия, равные дну на свечевом графике, что называется двойным дном. Если обнаружено двойное дно, она считает, что может быть возможность переворота цены. В этот момент стратегия установит несколько лимитных ордеров вокруг нижней цены. Цены этих ордеров будут рассчитываться на основе ATR и волатильности, образуя сетку зоны. Это достигает эффекта DCA и позволяет трейдерам постепенно строить позиции по разным ценам после переворота.

В частности, индикатор ATR за последние 14 свечей сначала получается с помощью ta.atr. Затем рассчитывается волатильность цены за последние 5 свечей. Это основные параметры, используемые для определения сетевой зоны. Сеть содержит 4 уровня цен - нижняя цена + волатильность, нижняя цена + 0,75 * волатильность и так далее. Как только срабатывает условие двойного дна, по этой формуле будут размещены 4 ограничительных ордера с одинаковым размером. Неисполненные ордера будут отменены после нескольких свечей.

Кроме того, стратегия также устанавливает цену стоп-лосса и цену прибыли. Стоп-лосса устанавливается на самую низкую цену двойного дна минус один размер тика, в то время как цена прибыли устанавливается на цену входа плюс 5 раз ATR. Эти две цены будут обновляться в режиме реального времени, когда размер позиции больше 0.

Сильные стороны

Основными преимуществами этой стратегии являются:

  1. Использование двойного дна для определения обратного хода повышает точность и предотвращает ложные перерывы.
  2. Сеть DCA позволяет трейдерам постепенно создавать позиции по разным ценам, снижая стоимость.
  3. Динамические параметры ATR и волатильности корректируют сеть и диапазон прибыли на основе изменений на рынке.
  4. Автоматическая остановка потери эффективно контролирует сумму потери по сделке.

Анализ рисков

Основные риски:

  1. Цена может прорваться через поддержку без обратного движения, вызывая стоп-лосс и потери.
  2. Неправильное настройка сетки DCA может привести к низкой скорости заполнения.
  3. Частые прибыли с помощью випса на волатильном рынке.

Области улучшения

Некоторые области, которые можно улучшить:

  1. Добавьте суждение о тренде, торгуйте только с изменением основного тренда, чтобы избежать потерь.
  2. Для оптимизации эффективности использования капитала следует рассматривать большие размеры для первой записи и меньшие размеры для записей сетки.
  3. Испытывайте различные комбинации параметров, чтобы найти оптимальные параметры, или разрабатывайте динамическую логику регулировки.
  4. Интегрировать машинное обучение в передовую платформу для достижения автоматической оптимизации параметров.

Резюме

Стратегия сетевой сети DCA с двойным понижением значения обратного движения объединяет ценовую модель, методы индикации и сетевую торговлю. Она имеет точное время, контролируемую стоимость и защиту от снижения.


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



Больше