Die Dual Hull Moving Average Trading Strategie ist eine quantitative Handelsstrategie, die den Dual Hull Moving Average als Handelssignale verwendet.
Der Kern der Dual Hull Moving Average Trading Strategie ist der Dual Hull Moving Average (DHMA). Der DHMA besteht aus drei Linien: mittlere, obere und untere Schienen, die verschiedene durchschnittliche Preiswerte darstellen.
Mittlere Schiene: Modus ((modus) Schalter, src, len)
Oberbahn: Rumpf[1]
Untere Schiene: HULP[2]
Hier kann die Funktion Mode zwischen verschiedenen Hull MA-Varianten wie HMA, EHMA oder THMA wählen. Src steht für die Preisquelle und len ist der Periodenparameter.
Die Strategie verwendet die Mittelschiene der DHMA als Referenz, um das Preisverhältnis zu bestimmen und Handelssignale zu erzeugen:
Mit anderen Worten, wenn der Schlusskurs der aktuellen Bar über dem mittleren Wert liegt, geht man auf die nächste Bar lang; wenn der Schlusskurs darunter liegt, schließt man die Longposition auf der nächsten Bar.
Die Handelsstrategie der bewegten Durchschnittswerte mit doppeltem Rumpf hat folgende Vorteile:
Verwendet einen Dreifachbandmechanismus anstelle einer einzelnen gleitenden Durchschnittslinie für bessere Unterstützungs-/Widerstandseffekte und Trendverfolgung.
Im Vergleich zu den üblichen marktwirtschaftlich handelnden Märkten haben die gleitenden Durchschnittswerte von Hull weniger Verzögerungen und reagieren besser auf Preisänderungen.
Er verwendet traditionelle technische Analysetechniken für ein leichtes Verständnis und eignet sich für den Algo-Handel.
Die Logik ist einfach und klar, einfach umzusetzen und passt zum Hochfrequenz-Algorithmushandel.
Anpassbare Hull-MA-Typen und -parameter für die Optimierung verschiedener Produkte und Zeitrahmen.
Obwohl die Strategie viele Vorzüge aufweist, birgt sie auch einige Risiken:
Bei unruhigen Seitenmärkten kann es zu mehr Whipsaws kommen.
Die Strategie folgt hauptsächlich Trends und ist in flachen Perioden weniger wirksam.
Die Hull-MAs haben immer noch eine gewisse Verzögerung, vor allem für kurze Zeiträume.
Sie müssen die Größe der Positionen und die Handelsfrequenz verwalten.
Hier sind einige wichtige Aspekte, die für die Strategie zu optimieren sind:
Optimierung der Hull-MA-Typen und -parameter zur Feinabstimmung der Mittelschienenempfindlichkeit für verschiedene Produkte.
Sie können auch einen Stop-Loss-Mechanismus wie Trailing-Stop oder Incremental-Stop-Loss hinzufügen, um den Betrag eines einzelnen Handelsverlusts zu kontrollieren.
Kombination mit anderen Indikatoren zur Bestimmung der Trendrichtung und -stärke und Vermeidung von Fallen, z. B. MACD, KD usw.
Hinzufügen von Aktivierungsbedingungen für die Strategie, die auf der Anzahl der Trades oder der Gewinnquote basieren, um die Anzahl der Zyklusschließungen zu kontrollieren und die Ausgänge zu reduzieren.
Verwenden Sie höhere TFs, um den allgemeinen Trend zu bestimmen, um Lärm zu vermeiden.
Bestätigen Sie Eintrittslogik mit Kerzenmustern, um die Eintrittssicherheit zu verbessern.
Zusammenfassend ist die Dual Hull Moving Average Trading Strategie ein quantitativer Ansatz, der den schnell reagierenden Trend nach Hull Moving Averages nutzt, um Handelssignale zu konstruieren. Im Vergleich zu herkömmlichen MAs hat sie eine schnellere Reaktion und bessere Tracking-Fähigkeiten. Die Strategielogik ist einfach und klar, leicht zu automatisieren für den Algorithmushandel. Es gibt immer noch Risiken von Geräuschen und Trendfolgenbeschränkungen. Techniken wie Parameter-Tuning, Stop-Loss und die Kombination anderer Indikatoren können seine praktische Leistung verbessern.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico //Converted to Strategy by DashTrader strategy("Hull Suite Strategy", 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) ////////////////////////////////////////////////////////////////////// // Testing Start dates testStartYear = input(2016, "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() => time >= testPeriodStart and time <= testPeriodStop ? true : false // Component Code Stop ////////////////////////////////////////////////////////////////////// //INPUT HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close) src = input(close, title="Source") modeSwitch = input("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(40, title="Band Transparency",step=5) //FUNCTIONS //HMA HMA(_src, _length) => wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length))) //EHMA EHMA(_src, _length) => ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length))) //THMA THMA(_src, _length) => wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - 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("long", strategy.long) if HULL[0] < HULL[2] and testPeriod() strategy.close("long")