Momentum - Handelsstrategie mit doppelten gleitenden Durchschnitten

Schriftsteller:ChaoZhang, Datum: 2023-12-01 18:13:21
Tags:

img

Übersicht

Die Momentum Dual Moving Average Trading Strategie ist eine kurzfristige Handelsstrategie, die sowohl die Preisdynamik als auch die Trendindikatoren nutzt. Die Strategie verwendet den Schlusskurs, den Eröffnungskurs, den Preiskanal, den schnellen RSI und andere Indikatoren, um Handelssignale zu generieren. Sie wird lange oder kurze Positionen einrichten, wenn Preisbruch oder Indikatorsignale auftreten. Sie legt auch Stop-Loss-Bedingungen fest, um die Liquidation zu erzwingen, wenn Verluste ein bestimmtes Niveau erreichen.

Strategieprinzip

Die Strategie trifft Handelsentscheidungen hauptsächlich auf der Grundlage folgender Beurteilungsindikatoren:

  1. Preiskanal: Berechnen Sie die höchsten und niedrigsten Preise der letzten 30 Kerzen, um die Kanalkette zu bestimmen.

  2. Fast RSI: Berechnet den RSI-Wert der letzten 2 Kerzen. RSI unter 25 gilt als überverkauft und RSI über 75 als überkauft.

  3. Yin-Yang-Linie: Berechnen Sie die Entitätsgröße der letzten 2 Kerzen. Zwei rote Kerzen deuten auf ein bärisches Signal hin, während zwei grüne Kerzen ein bullisches Signal deuten.

  4. Stop-Loss-Bedingung: Zwangsliquidation, wenn die Verluste einen bestimmten Prozentsatz erreichen, um die Verluste zu begrenzen.

Mit den kombinierten Signalen aus Trend-, Momentum- und Überkauf-/Überverkaufsindicatoren kann diese kurzfristige Strategie Umkehrungen effektiv erkennen und zeitnahe Handelssignale erzeugen.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Verbesserte Signalgenauigkeit durch Kombination mehrerer Indikatoren, die hilft, falsche Signale zu filtern.

  2. Schnellere Reaktionen auf Wendepunkte durch den Einsatz von Fast RSI, der empfindlicher als normaler RSI ist.

  3. Hohe Zuverlässigkeit über verschiedene Produkte und Zeitrahmen hinweg, dank der strengen Optimierung der Parameter während der Backtests.

  4. Automatischer Stop-Loss-Mechanismus zur Kontrolle potenzieller Verluste über die Erwartungen hinaus.

Risikoanalyse

Einige Risiken dieser Strategie:

  1. Eine falsche Einstellung der Preiskanalparameter kann zu Schocks führen. Zu enge Kanäle können zu falschen Ausbrüchen führen.

  2. Einseitige Positionsaufbewahrungszeit kann bei starken Trends zu lang sein und die Prognosen übersteigen.

  3. Eine unsachgemäße Einstellung des Stop-Loss-Punkts kann die Verluste vergrößern.

Wir können diese Risiken durch Anpassung der Kanalparameter, Optimierung der Einstiegszeit, dynamische Anpassung der Stop-Loss-Punkte usw. mindern und reduzieren.

Optimierungsrichtlinien

Einige Richtungen, in denen die Strategie weiter optimiert werden kann:

  1. Einbeziehung von Algorithmen des maschinellen Lernens zur automatischen Optimierung der Parameter und Verbesserung der Anpassungsfähigkeit.

  2. Kombinieren Sie mehr Datenquellen wie Nachrichten, um Handelsentscheidungen und Signalgenauigkeit zu verbessern.

  3. Entwicklung dynamischer Positionsgrößenmechanismen, die auf Marktbedingungen basieren, um Risiken besser zu kontrollieren.

  4. Erweiterung der Anwendbarkeit auf den Futures-Arbitrage-Handel, um die absoluten Renditen weiter zu steigern.

Schlussfolgerung

Diese Strategie kombiniert verschiedene Techniken, darunter Preis-Breakout, Indikatorsignal, Stop-Loss usw. Sie hat eine gute Stabilität und Leistung in Backtests und Live-Handel gezeigt.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
usersi = input(true, defval = true, title = "Use RSI strategy")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period")
showcl = input(true, defval = true, title = "Price Channel")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
trend = low > center ? 1 : high < center ? -1 : trend[1]
col = showcl ? blue : na
col2 = showcl ? black : na
plot(lasthigh, color = col2, linewidth = 2)
plot(lastlow, color = col2, linewidth = 2)
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Signals
body = abs(close - open)
abody = sma(body, 10)
up1 = rbars and close > center and uset
dn1 = gbars and close < center and uset
up2 = close <= lastlow and close < open and usect
dn2 = close >= lasthigh and close > open and usect
up3 = fastrsi < 25 and close > center and usersi
dn3 = fastrsi > 75 and close < center and usersi
exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2)
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mehr