Esta estrategia es una estrategia de seguimiento de tendencias basada en el indicador CCI. Genera señales de negociación mediante el monitoreo del cruce entre dos CCIs de diferentes plazos de tiempo. Específicamente, detectará si un CCI de período más corto rompe con un CCI de período más largo y determinará posiciones largas o cortas en función de la dirección de la ruptura.
La lógica central de esta estrategia es la siguiente:
Reglas largas específicas:
Reglas breves específicas:
Como se puede ver, esta estrategia aprovecha la sensibilidad de los CCI de menor duración y la estabilidad de los CCI de mayor duración para identificar y seguir las tendencias.
Las ventajas de esta estrategia:
También hay algunos riesgos:
Soluciones:
Áreas en las que la estrategia puede optimizarse aún más:
En conclusión, esta es una estrategia simple de seguimiento de tendencias basada en el cruce CCI. Puede identificar efectivamente la dirección de la tendencia y seguir las tendencias. Mientras tanto, controla el riesgo a través de la parada de pérdida. Esta estrategia es simple, práctica, flexible en el ajuste de parámetros, y puede servir como una estrategia de cantidad de inicio. Se puede mejorar en un sistema más potente a través de una mayor optimización y combinación.
/*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)