Intelligente Tracking-Handelsstrategie basierend auf dem doppelten gleitenden Durchschnitt


Erstellungsdatum: 2024-02-18 15:58:08 zuletzt geändert: 2024-02-18 15:58:08
Kopie: 2 Klicks: 505
1
konzentrieren Sie sich auf
1617
Anhänger

Intelligente Tracking-Handelsstrategie basierend auf dem doppelten gleitenden Durchschnitt

Überblick

Die Strategie verwendet zwei verschiedene Parameter-Sätze, um eine Linie zu bilden, die die Kanaloberfläche definiert, und kombiniert mit OTT-Indikatoren, um die Kanaloberfläche zu definieren, um die Preisentwicklung intelligent zu verfolgen. Die Kauf- oder Verkaufsaktion erfolgt, wenn der Preis den Kanal durchbricht.

Strategieprinzip

Die Strategie basiert auf zwei Moving Averages und OTT-Indikatoren, um einen Anpassungskanal zu erstellen.

  1. Berechnen Sie die Schnelllinie MAvg mit der Eingabe des CLOSE-Schlusskurses und der benutzerdefinierten Durchschnittslinie mit einer Länge von 5;

  2. Berechnen Sie die unteren Grenzen für den langen und den kurzen Stopp in der Kanallinie, basierend auf MAvg und Einstellprozentsatz;

  3. Berechnen Sie die MT für den mobilen Stopp des Kanals in den OTT-Indikatoren und berechnen Sie den OTT-Kanalpreis basierend auf dem Leerstand.

  4. Wenn der Preis OTT durchbricht, wird ein Handelssignal erzeugt.

Die oben beschriebenen Prozesse bauen einen Anpassungskanal auf, der es der Strategie ermöglicht, die Preisentwicklung in Echtzeit zu verfolgen und somit ein Handelssignal zu erzeugen.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die zweigleisige Kanalstruktur ermöglicht eine effektive Erfassung der Preisentwicklung.
  2. Die OTT-Indikatoren setzen den Mobilfunkverlust des Kanals ein, um das Risiko zu kontrollieren.
  3. Die Anpassung der Kanalstrukturen, um schnell auf Preisänderungen zu reagieren;
  4. Die Strategieparameter sind flexibel eingestellt und können für verschiedene Sorten und Zyklen optimiert werden.

Strategisches Risiko

Die Strategie birgt auch einige Risiken:

  1. Die Doppel-Einheitlichkeit ist leicht abweichend und kann zu Fehlsignalen führen.
  2. Die falsche Einstellung der OTT-Parameter kann zu radikal oder konservativ sein und die Strategie beeinträchtigen.
  3. Die Strategie basiert nur auf technischen Indikatoren, nicht auf fundamentalen Faktoren.

Die oben genannten Risiken können durch Parameteroptimierung in Kombination mit anderen Indikatoren oder grundlegenden Filtersignalen verbessert und optimiert werden.

Richtung der Strategieoptimierung

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Optimierung der Mittellinienparameter und Auswahl der richtigen Kombination aus Sorten und Perioden;
  2. Optimierung der Channel-Bandbreitenparameter und Balance zwischen Tracking-Sensitivität und Stabilität;
  3. Die Daten werden von den Anbietern der Webseite bereitgestellt.
  4. Der Kurs wird in Kombination mit den Grundlagen gefiltert.

Zusammenfassen

Die Strategie basiert insgesamt auf einem Trend-Tracking-System, das sich auf die bihomorphic- und OTT-Indikatoren stützt. Die Kernidee besteht darin, einen Anpassungskanal zu erstellen, der durch einen Durchbruch ein Handelssignal erzeugt. Die Strategie hat einige Vorteile, aber es gibt auch Raum für mögliche Verbesserungen.

Strategiequellcode
/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="BugRA_Trade_Strategy", shorttitle="BugRA_Trade_Strategy", overlay=true)

// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close

// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")

// Tarih Filtresi Fonksiyonu
isDateInRange() => true

// Özel Fonksiyonlar
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = sum(vud1, length)
    vDD = sum(vdd1, length)
    vCMO = (vUD - vDD) / (vUD + vDD)
    varResult = 0.0
    varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
    varResult

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    wwma = 0.0
    wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
    wwma

Zlema_Func(src, length) =>
    zxLag = floor(length / 2)
    zxEMAData = src + (src - src[zxLag])
    zlema = ema(zxEMAData, length)
    zlema

Tsf_Func(src, length) =>
    lrc = linreg(src, length, 0)
    lrs = lrc - linreg(src, length, 1)
    tsf = lrc + lrs
    tsf

getMA(src, length) =>
    ma = mav == "SMA" ? sma(src, length) :
         mav == "EMA" ? ema(src, length) :
         mav == "WMA" ? wma(src, length) :
         mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
         mav == "VAR" ? Var_Func(src, length) :
         mav == "WWMA" ? Wwma_Func(src, length) :
         mav == "ZLEMA" ? Zlema_Func(src, length) :
         mav == "TSF" ? Tsf_Func(src, length) : na

// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200

plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))

// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()

// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.close("Long")