Эта стратегия разработана как гибкая тенденция после торговой системы, основанной на индикаторе CCI. Она может генерировать торговые сигналы, основанные на перекрестках нулевой линии CCI или настраиваемых перекрестках верхней / нижней полосы. Стратегия позволяет устанавливать фиксированные коэффициенты стоп-лосса и прибыли, торговать в определенные временные рамки и многое другое.
Для определения рыночных тенденций используйте перекрестки нулевой линии CCI. Пересечение CCI выше нуля является бычьим сигналом, а пересечение ниже является медвежьим сигналом.
Установите пользовательские верхние и нижние полосы CCI. Пересечение CCI выше верхней полосы является быстрым, а пересечение ниже нижней полосы является медвежьим. Пересечения полос действуют как остановки.
Возможность торговать только в определенные временные рамки и закрывать все позиции за пределами этих периодов.
Установите фиксированные стоп-лосс и проценты прибыли.
Настраиваемые предупреждающие сообщения для сигналов входа и выхода.
Высоко настраиваемая стратегия с регулируемыми параметрами CCI, диапазонами, остановками и т. д.
CCI чувствителен к изменениям цен, хорошо распознает изменение тренда.
Специализированные полосы могут быть настроены для разных рынков.
Поддержка торговли в разные временные рамки с оптимизированными параметрами на основе характеристик.
Фиксированные коэффициенты стоп-лосса/прибыли и риск-вознаграждение и предельный риск.
Полностью настраиваемые параметры оптимизируют стратегию для различных продуктов и рыночных условий.
CCI, склонные к ложным сигналам, должны проверять сигналы с более длительными индикаторами временных рамок.
Фиксированные процентные ставки стоп/тач не могут адаптироваться к изменяющимся рыночным условиям.
Торговля в фиксированные временные рамки рискует потерять возможности в течение периодов диапазона.
Частые оптимизации параметров могут привести к переоценке или отсутствию сделок.
Необходимо учитывать макрофакторы, поскольку оптимизация сама по себе недостаточна для устранения рисков.
Добавить более длительные временные индикаторы для проверки сигналов CCI.
Включать динамические остановки/заезды, такие как ATR.
Проверьте параметры в разных временных рамках и найдите периоды высокой эффективности.
Оптимизировать параметры и диапазоны CCI для меняющихся рынков.
Подумайте о включении других факторов, таких как волатильность и объем.
Выберите временные рамки, подходящие для торговых продуктов.
Подумайте о машинном обучении для автоматизации оптимизации стратегии.
В целом это очень гибкая и настраиваемая система следования трендам. Ключевыми преимуществами являются использование 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)