Dynamische gleitende Durchschnitt-Handelsstrategie


Erstellungsdatum: 2023-12-21 11:33:50 zuletzt geändert: 2023-12-21 11:33:50
Kopie: 1 Klicks: 736
1
konzentrieren Sie sich auf
1623
Anhänger

Dynamische gleitende Durchschnitt-Handelsstrategie

Überblick

Die Strategie kombiniert die Vorteile von dynamischen Indikatoren und Moving Averages, um den mittelfristigen Trend der Aktienpreise zu verfolgen und stabile Gewinne zu erzielen.

Grundsätze

Die Strategie basiert hauptsächlich auf drei Varianten des Hull Moving Averages, darunter der gewöhnliche Hull Moving Average (HMA), der gewichtete Hull Moving Average (WHMA) und der Index Hull Moving Average (EHMA). Gemäß dem Code erlaubt die Strategie dem Benutzer, zwischen den drei Hull MA zu wechseln.

Die Berechnungsformel für HMA lautet:

HMA = WMA(2*WMA(close,n/2)-WMA(close,n),sqrt(n))

WMA steht für den gewichteten Moving Average, n für die Periodiparameter. HMA reagiert schneller auf Preisänderungen als SMA.

Die Berechnungsformel für WHMA und EHMA ist ähnlich wie für HMA. Die Strategie setzt HMA als Standardoption ein.

Nach der Berechnung des HMA verwendet die Strategie den Mittelwert des HMA als Handelssignal. Wenn der Preis die HMA-Mittellinie überschreitet, wird ein Plus eingegeben. Wenn der Preis die HMA-Mittellinie unterschreitet, wird ein Ausgang gemacht.

Vorteile

Die Strategie hat folgende Vorteile gegenüber herkömmlichen Moving Average Strategien:

  1. Schneller reagieren, stärker Trends verfolgen, zeitnahe Eintritt und Verlustbegrenzung ermöglichen
  2. Es ist wichtig, die Frequenz der unnötigen Transaktionen zu reduzieren, um nicht zu verfolgen, dass die Geschäfte ausfallen.
  3. Flexible Konfiguration der Hull MA-Parameter für eine breitere Palette von Marktumgebungen
  4. Wechselbar zwischen HMA, WHMA und EHMA, um den Anwendungsbereich zu erweitern

Die Gefahr

Die Strategie birgt auch einige Risiken:

  1. Es ist anfällig für mehrere ungültige Signale bei der Bilanzierung, wodurch die Häufigkeit der Transaktionen und die Kosten für den Slippage erhöht werden.
  2. Hull MA-Parameter sind falsch eingestellt und können einen Trendwendepunkt verpassen und das Risiko von Verlusten erhöhen
  3. Unzureichende Aktienwahl, Aktien mit schlechter Liquidität, kann zu massiven Kursverlusten führen

Gegenmaßnahmen:

  1. Optimierung der Hull-MA-Parametern, um die optimalen Werte zu finden
  2. In Kombination mit anderen Indikatoren wird ein Trendwendepunkt ermittelt.
  3. Wählen Sie Aktien mit hoher Liquidität und einem hohen Tagesumsatz

Optimierungsrichtung

Die Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Erhöhung des Transaktionsvolumens oder Filterung anderer Kennzahlen, um die Zuverlässigkeit von Handelssignalen zu gewährleisten
  2. In Kombination mit anderen Indikatoren wie MACD, KDJ und anderen, um den Zeitpunkt des Einstiegs zu bestimmen, erhöhen Sie die Gewinnquote
  3. Anpassung der Hull-MA-Periodenparameter an die Festplatten-Retestdaten
  4. Wechseln Sie zu WHMA oder EHMA und testen Sie die Hull-Variante, die am besten auf einer bestimmten Aktie funktioniert
  5. Erhöhung der Stop-Loss-Strategie zur Kontrolle von Einzelschäden

Zusammenfassen

Die Dynamische Moving Average Trading Strategie integriert die schnelle Reaktion von Hull MA, um die mittelfristigen Trends der Aktienkurse zu verfolgen. Die Strategie kann durch weitere Optimierung der Parameter-Einstellungen und der Aktien-Spanne eine stabilere Überschussentwicklung erzielen. Es ist eine leicht umzusetzende und risikokontrollierbare quantitative Strategie.

Strategiequellcode
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Position Investing by SirSeff', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0)
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2000, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(30, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)


testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title='Source')
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(55, title='Length(180-200 for floating S/R , 55 for swing entry)')
switchColor = input(true, 'Color Hull according to trend?')
candleCol = input(false, title='Color candles based on Hull\'s Trend?')
visualSwitch = input(true, title='Show as a Band?')
thicknesSwitch = input(1, title='Line Thickness')
transpSwitch = input.int(40, title='Band Transparency', step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>
    ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>
    ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA    
THMA(_src, _length) =>
    ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length)

//SWITCH
Mode(modeSwitch, src, len) =>
    modeSwitch == 'Hma' ? HMA(src, len) : modeSwitch == 'Ehma' ? EHMA(src, len) : modeSwitch == 'Thma' ? THMA(src, len / 2) : na

//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? HULL > HULL[2] ? #00ff00 : #ff0000 : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title='MHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title='SHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title='Band Filler', color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color=candleCol ? switchColor ? hullColor : na : na)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry('Invest', strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.entry('Pause', strategy.short)