Двухвременная тенденция CCI в соответствии со стратегией

Автор:Чао Чжан, Дата: 2023-11-24 10:53:07
Тэги:

img

Обзор

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

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

Основная логика этой стратегии заключается в следующем:

  1. Определить два ККИ, ci1 как 14 периодов, ci2 как 56 периодов
  2. Когда CI1 перешагнут CI2, выберите длинный
  3. Когда ci1 опустится ниже ci2, перейдите на короткий.
  4. Использовать значения ci1 и ci2 для определения выходов после запуска сигналов

Специальные длинные правила:

  1. ci1 превышает ci2, более короткий период CCI превышает более длительный период CCI
  2. Условие остановки потерь: ci1 <-50 и скорость изменения < 0 или ci1 прерывается ниже -100

Специальные короткие правила:

  1. ci1 превышает ci2, более короткий период CCI превышает более длительный период CCI
  2. Условие остановки потерь: ci1 > 100 и скорость изменения > 0 или ci2 превышает 100

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

Преимущества

Преимущества этой стратегии:

  1. Эффективно определяет тенденции с использованием силы показателя CCI
  2. Дизайн двойного CCI фильтрует некоторые шумовые отрасли
  3. Сочетание долгосрочных и краткосрочных ККИ контролирует риск, одновременно следуя тенденциям
  4. Простые и понятные правила стратегии, легко понятные и реализуемые
  5. Высококонфигурируемая, как периоды CCI, так и условия остановки потерь настраиваются

Риски

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

  1. Слабая способность выявлять рынки с ограниченными диапазонами и волатильными рынками с использованием ИКТ
  2. Различия между долгосрочными и краткосрочными ККИ могут возникнуть, что может привести к ошибочным сигналам.
  3. Неправильное установление стоп-лосса может привести к огромным потерям
  4. Ненадлежащая настройка параметров также в значительной степени влияет на прибыльность стратегии

Решения:

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

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

Области, в которых стратегия может быть дополнительно оптимизирована:

  1. Добавить больше индикаторов для создания более систематической торговой системы
  2. Разница рентабельности тестирования между рабочими днями и сессиями
  3. Поиск лучших параметров с помощью машинного обучения
  4. Параметры настройки для различных продуктов
  5. Оптимизация правил въезда и выезда

Заключение

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


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="my work",calc_on_order_fills=true,currency=currency.USD, default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent)


source = close
shortlength=input(14)
longlength=input(56)
aa=input(2)
Ss=input(75)

//Cci part
ci1=cci(source,shortlength)   //4시간봉의 기본 cci
ci2=cci(source,longlength)   //4시간봉에서 12시봉의 cci 무빙측정

//오린간 선생님의 WT + ichimoku
len = input(10)
lenTurn = input(9)
lenStd = input(26)

wtm_e(so, l) =>
    esa = ema(so, l)
    d = ema(abs(so - esa), l)
    ci = (so - esa) / (0.015 * d)
    ema(ci, l*2+1)

alh(len) => avg(lowest(len), highest(len))
alh_src(src, len) => avg(lowest(src, len), highest(src, len))

wt = wtm_e(close,len)
turn = alh_src(wt, lenTurn)
std = alh_src(wt, lenStd)

cnt = 0
if wt > turn
    cnt:=cnt+1
if wt > std
    cnt:=cnt+1


//100,-100선
h0 = hline(100)
h1 = hline(-100)

//plot(ci,color=green)
// plot(k,color=green)
// plot(d,color=red)
plot(ci1,color=green)
plot(ci2,color=red)

plot(0,color=black)
plot(100,color=black)
plot(-100,color=black)

fill(h0,h1,color=purple,transp=95)

bgcolor(cnt==0 ? red : cnt==1 ? blue : cnt == 2 ? green : na, transp = Ss)

//기간조정

Fromday = input(defval=1, title="from day", minval=1, maxval=31)
FromMonth = input(defval=1, title="from month", minval=1, maxval=12)
FromYr = input(defval=2019, title="from yr", minval=1970)

Today = input(defval=13, title="to day", minval=1, maxval=31)
ToMonth = input(defval=12, title="to month", minval=1, maxval=12)
ToYr = input(defval=2019, title="to yr", minval=1970)

startDate = timestamp(FromYr, FromMonth, Fromday, 00, 00)
finishDate = timestamp(ToYr, ToMonth, Today, 00, 00)
Time_cond = true


/////롱

if  crossover(ci1,ci2) and change(ci2)>0 and Time_cond
    strategy.entry("go", strategy.long, comment="go")
    
strategy.close("go", (ci2<0 and ci1 <-50 and change(ci1)<0) or (crossunder(ci1,-100) and strategy.openprofit<0) and change(cnt)<0)



/////숏

if  (crossunder(ci1,ci2) and change(ci2)<0 and falling(ci1,aa)) and Time_cond
    strategy.entry("die", strategy.short, comment="die")
    
strategy.close("die", (ci2>0 and ci1 > 100 and change(ci1)>0) or (crossover(ci2,100) and strategy.openprofit<0) and change(cnt)>0)

Больше