
Стратегия торговли динамической сеткой Динамически устанавливает торговую зону сетки путем вычисления движущихся средних и их восходящих и нисходящих колебаний. Когда цена прорывается через сетевую зону, она посылает торговый сигнал в соответствии с сеткой, установленной на фиксированном промежутке, и получает прибыль.
Сначала стратегия рассчитывает передвижные средние за определённый период n, а также передвижные средние, которые выходят из строя.(1 + входный параметр std), нижний рельс - подвижная средняя(1 - входный параметр std) 。 Таким образом, можно построить динамически корректируемую зону транзакций 。
Затем в диапазоне мы определяем сетчатую линию с расстоянием в м строк. Когда цена поднимается и прорывается через сетчатую линию, на этой сетчатой линии посылается многосигнал; когда цена падает и прорывается через сетчатую линию, на соответствующей сетчатой линии посылается сигнал о равновесии.
В частности, мы используем булевой массив order_array для записи состояния сделки каждой из линий сетки. Когда одна из линий сетки вызывает многоусловное действие, соответствующее состояние в order_array ставится как true, что означает, что эта линия сетки уже имеет позицию. Когда цена падает, она прорывается через линию сетки.
Эта стратегия имеет следующие преимущества:
При использовании движущихся средних для построения динамически скорректированных торговых поясов можно скорректировать диапазон поясов в зависимости от волатильности рынка, чтобы стратегия была более адаптирована к рынку.
Сетчатая конструкция позволяет автоматически производить сдерживание убытков, предотвращая увеличение убытков, вызванных экстремальными ситуациями.
Количество и распределение средств в сетке используют равномерное распределение и равномерное распределение, что позволяет хорошо контролировать размер отдельных позиций и снижать риск отдельных позиций.
Настройка сигнала “Много и мирно” позволяет торговать по-настоящему, своевременно останавливать и останавливать убытки.
Однако эта стратегия также несет в себе некоторые риски:
Когда на рынке наблюдается длительная слабость и невозможность прорваться через сетчатую линию, стратегия погружается в беспорядочные шокирующие сделки, а многополярные смены могут привести к потере средств счета.
Выбранные параметры std и количество решётки могут быть не совсем обоснованными и должны быть определены в зависимости от анализа различных типов торгов. Если параметры установлены неправильно, это приведет к слишком большому или слишком маленькому диапазону торгов и сетке, что повлияет на эффективность стратегии.
Стратегия не учитывает некоторые экстремальные ситуации, такие как скачки цен, взрывные взлеты или падения в короткой линии. Эти ситуации могут привести к тому, что стратегия прорвет несколько сеток, что приведет к потерям, которые выходят за рамки контроля риска.
Эта стратегия также может быть оптимизирована в следующих аспектах:
Внедрение алгоритмов машинного обучения, обучение моделей прогнозированию движущихся средних и их падения, делает торговую зону более интеллектуальной и динамичной.
В зависимости от характеристик различных торговых показателей, можно оптимизировать количество сеток, соотношение распределения средств, размер позиции и другие параметры, используя адаптивные параметры.
Можно установить условный лист, на определенном расстоянии от сетки можно установить резервный стоп-лист, который может играть роль предварительного остановки убытков, контролировать убытки в экстремальных ситуациях.
Разработка механизмов обработки исключений для экстремальных ситуаций, таких как увеличение первоначальных открытых позиций, пропуск непосредственных остановок средней сетки и т. Д., Может реагировать на аномальные ситуации, такие как скачок цены.
Динамическая сетка торговой стратегии в целом является разумной, можно использовать сетку, чтобы построить автоматическую систему остановки и убытка, подходящую для тех видов торговли, где часто происходят колебания цен. Однако эта стратегия также имеет определенный рыночный риск, требующий оптимизации параметров и аномальных ситуаций, чтобы сделать стратегию более устойчивой.
/*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)