Сильная стратегия прорыва CCI

Автор:Чао Чжан, Дата: 2023-11-15 16:52:06
Тэги:

img

Обзор

Эта стратегия основана на классическом индексе товарного канала (CCI) и действует только в течение длительного времени. Она выходит на рынок, когда индикатор CCI находится на чрезвычайно низком уровне (CCI <-150 или порог, определенный пользователем) и восстанавливает силу (т.е. CCI> CCI предыдущей свечи), с фильтром на силу самих цен (т.е. закрытие сигнальной панели должно быть выше определенной разницы - фиксированной в 0,25% - от открытия).

При этом, как отмечается в предыдущем сообщении, в соответствии с этим критерием не может быть применяться иная стратегия.

Цель заключается в том, чтобы достичь высокого процента прибыльных сделок (более 50%), а не в том, чтобы зафиксировать полную продолжительность тренда.

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

  1. Создать индикатор CCI и диапазоны с использованием ta.sma() иta.dev() функции.

  2. Используйте ввод для выбора даты начала обратного тестирования.

  3. Сигнал входа: CCI переходит ниже нижней полосы и начинает увеличиваться.

  4. Выход 1: CCI поднимается выше верхней полосы, получает прибыль.

  5. Выход 2: цена падает ниже уровня остановки потери, сокращение потерь.

  6. Стратегия длится только долго, основываясь на силе CCI, с остановками для контроля риска.

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

Стратегия имеет следующие преимущества:

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

  2. Только длинный курс избегает чрезмерного риска от плохих сделок.

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

  4. Механизм стоп-лосса ограничивает потери на одну сделку и управляет капиталом.

  5. Гибкие параметры обратного теста для регулировки фильтров входа.

  6. Высокий процент выигрыша подходит инвесторам, ориентированным на управление рисками.

  7. Ясная логика и простая реализация.

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

Существуют также некоторые риски:

  1. Если идти только на длительный срок, то можно пропустить краткосрочные нисходящие тенденции.

  2. Плохая настройка параметров CCI приводит к отказу.

  3. Стоп-лосс слишком свободный не ограничивает потери.

  4. Сильный восходящий тренд пробивает стопы, вызывая большие потери.

  5. Высокая частота торговли увеличивает затраты на транзакции.

Возможные решения:

  1. Оптимизировать параметры CCI для поиска наилучших значений.

  2. Настраивайте стоп-лосс, чтобы сбалансировать риск и скольжение.

  3. Управляйте частотой входа с учетом затрат.

  4. Комбинируйте с фильтрами тренда и диапазона.

Возможности для расширения

Некоторые способы улучшения стратегии:

  1. Внедрять динамические остановки, основанные на волатильности рынка.

  2. Добавьте такие фильтры, как MACD, чтобы предотвратить слишком широкие остановки.

  3. Включите короткую сторону, когда CCI перегревается.

  4. Рассмотрим затраты, установим минимальную цель прибыли.

  5. Оптимизируйте параметры для временных рамок.

  6. Машинное обучение для автоматической настройки параметров.

  7. Добавление размеров позиций для динамического распределения.

Заключение

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


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='CCI High Performance long only', overlay=false )
src = input(close)
length = input.int(20, title='Period', minval=1)
lossp = input.float(8, title='Stop Loss percentage', minval=0.5, step=0.5)
scart = input.float(0.25, title='Close of the signal bar higher than Open %', minval = 0)
upperline = input.int(150, title='Upper Band', minval=0, step=10)
lowline = input.int(-150, title='Low Band', maxval=0, step=10)


// construction of CCI (not on close but in totalprice) and of bands
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, 'CCI', color=color.new(#996A15, 0))
band1 = hline(upperline, 'Upper Band', color=#C0C0C0, linestyle=hline.style_dashed)
band0 = hline(lowline, 'Lower Band', color=#C0C0C0, linestyle=hline.style_dashed)
fill(band1, band0, color=color.new(#9C6E1B, 90), title='Background')
// === INPUT BACKTEST RANGE ===
fromMonth = input.int(defval = 1,    title = "From Month",  minval = 1, maxval = 12)
fromDay   = input.int(defval = 1,    title = "From Day",    minval = 1, maxval = 31)
fromYear  = input.int(defval = 2016, title = "From Year",   minval = 1970)
thruMonth = input.int(defval = 1,    title = "Thru Month",  minval = 1, maxval = 12)
thruDay   = input.int(defval = 1,    title = "Thru Day",    minval = 1, maxval = 31)
thruYear  = input.int(defval = 2112, title = "Thru Year",   minval = 1970)
// === FUNCTION EXAMPLE limit for backtest ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)            // backtest start  window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)            // backtest finish window
window()  => time >= start and time <= finish ? true : false           // create function "within window of time"
//ENTRY CONDITIONS

// strategy: enter when CCI is under the low line and starts increasing. The filter is that the signal candle should mark a close higher than a x-percent
// (0.25%) of the open
// Exit when either when it reaches the target of a prices highest than high level of CCI or fixed stop loss (in percentage)
scart_level = open * (1+scart/100)
entryl = cci[1] < lowline[1] and cci > cci[1] and close > scart_level and window()
exit1 = cci> upperline
strategy.entry('Long', strategy.long, when=entryl)
strategy.close('Long', when=exit1, comment='target')

// money management (only stop loss)
losspel = strategy.position_avg_price * (1 - lossp / 100)
fixed_stop_long = close < losspel
strategy.close('Long', when=fixed_stop_long, comment='Stop Loss')



Больше