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