CCI-Doppelzeit-Trend nach Strategie

Schriftsteller:ChaoZhang, Datum: 23.11.2023
Tags:

img

Übersicht

Diese Strategie ist eine auf dem CCI-Indikator basierende Trendfolgestrategie. Sie erzeugt Handelssignale, indem sie die Überschneidung zwischen zwei CCIs unterschiedlicher Zeitrahmen überwacht. Insbesondere wird er erkannt, ob ein kürzerer CCI einen längeren CCI durchbricht und auf der Grundlage der Durchbruchsrichtung lange oder kurze Positionen bestimmt.

Strategie Logik

Die Kernlogik dieser Strategie lautet:

  1. Definition von zwei KPI, ci1 als 14 Perioden, ci2 als 56 Perioden
  2. Wenn ci1 über ci2 bricht, gehen Sie lang.
  3. Wenn ci1 unter ci2 fällt, gehen Sie kurz.
  4. Verwenden Sie die Werte von ci1 und ci2 zur Bestimmung der Ausgänge nach Auslösung der Signale

Spezifische langfristige Regeln:

  1. ci1 über ci2, der kürzere Zeitraum CCI über den längeren Zeitraum CCI
  2. Stand-Loss-Bedingung: ci1 <-50 und Veränderungsrate < 0 oder ci1 unter -100

Besondere kurze Regeln:

  1. ci1 unter ci2 fällt, der kürzere CCI unter dem längeren CCI
  2. Stand-Loss-Bedingung: ci1 > 100 und Veränderungsrate > 0 oder ci2 übersteigt 100

Die Kommission ist der Auffassung, dass die in den Erwägungsgründen 23 und 24 genannten Maßnahmen nicht im Sinne des Artikels 107 Absatz 1 AEUV gelten.

Vorteile

Die Vorteile dieser Strategie:

  1. Wirksam identifiziert Trends unter Verwendung der Stärke des CCI-Indikators
  2. Doppel-CCI-Konstruktion filtert einige Lärmgeschäfte
  3. Die Kombination von langfristigen und kurzfristigen KKP kontrolliert das Risiko und folgt gleichzeitig den Trends.
  4. Einfache und klare Strategieregeln, leicht verständlich und umsetzbar
  5. Hoch konfigurierbar, sowohl CCI-Perioden als auch Stop-Loss-Bedingungen sind anpassbar

Risiken

Es gibt auch einige Risiken:

  1. Schwache Fähigkeit zur Ermittlung von bereichsgebundenen und volatilen Märkten unter Verwendung von CCI
  2. Es kann zu Abweichungen zwischen langfristigen und kurzfristigen KKS kommen, die zu falschen Signalen führen
  3. Eine unsachgemäße Einstellung des Stop-Loss kann zu einem enormen Verlust führen
  4. Auch eine unangemessene Einstellung der Parameter wirkt sich stark auf die Rentabilität der Strategie aus.

Lösungen:

  1. Einbeziehung anderer Indikatoren zur Bestimmung der Marktlage, Vermeidung des Handels in volatilen Zeiten
  2. Hinzufügen von Filtern, um Fehler aus der CCI-Divergenz zu vermeiden
  3. Optimieren und testen Sie verschiedene Stop-Loss-Level
  4. Suchen Sie geeignete Parametermengen durch Backtesting und Tuning

Optimierungsrichtlinien

Bereiche, in denen die Strategie weiter optimiert werden kann:

  1. Mehr Indikatoren hinzufügen, um ein systematischeres Handelssystem aufzubauen
  2. Differenz der Rentabilität zwischen Wochentagen und Sitzungen
  3. Suche nach besseren Parametern mithilfe von maschinellem Lernen
  4. Abstimmungsparameter für verschiedene Produkte
  5. Optimierung der Ein- und Ausstiegsregeln

Schlussfolgerung

Zusammenfassend ist dies eine einfache Trend-Folge-Strategie, die auf CCI-Crossover basiert. Sie kann effektiv die Trendrichtung identifizieren und Trends folgen. In der Zwischenzeit kontrolliert sie das Risiko über Stop-Loss. Diese Strategie ist einfach, praktisch, flexibel bei der Parameter-Tuning und kann als Starter-Quant-Strategie dienen. Sie kann durch weitere Optimierung und Kombination zu einem leistungsfähigeren System erweitert werden.


/*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)

Mehr