Стратегия сетки DCA с разворотом скользящей средней «двойное дно»


Дата создания: 2024-02-20 11:09:33 Последнее изменение: 2024-02-20 11:09:33
Копировать: 3 Количество просмотров: 839
1
Подписаться
1617
Подписчики

Стратегия сетки DCA с разворотом скользящей средней «двойное дно»

Обзор

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

Стратегический принцип

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

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

Кроме того, в стратегии также устанавливаются стоп-стоп и стоп-офф. Стоп-офф является минимальной ценой двойного дна - минимальный рывок, а стоп-офф - в 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)