В процессе загрузки ресурсов... загрузка...

Количественная стратегия, объединяющая среднее обратное движение и следование тенденции

Автор:Чао Чжан, Дата: 2023-09-14 20:45:20
Тэги:

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

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

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

  1. Когда цена ниже 200-периодного SMA, он оценивает текущий рынок как понижающийся.

  2. Когда показатель RSI ниже 20, то требуется обратная реверсия среднего тренда.

  3. Когда цена превышает 200-периодную SMA, она оценивает текущий рынок как восходящий тренд.

  4. Когда цена пересекает SMA, требуются сделки, следующие тренду.

  5. Выходы запускаются, когда RSI превышает 80 или цена падает ниже SMA на определенный процент.

  6. Размер позиции для среднего отклонения и следования тренду может регулироваться отдельно.

Стратегия сочетает в себе методы среднего реверсии и трендоустройства и применяет их на разных этапах рынка.

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

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

  1. Сочетание двух методов улучшает адаптивность стратегии.

  2. Он может найти торговые возможности на трендовых и различных рынках.

  3. Риски можно контролировать путем корректировки размеров позиций.

  4. Простые настройки параметров облегчают реализацию.

III. Потенциальные риски

Однако риски заключаются:

  1. Показатели, такие как SMA и RSI, подвержены ложным прорывам.

  2. Переход между двумя режимами может задерживаться.

  3. Некоторые изъятия должны быть выдержаны для долгосрочных выгод.

IV. Резюме

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


/*backtest
start: 2022-09-07 00:00:00
end: 2023-04-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © I11L

//@version=5
strategy("Mean Reversion and Trendfollowing", overlay=true, pyramiding=1, default_qty_value=100000, initial_capital=100000, default_qty_type=strategy.cash, process_orders_on_close=false, calc_on_every_tick=false)

// Input for the starting date
start_date = input(timestamp("1 Feb 2000 12:00"), title="Starting Date")
enableMeanReversion = input.bool(true)
enableTrendfollowing = input.bool(true)
trendPositionFactor = input.float(1)
meanReversionPositionFactor = input.float(0.5)

// Convert the input string to a timestamp
start_ts = timestamp(year(start_date), month(start_date), dayofmonth(start_date), 0, 0)

// Check if the current bar's time is greater than or equal to the start timestamp
start_condition = time >= start_ts

var tradeOrigin = ""

sma200 = ta.sma(close,200)
rsi2 = ta.rsi(close,2)

isMeanReversionMode = close < sma200 or not(enableTrendfollowing)
isTrendfollowingMode = close > sma200 or not(enableMeanReversion)

isRsiBuy = rsi2 < 20 and enableMeanReversion
isRsiClose = rsi2 > 80 and enableMeanReversion

isSmaBuy = close > sma200 and enableTrendfollowing
isSmaClose = close < sma200 * 0.95 and enableTrendfollowing

isBuy = (isMeanReversionMode and isRsiBuy) or (isTrendfollowingMode and isSmaBuy)

positionSizeFactor = isSmaBuy ? trendPositionFactor : meanReversionPositionFactor

// Only execute the strategy after the starting date
if (start_condition)
    if (isBuy and strategy.opentrades == 0)
        tradeOrigin := isSmaBuy ? "SMA" : "RSI"
        strategy.entry("My Long Entry Id", strategy.long, qty=(strategy.equity / close) * positionSizeFactor, comment=str.tostring(positionSizeFactor))
    isClose = tradeOrigin == "SMA" ? isSmaClose : isRsiClose
    if (isClose)
        strategy.exit("Exit", limit = close)

plot(sma200)
plot(sma200 * 0.95, color=color.orange)

Больше