Стратегия динамической сетевой торговли


Дата создания: 2023-12-01 14:41:57 Последнее изменение: 2023-12-01 14:41:57
Копировать: 0 Количество просмотров: 1253
1
Подписаться
1619
Подписчики

Стратегия динамической сетевой торговли

Обзор

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

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

Сначала стратегия рассчитывает передвижные средние за определённый период n, а также передвижные средние, которые выходят из строя.(1 + входный параметр std), нижний рельс - подвижная средняя(1 - входный параметр std) 。 Таким образом, можно построить динамически корректируемую зону транзакций 。

Затем в диапазоне мы определяем сетчатую линию с расстоянием в м строк. Когда цена поднимается и прорывается через сетчатую линию, на этой сетчатой линии посылается многосигнал; когда цена падает и прорывается через сетчатую линию, на соответствующей сетчатой линии посылается сигнал о равновесии.

В частности, мы используем булевой массив order_array для записи состояния сделки каждой из линий сетки. Когда одна из линий сетки вызывает многоусловное действие, соответствующее состояние в order_array ставится как true, что означает, что эта линия сетки уже имеет позицию. Когда цена падает, она прорывается через линию сетки.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. При использовании движущихся средних для построения динамически скорректированных торговых поясов можно скорректировать диапазон поясов в зависимости от волатильности рынка, чтобы стратегия была более адаптирована к рынку.

  2. Сетчатая конструкция позволяет автоматически производить сдерживание убытков, предотвращая увеличение убытков, вызванных экстремальными ситуациями.

  3. Количество и распределение средств в сетке используют равномерное распределение и равномерное распределение, что позволяет хорошо контролировать размер отдельных позиций и снижать риск отдельных позиций.

  4. Настройка сигнала “Много и мирно” позволяет торговать по-настоящему, своевременно останавливать и останавливать убытки.

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

Однако эта стратегия также несет в себе некоторые риски:

  1. Когда на рынке наблюдается длительная слабость и невозможность прорваться через сетчатую линию, стратегия погружается в беспорядочные шокирующие сделки, а многополярные смены могут привести к потере средств счета.

  2. Выбранные параметры std и количество решётки могут быть не совсем обоснованными и должны быть определены в зависимости от анализа различных типов торгов. Если параметры установлены неправильно, это приведет к слишком большому или слишком маленькому диапазону торгов и сетке, что повлияет на эффективность стратегии.

  3. Стратегия не учитывает некоторые экстремальные ситуации, такие как скачки цен, взрывные взлеты или падения в короткой линии. Эти ситуации могут привести к тому, что стратегия прорвет несколько сеток, что приведет к потерям, которые выходят за рамки контроля риска.

Направление оптимизации

Эта стратегия также может быть оптимизирована в следующих аспектах:

  1. Внедрение алгоритмов машинного обучения, обучение моделей прогнозированию движущихся средних и их падения, делает торговую зону более интеллектуальной и динамичной.

  2. В зависимости от характеристик различных торговых показателей, можно оптимизировать количество сеток, соотношение распределения средств, размер позиции и другие параметры, используя адаптивные параметры.

  3. Можно установить условный лист, на определенном расстоянии от сетки можно установить резервный стоп-лист, который может играть роль предварительного остановки убытков, контролировать убытки в экстремальных ситуациях.

  4. Разработка механизмов обработки исключений для экстремальных ситуаций, таких как увеличение первоначальных открытых позиций, пропуск непосредственных остановок средней сетки и т. Д., Может реагировать на аномальные ситуации, такие как скачок цены.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)    
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    if close > array.get(grid_array, i) and i!=0
        if array.get(order_array, i-1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)