Стратегия следования за трендом и возврата к среднему значению


Дата создания: 2023-11-01 16:20:45 Последнее изменение: 2023-11-01 16:20:45
Копировать: 0 Количество просмотров: 436
1
Подписаться
1166
Подписчики

Стратегия следования за трендом и возврата к среднему значению

Обзор

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

Стратегический принцип

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

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

  3. Можно установить только в определенный период времени торговли, не торгуемый период плавных позиций. Можно установить ежедневные фиксированные периоды торговли.

  4. Можно установить фиксированный коэффициент остановки и остановки.

  5. Alert сообщения для открытия позиций с помощью настраиваемых сделок.

  6. Полностью настраиваемая и гибкая стратегия, позволяющая настраивать такие стратегии оптимизации, как параметры CCI, параметры полосы пропускания и параметры остановки сбоя.

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

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

  2. Настраиваемая полоса пропускания может быть скорректирована в зависимости от параметров различных рынков, а перекрестная остановка полосы пропускания позволяет эффективно контролировать риск.

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

  4. Поддержка фиксированной стоп-стоп-остановки, которая позволяет заранее установить прибыльный и убыточный коэффициенты, эффективно контролируя риск отдельных сделок.

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

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

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

  2. Фиксированная стоп-стоп-пароль не может быть скорректирована в зависимости от изменений рынка.

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

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

  5. Необходимо учитывать различные факторы, включая ситуацию в отрасли, макросреду и т. д. Оптимизация параметров не позволяет полностью избежать риска.

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

  1. Проверка в сочетании с показателями длинного и короткого циклов, чтобы избежать создания ложных сигналов CCI.

  2. Настройка динамического стоп-стоп с использованием ATR и других показателей.

  3. Тестируйте эффективность параметров в разные периоды времени, выбирая наиболее эффективные периоды торговли.

  4. Оптимизация параметров CCI, параметров канальных полос, адаптация к изменениям рынка.

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

  6. Выберите подходящий промежуток времени в зависимости от типа сделки.

  7. Включение алгоритмов машинного обучения для автоматической оптимизации стратегий.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
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/
// © REV0LUTI0N

//@version=4

strategy(title="CCI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)


//CCI Code

length = input(20, minval=1, title="CCI Length")
src = input(close, title="Source")
ma = sma(src, length)
cci = (src - ma) / (0.015 * dev(src, length))


// Strategy Backtesting
startDate  = input(timestamp("2099-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true


//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true


//Strategy Settings

//Strategy Settings - Enable Check Boxes
enableentry = input(true, title="Enter First Trade ASAP")
enableconfirmation = input(false, title="Wait For Cross To Enter First Trade")
enablezero =input(true, title="Use CCI Simple Cross Line For Entries & Exits")
enablebands = input(false, title="Use Upper & Lower Bands For Entries & Exits")

//Strategy Settings - Band Sources
ccisource = input(0, title="CCI Simple Cross")
upperbandsource =input(100, title="CCI Enter Long Band")
upperbandexitsource =input(100, title="CCI Exit Long Band")
lowerbandsource =input(-100, title="CCI Enter Short Band")
lowerbandexitsource =input(-100, title="CCI Exit Short Band")

//Strategy Settings - Crosses
simplecrossup = crossover(cci, ccisource)
simplecrossdown = crossunder(cci, ccisource)
uppercrossup = crossover(cci, upperbandsource)
lowercrossdown = crossunder(cci, lowerbandsource)
uppercrossdown = crossunder(cci, upperbandexitsource)
lowercrossup = crossover(cci, lowerbandexitsource)
upperstop = crossunder(cci, upperbandsource)
lowerstop = crossover(cci, lowerbandsource)


// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")


// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
    

//Strategy Execution

//Strategy Execution - Simple Line Cross
if (cci > ccisource and enablezero and enableentry and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (cci < ccisource and enablezero and enableentry and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

if (simplecrossup and enablezero and enableconfirmation and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (simplecrossdown and enablezero and enableconfirmation and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

//Strategy Execution - Upper and Lower Band Entry
if (uppercrossup and enablebands and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (lowercrossdown and enablebands and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

//Strategy Execution - Upper and Lower Band Exit
if strategy.position_size > 0 and uppercrossdown and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowercrossup and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Upper and Lower Band Stops
if strategy.position_size > 0 and upperstop and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowerstop and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Close Trade At End Of Time Frame    
if strategy.position_size > 0 and timetoclose and enableclose and time_cond
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose and time_cond
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Stop Loss and Take Profit
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)