Количественная стратегия, сочетающая динамический канал Дончиана и простую скользящую среднюю

SMA
Дата создания: 2024-06-17 17:29:48 Последнее изменение: 2024-06-17 17:29:48
Копировать: 4 Количество просмотров: 772
1
Подписаться
1617
Подписчики

Количественная стратегия, сочетающая динамический канал Дончиана и простую скользящую среднюю

Обзор

Эта стратегия объединяет два технических показателя: открытие позиции сверх торгового курса, когда цена пробивает нижнюю траекторию торгового курса и выше простой движущейся средней; открытие позиции сверх торгового курса, когда цена пробивает верхнюю траекторию торгового курса и ниже простой движущейся средней; открытие позиции сверх торгового курса, когда цена касается верхней траектории торгового курса; и открытие позиции сверх торгового курса, когда цена касается нижней траектории торгового курса.

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

  1. Вычислить верхнюю и нижнюю траекторию тончайского канала. Верхняя траектория тончайского канала - это наивысшая цена за последние n циклов, а нижняя траектория - это наименьшая цена за последние n циклов.
  2. Вычислить простой скользящий средний. Простой скользящий средний - это среднеарифметическое значение цены закрытия за последние m циклов.
  3. Открытие позиции с большим количеством голосов: открыть позицию с большим количеством голосов, когда цена ниже нижней линии Дончжанского канала и цена закрытия выше простой подвижной средней.
  4. Позиции с пустым кодом: открытие позиции с пустым кодом происходит, когда цена выше, чем на начальном этапе торгового процесса в Доньчжане, а цена закрытия ниже простой подвижной средней.
  5. Положительная позиция: Положительная позиция возникает, когда цена достигает верхнего уровня в коридоре Дончжан.
  6. Пустота: пустая позиция, когда цена касается нижнего рельса в коридоре Тоньцзян.

Стратегические преимущества

  1. Сочетание двух рыночных элементов: тренд и волатильность. Простая скользящая средняя фиксирует тренд, а канал Тунцзяна фиксирует волатильность, что позволяет лучше понять возможность отступления в трендовых ситуациях.
  2. Условия стоп-стопа четко определены, что помогает своевременно блокировать прибыль. Многоголовые и пустые позиции могут быть закрыты вовремя до того, как тенденция перевернется.
  3. Небольшое количество параметров, небольшая сложность оптимизации. У этой стратегии есть только три параметра: цикличность туннеля Дончжана, величина смещения и цикличность простой подвижной средней, что позволяет оптимизировать.

Стратегический риск

  1. Частые сделки. Эта стратегия имеет высокую частоту открытия позиций, что приводит к снижению прибыли на рынках с высокой стоимостью торгов. Можно уменьшить количество сделок, умеренно ослабив условия открытия позиций или увеличив временные рамки.
  2. Недостаточная эффективность в шокирующем рынке. При неясном тренде стратегия может понести больше убытков.
  3. Недостаточная стабильность параметров. Оптимальные параметры могут отличаться в разных стандартах и периодах. Недостаточная стабильность параметров.

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

  1. Добавление опциональных условий для открытия позиции в сочетании с другими показателями, например, требование, чтобы ADX в DMI был больше определенного порога, чтобы открыть позицию, или открыть дополнительную позицию, когда RSI покидает зону перепродажи, чтобы повысить выигрышную вероятность открытия позиции.
  2. Использование динамических стоп-линий вместо фиксированных стоп-линий тончинского канала, что позволяет осуществлять функцию отслеживания прибыли. Например, после того, как цена коснется тончинского канала, многоглазые могут плавить позиции на ATR-стоп-линии или SAR-стоп-линии.
  3. Динамично корректируйте циклы дончианского канала в соответствии с уровнем волатильности, сокращайте циклы дончианского канала в условиях рынка с высокой волатильностью и продлевайте циклы дончианского канала в условиях рынка с низкой волатильностью. Это помогает адаптироваться к различным рынкам.

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

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

Исходный код стратегии
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("FBK Donchian Channel Strategy", overlay=true)

// Inputs
donchian_period = input.int(20, title="Donchian Channel Period")
donchian_offset = input.int(1, title="Donchian Channel Offset")
sma_period = input.int(200, title="SMA Period")
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")
trade_type = input.string("Both", title="Trade Type", options=["Buy Only", "Sell Only", "Both"])

// Calculate indicators
donchian_upper = ta.highest(high, donchian_period)[donchian_offset]
donchian_lower = ta.lowest(low, donchian_period)[donchian_offset]
sma = ta.sma(close, sma_period)

// Plot indicators
plot(donchian_upper, color=color.red, title="Donchian Upper")
plot(donchian_lower, color=color.green, title="Donchian Lower")
plot(sma, color=color.blue, title="SMA")

// Helper function to check if within testing period
is_in_testing_period() => true

// Entry conditions
long_condition = low <= donchian_lower and close > sma
short_condition = high >= donchian_upper and close < sma

// Exit conditions
exit_long_condition = high >= donchian_upper
exit_short_condition = low <= donchian_lower

// Open long position
if (is_in_testing_period() and (trade_type == "Buy Only" or trade_type == "Both") and long_condition)
    strategy.entry("Long", strategy.long)

// Close long position
if (is_in_testing_period() and exit_long_condition)
    strategy.close("Long")

// Open short position
if (is_in_testing_period() and (trade_type == "Sell Only" or trade_type == "Both") and short_condition)
    strategy.entry("Short", strategy.short)

// Close short position
if (is_in_testing_period() and exit_short_condition)
    strategy.close("Short")

// Close all positions at the end of the testing period
if not is_in_testing_period()
    strategy.close_all()