Стратегия отслеживания перемещающейся средней отклонения

Автор:Чао Чжан, Дата: 2024-03-28 18:00:05
Тэги:

img

Обзор

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

Принцип стратегии

  1. Вычислить две скользящие средние с разными периодами (MA1 и MA2), где MA1 - долгосрочная скользящая средняя, а MA2 - краткосрочная скользящая средняя.
  2. Когда цена закрытия выше MA1 и ниже MA2, а текущей позиции нет, а текущее время находится в пределах указанного диапазона времени торговли, стратегия открывает длинную позицию.
  3. Запишите входную цену как buyPrice и вычислите цену стоп-лосса stopPrice (т.е. i_stopPercent процент ниже входной цены).
  4. Когда цена закрытия снова поднимается выше MA2 и i_lowerClose является ложным, или когда цена закрытия падает ниже стоп-лосс, стратегия закрывает позицию.
  5. Если i_lowerClose верно, стратегия закрывает позицию, когда цена закрытия выше MA2 и цена закрытия предыдущей свечи ниже MA2.

Преимущества стратегии

  1. Следование тенденции: путем определения общей тенденции на основе относительной позиции цены и долгосрочной скользящей средней, стратегия ищет возможности входа в тенденцию.
  2. Pullback buying: путем поиска возможностей покупки, когда цена возвращается к краткосрочной скользящей средней в период восходящего тренда, стратегия улучшает экономическую эффективность пунктов входа.
  3. Защита от стоп-лосса: установка стоп-лосса помогает эффективно контролировать риск снижения, когда цена движется неблагоприятно на определенную величину.
  4. Гибкие параметры: пользователи могут гибко устанавливать такие параметры, как скользящие средние периоды, процент стоп-лосса и закрыть позицию, когда цена закрытия предыдущей свечи ниже краткосрочной скользящей средней, в соответствии с их предпочтениями.

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

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

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

  1. Оценка тренда: Перед открытием позиции необходимо ввести больше индикаторов оценки тренда, таких как ADX, чтобы подтвердить силу и направление текущего тренда и улучшить точность сигналов входа.
  2. Динамический стоп-лосс: динамически корректировать уровень стоп-лосса на основе таких показателей, как волатильность цен и ATR, расширяя стоп-лосс при высокой волатильности цен и ужесточая его при низкой волатильности цен.
  3. Размер позиции: динамически корректировать размер позиции каждой записи на основе таких факторов, как сила тенденции рынка и волатильность цен, увеличение размера позиции, когда тенденция сильна и волатильность умеренная, и уменьшение размера позиции, когда тенденция слабая или волатильность слишком высока.
  4. Долгосрочное краткосрочное хеджирование: рассмотреть возможность одновременного мониторинга сигналов как с долгосрочной, так и с краткосрочной стороны, а также хеджирования позиций на разных рынках или временных рамках для снижения общего риска стратегии.

Резюме

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


/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 00:00:00
period: 1d
basePeriod: 1h
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/
// © contapessoal_ivan
// @version=5
strategy("Pullback Strategy", 
     overlay=true, 
     initial_capital=1000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, // 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("26 Jan 2023 00:00 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("26 Mar 2024 23:59 +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)


Больше