Intelligente Handelsstrategie mit doppeltem gleitendem Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2024-02-18 15:58:08
Tags:

img

Übersicht

Die Dual Moving Average Intelligent Tracking Trading Strategie ist eine Trend-folgende Strategie, die auf gleitenden Durchschnitten und spezifischen Indikatoren basiert. Die Strategie verwendet zwei gleitende Durchschnitte mit verschiedenen Parameter-Einstellungen, um einen Kanal zu erstellen und kombiniert den OTT-Indikator, um die oberen und unteren Grenzen des Kanals zu setzen, um die Preistrends intelligent zu verfolgen.

Strategieprinzip

Die Kernmethode dieser Strategie besteht darin, einen anpassungsfähigen Kanal zu konstruieren, der zwei gleitende Durchschnitte und den OTT-Indikator verwendet, insbesondere:

  1. Die schnelle Linie MAvg wird unter Verwendung von CLOSE und benutzerdefinierten gleitenden Durchschnitten mit einer Länge von 5 Perioden berechnet.

  2. Berechnen der Long-Line-Position LongStop und der Short-Line-Position ShortStop für den Kanal anhand von MAvg und vorgegebenen Prozentsätzen;

  3. Berechnung des Kanalstop-Loss MT im OTT-Indikator und des Kanalpreises OTT auf der Grundlage der langen/kurzen Richtung;

  4. Erzeugen Sie Handelssignale, wenn der Preis durch OTT durchbricht.

Der obige Prozess ermöglicht die Echtzeitverfolgung von Kursentwicklungsänderungen und erzeugt Handelssignale.

Strategische Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die doppelte gleitende Durchschnittskanalstruktur erfasst die Preisentwicklung effektiv;
  2. Der OTT-Indikator legt den Kanalstop-Loss fest, um Risiken zu kontrollieren;
  3. Adaptive Kanalstruktur reagiert schnell auf Preisänderungen;
  4. Flexible Einstellung der Parameter für verschiedene Produkte und Zeitrahmen.

Strategische Risiken

Es gibt auch einige Risiken:

  1. Doppel gleitende Durchschnitte können zu einer Divergenz führen, die zu falschen Signalen führt;
  2. Fehlende Einstellungen von OTT-Parametern können zu aggressiv oder konservativ sein;
  3. Die Strategie stützt sich ausschließlich auf technische Indikatoren, ohne die Grundlagen zu berücksichtigen.

Risiken können durch Parameteroptimierung, Integration anderer Indikatoren und Filter für Fundamentaldaten angegangen werden.

Optimierungsrichtlinien

Die Strategie kann in mehreren Aspekten optimiert werden:

  1. Optimierung der gleitenden Durchschnittsparameter für die richtigen Produkt- und Zeitrahmen;
  2. Optimierung der Kanalbreitenparameter, um Empfindlichkeit und Stabilität auszugleichen;
  3. Fügen Sie Filter basierend auf dem Handelsvolumen hinzu;
  4. Richtungsfilter basierend auf den Grundlagen.

Zusammenfassung

Zusammenfassend ist dies eine Trendfolgestrategie, die auf einem doppelten gleitenden Durchschnittskanal und einem OTT-Indikator basiert. Die Kernidee besteht darin, einen anpassungsfähigen Kanal zu konstruieren und Signale zu erzeugen, wenn die Preise durchbrechen. Die Strategie hat Vorzüge, aber auch Raum für Verbesserungen. Mit Parameter-Tuning und Logikoptimierung hat sie das Potenzial, eine effiziente Quant-Handelsstrategie zu werden, die es wert ist, eingesetzt zu werden.


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


Mehr