Стратегия относительной динамики

Автор:Чао Чжан, Дата: 2024-01-29 08:38:04
Тэги:

img

Обзор

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

Принципы

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

  1. Вычислить доходность за определенный период времени как импульс акций
  2. Расчет доходности индекса за тот же период, что и импульс индекса
  3. Использование скользящей средней для сглаживания импульса акций и индексов
  4. Когда скользящий средний импульса акций пересекает выше, чем индекс, импульс акций считается сильнее, чем рынок в целом - это сигнал покупки
  5. Когда скользящая средняя величина импульса акций пересекается ниже скользящей средней величины импульса индекса, импульс акций считается более слабым, что вызывает сигнал продажи.

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

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

Основные преимущества стратегии относительного импульса:

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

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

Существуют также некоторые риски, связанные со стратегией относительной динамики:

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

Эти риски можно управлять путем разумного получения прибыли, остановки потерь, настройки параметров и т.д.

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

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

  1. Испытать различные периоды времени для вычисления импульса, чтобы найти оптимальный
  2. Попробуйте различные типы и длины скользящих средних для лучших параметров
  3. Добавьте фильтр объема, чтобы избежать ложных прорывов из-за отсутствия импульса
  4. Включить другие показатели для подтверждения оптимального времени входа

Заключение

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)

Больше