JiaYiBing Количественный тренд Импульс Торговая стратегия

Автор:Чао Чжан, Дата: 2024-03-08 15:40:05
Тэги:

img

Обзор

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

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

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

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

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

С точки зрения размера позиции, стратегия позволяет устанавливать размер позиции на основе собственного капитала счета и предпочтения риска.

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

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

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

  2. Подтверждение импульса: введение индикатора импульса как вторичного подтверждения тренда помогает отфильтровать ложные сигналы и улучшить качество входа.

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

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

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

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

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

  1. Частая торговля: стратегия генерирует сигналы входа на основе скользящих средних кроссоверов и прорывов полосы Боллинджера.

  2. Чувствительность параметров: Стратегия включает в себя несколько параметров, таких как скользящие средние периоды, периоды импульса, параметры полос Боллинджера и т. Д. Выбор различных параметров может оказать значительное влияние на эффективность стратегии. Если параметры не выбраны должным образом, это может привести к плохой эффективности стратегии.

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

  4. Риск стоп-лосса: хотя стратегия устанавливает меры стоп-лосса, в экстремальных рыночных условиях (таких как быстрые разрывы) цена может напрямую пересечь уровень стоп-лосса, что приводит к фактическим потерям, превышающим ожидания.

  5. Концентрированный риск позиции: если стратегия непрерывно генерирует сигналы в одном направлении в течение определенного периода, это может привести к чрезмерной концентрации позиций в одном направлении, что приводит к увеличению риска позиции.

  6. Риск ликвидности: на эффективность стратегии при обратном тестировании и торговле в режиме реального времени может повлиять ликвидность рынка, особенно при работе с крупными фондами, которые могут столкнуться с проблемами скольжения и недостаточного объема торговли.

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

  1. Внедрить больше технических индикаторов: на основе текущих скользящих средних значений, импульса и полос Боллинджера можно ввести больше технических индикаторов, таких как RSI и MACD, чтобы повысить надежность сигналов посредством подтверждения с помощью нескольких индикаторов.

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

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

  4. Улучшение размеров позиций: на основе текущего размеров позиций, более продвинутые методы управления деньгами, такие как критерий Келли, фиксированный коэффициент, динамический капитал и т. д., могут быть введены для улучшения доходности баланса и рисков.

  5. Если некоторые фундаментальные факторы, такие как макроэкономические данные и тенденции в отрасли, могут быть объединены для фильтрации и подтверждения технических сигналов, это может улучшить эффективность стратегии.

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

Резюме

JiaYiBing Quantitative Trend Momentum Trading Strategy является количественной торговой стратегией, которая интегрирует несколько методов технического анализа.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('甲易炳', overlay=true)

// Parameters
trendPeriod = input(50, 'Trend Period')
momentumPeriod = input(14, 'Momentum Period')
bbPeriod = input(20, 'Bollinger Bands Period')
bbDeviation = input(2, 'Bollinger Bands Deviation')
fastMALen = input(23, 'Fast SMA Length')
slowMALen = input(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
stopLossPerc = input.float(0.5, 'Stop Loss %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01
trailingStopLossPerc = input.float(0.5, 'Trailing Stop Loss %', minval=0.05, step=0.05) * 0.01
qty_percent = input.int(20, 'Position Size %', step=1)
qty_cap = input.int(10000, 'Max Position Size', step=1000)
beast_mode = input.bool(false, 'Beast Mode')
set_cap = input.bool(true, 'Cap Position Size')
strategy.initial_capital = 50000
// Calculate position size
qty1 = (strategy.initial_capital + strategy.netprofit) * qty_percent / 10 / close
qty = (set_cap and qty1 > qty_cap) ? qty_cap : qty1

// Calculate moving averages
fastMA = ta.sma(close, fastMALen)
slowMA = ta.sma(close, slowMALen)

// Bollinger Bands
[upperBB, middleBB, lowerBB] = ta.bb(close, bbPeriod, bbDeviation)

// Entry conditions
buySignal = ta.crossover(close, fastMA) and close > upperBB
sellSignal = ta.crossunder(close, fastMA) and close < lowerBB

// Rampage mode entry conditions
if beast_mode
    buySignal := buySignal and fastMA > fastMA[2]
    sellSignal := sellSignal and fastMA < fastMA[2]

// Active positions
longIsActive = buySignal or strategy.position_size > 0
shortIsActive = sellSignal or strategy.position_size < 0

// Declare take profit and stop loss variables
var float longTakeProfitPrice = na
var float shortTakeProfitPrice = na

// Take profit and stop loss calculation
if longIsActive
    if buySignal and not (strategy.position_size > 0)
        longTakeProfitPrice := close * (1 + longTakeProfitPerc)
    else
        longTakeProfitPrice := nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
if shortIsActive
    if sellSignal and not (strategy.position_size < 0)
        shortTakeProfitPrice := close * (1 - shortTakeProfitPerc)
    else
        shortTakeProfitPrice := nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPerc))

longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
longTrailingStopLossPrice = close * (1 - trailingStopLossPerc)
shortTrailingStopLossPrice = close * (1 + trailingStopLossPerc)

// Entries and exits
if strategy.position_size == 0
    strategy.entry('Long Entry', qty=qty, direction=strategy.long, when=buySignal, alert_message='Long Entry')
    strategy.entry('Short Entry', qty=qty, direction=strategy.short, when=sellSignal, alert_message='Short Entry')
    strategy.exit('Long Take Profit', 'Long Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : longTakeProfitPrice, trail_price=enableTrailing ? longTakeProfitPrice : na, trail_offset=enableTrailing ? longTrailingTakeProfitStepTicks : na, when=longIsActive, alert_message='Long Take Profit')
    strategy.exit('Short Take Profit', 'Short Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : shortTakeProfitPrice, trail_price=enableTrailing ? shortTakeProfitPrice : na, trail_offset=enableTrailing ? shortTrailingTakeProfitStepTicks : na, when=shortIsActive, alert_message='Short Take Profit')
else
    if longIsActive
        strategy.exit('Long Stop Loss', 'Long Entry', stop=longTrailingStopLossPrice, when=longIsActive)
    if shortIsActive
        strategy.exit('Short Stop Loss', 'Short Entry', stop=shortTrailingStopLossPrice, when=shortIsActive)

// Plotting
plot(fastMA, 'Fast SMA', color=color.blue, linewidth=1, style=plot.style_line)
plot(slowMA, 'Slow SMA', color=color.orange, linewidth=1, style=plot.style_line)
plot(upperBB, 'Upper BB', color=color.green, linewidth=1, style=plot.style_line)
plot(lowerBB, 'Lower BB', color=color.red, linewidth=1, style=plot.style_line)


Больше