Diese Strategie verwendet den Average True Range (ATR) und den CHOP-Index als die wichtigsten technischen Indikatoren, um Trends zu identifizieren und zu verfolgen.
Verwenden Sie ATR, um die Boxgröße zu berechnen und den Renko-Kanal zu konstruieren, um die Kurstrendrichtung zu bestimmen.
Der CHOP-Index wird angewendet, um zu beurteilen, ob der Markt für den Handel geeignet ist. Dieser Index enthält den höchsten Preis, den niedrigsten Preis und den ATR. Wenn er zwischen 38,2 und 61,8 liegt, zeigt er eine geringe Marktvolatilität an; andernfalls signalisiert er eine hohe Volatilität und einen ungeeigneten Handelsmarkt.
Wenn der CHOP-Index die oberen 61,8 durchbricht, tritt der Preis in einen Abwärtstrend ein. Wenn die kurzfristige schnelle EMA auch zeigt, dass der Preis führend ist, gehen Sie kurz. Umgekehrt, wenn der CHOP die unteren 38,2 durchbricht und die kurzfristige EMA steigt, gehen Sie lang.
Verwenden Sie die Stop-Loss-/Take-Profit-Strategie. Wenn der Preis wieder in den 38.2-61.8-Gürtelbereich von CHOP eintritt, schließen Sie die Position mit Stop-Loss oder Take-Profit.
Diese Strategie kombiniert Trendbeurteilung und Volatilitätskontrolle, die sowohl Preistrends erfassen als auch Risiken kontrollieren kann.
Der von ATR aufgebaute Renko-Kanal kann die Preisentwicklung effektiv verfolgen.
Der CHOP-Index beurteilt die Volatilitätsrate des Marktes, um bei heftigen Schwankungen einen falschen Handel zu vermeiden.
Die Kombination von schnellen EMA zur Bestimmung der kurzfristigen Trendrichtung verhindert eine umgekehrte Operation.
Die Stop-Loss/Take-Profit-Strategie steuert einzelne Verluste.
Die wichtigsten Risiken dieser Strategie sind:
Bei seitlichem Markt können ATR-Kanal- und CHOP-Signale falsche Signale erzeugen.
Eine Kombination einzelner technischer Indikatoren kann Verluste nicht vollständig vermeiden.
Eine zu locker eingestellte Stop-Loss-Position kann zu einem übergroßen Einzelverlust führen.
Diese Strategie kann in folgenden Aspekten optimiert werden:
Erhöhen Sie andere Hilfsindikatoren, um Signale zu bestimmen, wie Kerzenmuster, Lautstärke usw., um die Genauigkeit des Signals zu verbessern.
Optimierung der Parameter von ATR und CHOP, um Preisschwankungen besser zu erfassen.
Einstellen dynamischer Stop-Loss-/Take-Profit-Positionen für größere Gewinnspannen und schnellere Stop-Loss-Positionen.
Nach der Bestimmung des Haupttrends den Stop-Loss-Bereich ordnungsgemäß lockern, um mehr Gewinn aus dem Trend zu erzielen.
Diese Strategie integriert allgemein verwendete technische Indikatoren und ist einfach und praktisch. Mit Parameteranpassung und Optimierung können zufriedenstellende Tracking-Effekte erzielt werden. Aber sie erfordert immer noch manuelles Urteilen über wichtige Trends und kann nicht vollständig automatisiert werden. Sie kann als Hilfsentscheidungsinstrument und Referenz für andere Strategien dienen.
/*backtest start: 2022-12-28 00:00:00 end: 2024-01-03 00:00:00 period: 1d basePeriod: 1h 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/ // © sharatgbhat //@version=4 strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500) maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float) // strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity) method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method") methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value") pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source") useClose = pricesource == "Close" useOpenClose = pricesource == "Open / Close" or useClose useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume") isOscillating = input(defval=false, type=input.bool, title="Oscillating") normalize = input(defval=false, type=input.bool, title="Normalize") vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume op = useClose ? close : open hi = useOpenClose ? close >= op ? close : op : high lo = useOpenClose ? close <= op ? close : op : low if method == "ATR" methodvalue := atr(round(methodvalue)) if method == "Part of Price" methodvalue := close / methodvalue currclose = float(na) prevclose = nz(currclose[1]) prevhigh = prevclose + methodvalue prevlow = prevclose - methodvalue currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose direction = int(na) direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1]) directionHasChanged = change(direction) != 0 directionIsUp = direction > 0 directionIsDown = direction < 0 barcount = 1 barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount vol := not directionHasChanged ? vol[1] + vol : vol res = barcount > 1 ? vol / barcount : vol plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume") length = input(14, minval=1) ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length) offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(ci, "CHOP", color=#2962FF, offset = offset) band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed) band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed) fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background") MomentumBull = close>ema(close,8) MomentumBear = close<ema(close,8) Tradecon = crossunder(ci,61.8) if (MomentumBull and directionIsUp and Tradecon) strategy.entry("Buy", strategy.long) if (MomentumBear and directionIsDown and Tradecon ) strategy.entry("Sell", strategy.short) strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10) strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)