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.
Die Kernmethode dieser Strategie besteht darin, einen anpassungsfähigen Kanal zu konstruieren, der zwei gleitende Durchschnitte und den OTT-Indikator verwendet, insbesondere:
Die schnelle Linie MAvg wird unter Verwendung von CLOSE und benutzerdefinierten gleitenden Durchschnitten mit einer Länge von 5 Perioden berechnet.
Berechnen der Long-Line-Position LongStop und der Short-Line-Position ShortStop für den Kanal anhand von MAvg und vorgegebenen Prozentsätzen;
Berechnung des Kanalstop-Loss MT im OTT-Indikator und des Kanalpreises OTT auf der Grundlage der langen/kurzen Richtung;
Erzeugen Sie Handelssignale, wenn der Preis durch OTT durchbricht.
Der obige Prozess ermöglicht die Echtzeitverfolgung von Kursentwicklungsänderungen und erzeugt Handelssignale.
Zu den Vorteilen dieser Strategie gehören:
Es gibt auch einige Risiken:
Risiken können durch Parameteroptimierung, Integration anderer Indikatoren und Filter für Fundamentaldaten angegangen werden.
Die Strategie kann in mehreren Aspekten optimiert werden:
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")