Momentum-Indikator Lang-Kurzstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-02 16:34:48
Tags:

img

Übersicht

Diese Strategie verwendet Momentum-Indikatoren wie den Average Directional Index (ADX), den Directional Movement Index (DMI) und den Commodity Channel Index (CCI), um die Trendrichtung zu bestimmen und Trends zu verfolgen.

Strategie Logik

  1. Berechnung der Indikatoren ADX, DMI und CCI.

    • Ein hoher ADX zeigt einen starken Trend an.
    • DMI umfasst DI+ und DI-. DI+ zeigt Aufwärtstrendstärke, während DI- Abwärtstrendstärke anzeigt. Wenn DI+ größer ist als DI-, ist es ein Aufwärtstrend und umgekehrt.
    • Der CCI beurteilt überkaufte/überverkaufte Niveaus: Unter -100 ist Überkauf und unter -100 Überkauf.
  2. Bestimmung der Trendrichtung.

    • Wenn DI+ über DI- überschreitet, wird ein Aufwärtstrend ermittelt.
    • Wenn DI- unter DI+ fällt, wird ein Abwärtstrend ermittelt.
  3. Nehmen Sie Ihre Positionen ein.

    • Wenn sich ein Aufwärtstrend bildet, ist der ADX hoch und der CCI < -100, geht man lang.
    • Wenn sich ein Abwärtstrend bildet, ist der ADX hoch und der CCI > 100, wird kurz gehalten.
  4. Ausgangspositionen mit Stop-Loss.

    • Wenn lang, verlassen, wenn DI- unter DI+ geht.
    • Bei Kurzlauf, Ausstieg, wenn DI+ über DI-läuft.

Analyse der Vorteile

  1. ADX filtert den Handel während schwacher Trends aus.

  2. DMI verringert die Fehler bei der Trendenkennung.

  3. Eine Überverlängerung der CCI verbessert den Zeitpunkt und reduziert das Risiko.

  4. Durch die Kombination von Impulsindikatoren wird die Genauigkeit verbessert.

  5. Stop-Loss-Limits für Verluste pro Handel.

Risiken und Absicherung

  1. Erhöhen Sie die ADX-Schwelle, um einen starken Trend zu gewährleisten.

  2. DMI ist im frühen Trendstadium zurückgeblieben.

  3. Hohe CCI-Handelsfrequenz, erweitern Sie den CCI-Bereich, um Lärm zu filtern.

  4. Eine marktneutrale Strategie bei Long- und Short-Positionen zur Absicherung des Gesamtpositionsrisikos zu berücksichtigen.

Optimierungsrichtlinien

  1. Optimieren der ADX-Parameter, um die Geräuschfilterung und den Aufnahmeverlauf auszugleichen.

  2. Optimieren Sie die DMI-Parameter, um Verzögerung und Empfindlichkeit auszugleichen.

  3. Optimierung der CCI-Parameter, um die Handelsfrequenz und die Rückkehr des Handels auszugleichen.

  4. Testen Sie die Hinzufügung oder Änderung von Indikatoren für bessere Kombinationen, z. B. MACD, KDJ.

  5. Versuche auf verschiedenen Produkten, um die beste Passform zu finden.

  6. Optimierung der Positionsgröße zur Risikokontrolle bei gleichzeitiger Trendverfolgung.

Schlussfolgerung

Die Strategie verwendet logischerweise ADX für den Trend, DMI für die Richtung und CCI für Umkehrungen. Aber Parameter müssen optimiert und Positionsgröße zur Risikokontrolle. Richtig abgestimmt und auf Trendprodukte angewendet, kann sie eine stetige Rendite liefern. Händler sollten sich dynamisch an veränderte Märkte anpassen.


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

//@version=4
strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true)
adxlen = input(9, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_Entry = input(25, title="ADX Entry")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)
cci_length = input(20, minval=1, title="CCI Length")
cci_ma = sma(close, cci_length)
cci = (close - cci_ma) / (0.015 * dev(close, cci_length))

stop_loss = syminfo.mintick * 100


open_longs = strategy.position_size > 0
open_shorts = strategy.position_size < 0

possible_bull = false
possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false
possible_bear = false
possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false



bool bull_entry = crossover(up,down)

if(bull_entry and up < ADX_Entry and cci < 0)
	possible_bull := true
	bull_entry := false

if(possible_bull and up > ADX_Entry and cci > -100)
	bull_entry := true

bool bear_entry = crossover(down,up)

if(bear_entry and down < ADX_Entry and cci > 0)
	possible_bear := true
	bear_entry := false

if(possible_bear and down >= ADX_Entry and cci < 100)
	bear_entry := true

strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry)
strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry )	

strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))


Mehr