Strategie für dynamische Integralindikatoren

Schriftsteller:ChaoZhang, Datum: 2023-11-06 14:40:26
Tags:

img

Übersicht

Diese Strategie erzeugt Handelssignale durch Berechnung der Summe der Unterschiede zwischen ROC und SMA.

Strategie Logik

Die Strategie berechnet zuerst SMA mit Länge l und ROC. Dann berechnet sie die Differenz k zwischen Schlusskurs und SMA. Als nächstes summiert sie k für s Tage und erhält Summe. Wenn Summe> 0 geht es lang. Wenn Summe<0 geht es kurz.

Insbesondere im Code:

  1. Berechnen Sie SMA mit Länge l, erhalten Sie a.

  2. Berechnen Sie ROC mit Länge l, erhalten r.

  3. Berechnen Sie die Differenz zwischen Schlusskurs und SMA: k = Schlusskurs - a.

  4. Summieren Sie k für s Tage, erhalten Sie Summe.

  5. Bei Summe>0 eine Long-Position; bei Summe<0 eine Short-Position.

  6. Ausgang, wenn sum<0 für lang und sum>0 für kurz ist.

Der Schlüssel besteht darin, die Differenz k zusammenzufassen und das Summenzeichen für Handelssignale zu verwenden. Wenn k> 0 für die letzten Tage steigt, geht der Preis lang. Wenn k < 0, sinkt der Preis, geht man kurz.

Analyse der Vorteile

Diese einfache kurzfristige Handelsstrategie hat folgende Vorteile:

  1. Die verwendeten Indikatoren sind einfach und leicht verständlich.

  2. Durch das Filtern nach den Unterschieden der Indikatoren können genauere Handelsmöglichkeiten gefunden werden.

  3. Eine Zusammenfassung des Unterschieds kann kurzfristige Trends besser erfassen.

  4. Die Parameter l und s können für verschiedene Zyklen eingestellt werden.

  5. Die Logik ist klar und leicht zu ändern und zu optimieren.

  6. Hohe Effizienz der Kapitalverwertung bei häufigen kurzfristigen Geschäften.

Risikoanalyse

Es gibt auch einige Risiken:

  1. Höhere Risiken im kurzfristigen Handel, Verluste sind möglich.

  2. Falsche Parameter können zu einem Überhandel oder zu fehlenden Möglichkeiten führen.

  3. Es ist schwierig, sich an eine Trendwende anzupassen, kein Stop-Loss kann zu großen Verlusten führen.

  4. Eine häufige Anpassung der Parameter hängt stark von der Erfahrung des Händlers ab.

  5. Eine hohe Handelsfrequenz kann die Transaktionskosten und den Schlupf erhöhen.

Lösungen:

  1. Richten Sie die Parameter richtig an, um die Handelsfrequenz zu senken.

  2. Hinzufügen von Trendindikatoren, um Umkehrungen zu erkennen.

  3. Optimieren Sie den Stop Loss, um Einzelhandelsverluste zu kontrollieren.

  4. Fügen Sie automatische Parameteroptimierung hinzu, um die Abhängigkeit von Erfahrung zu senken.

  5. Optimierung des Auftragsausführungsmodells zur Senkung der Transaktionskosten.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Optimieren Sie Parameterberechnungsmethoden, wie genetische Algorithmen, um die Parameter anpassungsfähig zu machen.

  2. Hinzufügen von mehr Indikatoren und Filtern zur Verbesserung der Signalqualität.

  3. Verbessern Sie die Stop-Loss-Strategie, wie zum Beispiel den Stop-Loss.

  4. Optimieren Sie Geldmanagementstrategien wie die Kontrolle von Risikopunkten.

  5. Optimierung des Auftragsausführungsmodells mit Trendverfolgung, Rutschkontrolle usw.

  6. Hinzufügen von Backtesting und Autoptimierungsmodulen.

  7. Hinzufügen einer quantitativen Bewertung der Signalqualität.

Mit diesen Optimierungen kann diese Strategie zu einem umfassenderen, intelligenten, stabilen und kontrollierbaren kurzfristigen Handelssystem werden.

Zusammenfassung

Zusammenfassend lässt sich sagen, dass diese Strategie einfache Signale aus Indikatoren erzeugt, mit klarer Logik und einfacher Implementierung. Mit weiteren Optimierungen in Parametern, Stop-Loss, Geldmanagement usw. kann sie zu einer lohnenden quantitativen Handelsstrategie werden. Aber keine Strategie ist perfekt. Trader müssen sie immer noch rational anwenden, basierend auf persönlichen Risikopräferenzen.


/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=662, overlay=false)

l = input(defval=170,title="Length for indicator")
s = input(title="Length of summation",defval=18)
a= sma(close,l)
r=roc(close,l)
k=close-a
sum = 0
for i = 0 to s
    sum := sum + k[i]
//plot(a,color=yellow,linewidth=2,transp=0)
//bc =  iff( sum > 0, white, teal)
//plot(sum,color=bc, transp=20, linewidth=3,style=columns)
//plot(sma(sum,3),color=white)
//hline(0)

inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na

////buyEntry = crossover(source, lower)
////sellEntry = crossunder(source, upper)
if sum>0
    strategy.entry("Long", strategy.long, oca_name="Long",  comment="Long")
else
    strategy.cancel(id="Long")
if sum<0
    strategy.entry("Short", strategy.short, oca_name="Short", comment="Short")
else
    strategy.cancel(id="Short")
strategy.initial_capital = 50000
plot(strategy.equity-strategy.initial_capital-strategy.closedtrades*.25/2, title="equity", color=red, linewidth=2)
hline(0)
//longCondition = sum>0
//exitlong = sum<0

//shortCondition = sum<0
//exitshort = sum>0

//strategy.entry(id = "Long", long=true, when = longCondition)
//strategy.close(id = "Long", when = exitlong)
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong)

//strategy.entry(id = "Short", long=false, when = shortCondition)
//strategy.close(id = "Short", when = exitshort)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)

Mehr