Стратегия обратной тенденции на основе скользящих средних

Автор:Чао Чжан, Дата: 2024-02-21 17:03:31
Тэги:

img

Обзор

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

Логика стратегии

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

В частности, если следующие условия выполнены, выйти на рынок длинным: цена выше 200-дневной линии, цена ниже 10-дневной линии, и не было предыдущей позиции. Если следующие условия выполнены, закрыть позицию, чтобы выйти с рынка: цена выше 10-дневной линии, и была предыдущая длинная позиция. Чтобы предотвратить огромные потери, устанавливается стоп-лосс FAILSAFE. Если ретрекция с самой высокой точки превышает 10%, прямой стоп-лосс для выхода.

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

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

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

  1. Использование комбинации долгосрочных и краткосрочных скользящих средних для определения направления первичных и вторичных тенденций может эффективно зафиксировать средне- и долгосрочные трендовые возможности и избежать ввода в заблуждение краткосрочными движениями рынка.

  2. При входе на основе краткосрочных отступлений стоимость входа может быть сведена к минимуму, чтобы получить относительно высокий потенциал прибыли.

  3. Механизм стоп-лосса FAILSAFE может эффективно контролировать единичные потери для защиты средств счета.

  4. Разрешение на выходы от отслеживания тренда позволяет полностью использовать средне- и долгосрочные трендовые возможности для получения избыточной отдачи альфа.

  5. Принятие полностью автоматизированного метода торговли позволяет избежать субъективного эмоционального воздействия и облегчает реализацию стратегии.

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

Основными рисками этой стратегии являются:

  1. Фактические рыночные условия могут отличаться от исторических данных, что приводит к снижению фактической эффективности торговли.

  2. Риск ложных прорывов: вероятность того, что цены обратятся вблизи скользящих средних, относительно велика, что может легко привести к небольшим накопленным потерям.

  3. Риск переворота тренда: внезапные перевороты среднесрочных и долгосрочных тенденций распространены, что может легко привести к относительно большим потерям при хранении позиций.

Контрмеры:

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

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

  3. Расширить линии стоп-лосса надлежащим образом, чтобы позволить некоторым ценовым ретрексерам избежать чрезмерно чувствительных стоп-лосков.

Руководство по оптимизации

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

  1. Добавить условия фильтрации, такие как фильтрация объема, чтобы эффективно уменьшить ненужную торговлю, вызванную ложными прорывами.

  2. Включить другие индикаторы, такие как KDJ и MACD, для формирования комбинационных сигналов для улучшения качества торговых сигналов.

  3. Испытать различные периоды хранения и оптимизировать стратегии получения прибыли и остановки убытков для дальнейшего улучшения коэффициента Шарпа и т.д.

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

  5. Добавьте алгоритмические торговые модули с использованием машинного обучения и т. Д., Чтобы автоматически генерировать торговые сигналы, чтобы уменьшить вмешательство человека.

Резюме

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


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

Больше