Hall-Strategie für gleitenden Durchschnittfilter


Erstellungsdatum: 2024-01-04 15:16:34 zuletzt geändert: 2024-01-04 15:16:34
Kopie: 0 Klicks: 623
1
konzentrieren Sie sich auf
1621
Anhänger

Hall-Strategie für gleitenden Durchschnittfilter

Überblick

Die Strategie verwendet zwei Hall-Bewegungsmittel für die Erzeugung und Filterung von Handelssignalen. Der kurzfristige Hall-Bewegungsmittel wird für die Erzeugung von Signalen verwendet, während der langfristige Hall-Bewegungsmittel für die Filterung von Signalen verwendet wird, die nur dann ein Handelssignal erzeugen, wenn sich der kurzfristige Hall-Bewegungsmittel und der langfristige Hall-Bewegungsmittel synchron verändern.

Die Strategie verwendet die ATR-Anzeige zur gleichzeitigen Einstellung von Stop-Loss- und Stop-Off-Positionen. Bei jeder Positionseröffnung werden die Stop-Loss- und Stop-Off-Positionen für die aktuelle Position dynamisch auf der Grundlage des ATR-Wertes festgelegt.

Strategieprinzip

Der Short-Term Hall Moving Average wird verwendet, um kurzfristige Trends und Wendepunkte in den Preisen zu erfassen. Wenn sich die Richtung des Short-Term Hall Moving Averages ändert, wird die kurzfristige Tendenz der Preise geändert.

Der langfristige Hall-Moving-Average wird verwendet, um die Gesamtbewegung der Preise zu bestimmen. Wenn beispielsweise der langfristige Hall-Moving-Average in Richtung Aufwärts ist, zeigt dies, dass die Preise in einer allgemeinen Aufwärtsbewegung sind.

Ein Handelssignal wird nur erzeugt, wenn ein kurzfristiger Hall-Moving-Average umschwenkt und seine Umschwungrichtung mit der Richtung der Gesamtbewegung des langfristigen Hall-Moving-Averages übereinstimmt. Das heißt, man handelt nur mit diesem kurzfristigen Signal, wenn sich die kurzfristige Preisentwicklung gleichzeitig mit der Gesamtbewegung in die gleiche Richtung verändert. Dies filtert effektiv falsche Signale aus, die durch kurzfristigen Marktlärm verursacht werden.

Nach dem Aufbau der Position wird der Stop-Loss- und der Stop-Off-Bereich entsprechend der Größe des ATR-Indikators festgelegt. Der ATR-Indikator kann die Schwankungen und das Risiko des Marktes widerspiegeln. Die Stop-Loss-Position wird unterhalb der Preisniedrigpunkte und die Stop-Off-Position wird über den Preishochpunkten platziert und wird mit dem ATR-Wert verknüpft.

Analyse der Stärken

Die Strategie kombiniert kurzfristige Signale und langfristige Filterung, um die mittelfristigen Preistrends effektiv zu identifizieren und die Wendepunkte rechtzeitig zu erfassen. Im Vergleich zu Indikatoren wie einem einzigen Moving Average kann die Wahrscheinlichkeit verringert werden, vom Marktlärm getäuscht zu werden.

Durch die dynamische Anpassung der Stop-Loss-Position können angemessene Stop-Loss-Positionen entsprechend der Marktschwankungen eingestellt werden, um eine zu radikale Vermeidung zu vermeiden und das Risiko von Verlusten zu verringern, während gleichzeitig ein Gewinn garantiert wird.

Der Hall-Moving-Average bietet eine bessere Flexibilität und Genauigkeit bei der Beurteilung von Preisbewegungen und bietet eine bessere Tracking-Leistung als ein gewöhnlicher Moving-Average.

Risikoanalyse

Die Strategie stützt sich auf die Kreuzung von zwei Hall-Moving Averages in der kurz- und langfristigen Zeit als Signal, was zu einer falschen Eingabe führen kann, wenn eine falsche Kreuzung zwischen den beiden Moving Averages auftritt. In diesem Fall muss entschieden werden, ob das Signal basierend auf der langfristigen Marktstruktur gefiltert wird.

In einem wackligen Umfeld können die Preise innerhalb eines kleineren Handelsbereichs wackeln, was die Signalfehlerrate erhöht und die Wahrscheinlichkeit für unnötige Geschäfte erhöht. Unnötige Geschäfte können dadurch vermieden werden, dass die Handelssignalfilterbedingungen erweitert werden.

Die Stop-Loss-Stop-Position hängt von der ATR ab, und wenn die Marktschwankungen, die von der ATR reflektiert werden, ungenau sind, wird die Stop-Loss-Stop-Position auch außer Kraft gesetzt. In diesem Fall kann man in Kombination mit anderen Volatilitätsindikatoren die ATR-Werte korrigieren.

Optimierungsrichtung

Es kann in Kombination mit anderen kurzfristigen Indikatoren in Betracht gezogen werden, um die Signalentscheidung zu unterstützen, z. B. überkaufende und überverkaufte Indikatoren wie der RSI, um die Filterwirkung zu verbessern.

Die Filterlogik zwischen den lang- und kurzfristigen Hall-Bewegungsmittel kann erweitert oder optimiert werden, um die Filterregeln strenger zu machen und Fehlsignale zu vermeiden.

Die Auswirkungen verschiedener Parameter-Einstellungen auf die Strategie-Stabilität und die Ertragslage können untersucht werden. Verschiedene Kombinationen von Parametern wie beispielsweise Moving Average Parameter, ATR Parameter usw. können zu unterschiedlichen Handelsergebnissen führen.

Zusammenfassen

Diese Strategie verwendet die Methode der Aufnahme von Signalen mit dem kurzfristigen Hall-Wegemittel, die Filterung von Signalen mit dem langfristigen Hall-Wegemittel und die Einstellung von Stop-Loss-Stopps mit dem ATR-Indikator, um ein vollständiges mittelfristiges Trend-Tracking-Strategiesystem zu bilden. Die Strategie kann mittelfristige Preiswendepunkte effektiv erkennen und kurzfristige Marktgeräusche vermeiden.

Strategiequellcode
/*backtest
start: 2023-12-04 00:00:00
end: 2024-01-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull Filtered Strategy", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity, default_qty_value = 10, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0)

// Parameters for Hull Moving Averages
src = input(close, title="Source")
signal_period = input(50, title="Period of signal HMA")
filter_period = input(200, title="Period of filter HMA")

strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"])

// Set allowed trading directions
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)

// stop loss and take profit
sl_factor = input(2,title="Stop Loss Factor")
tp_factor = input(3,title="Take Profit Factor")
atr_period = input(14, title="ATR Period (SL/TP)")

// Testing Start dates
testStartYear = input(2010, "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(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


// -----------------------------------------------------------------------------
// Global variables
// -----------------------------------------------------------------------------
var float tp = na
var float sl = na
var float position = na


// -----------------------------------------------------------------------------
// Functions
// -----------------------------------------------------------------------------
testWindow() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


// -----------------------------------------------------------------------------
// The engine
// -----------------------------------------------------------------------------
hma_signal = hma(src, signal_period)
hma_filter = hma(src, filter_period)

// Used to determine exits and stop losses
atr_e = atr(atr_period)

// if hma_filter increases hma_trend is set to 1, if it decreases hma_trend is set to -1. If no trend is available, hma_trend is set to ß0
trend = hma_filter > hma_filter[1]  ?  1 : hma_filter < hma_filter[1] ? -1 : 0
signal = hma_signal > hma_signal[1] ? 1 : hma_signal  < hma_signal[1] ? -1 : 0


// -----------------------------------------------------------------------------
// signals
// -----------------------------------------------------------------------------
if signal[0] == 1 and signal[1] != 1 and trend == 1 and testWindow()
    sl := close - sl_factor*atr_e
    tp := close + tp_factor*atr_e
    strategy.entry("HMA_LNG", strategy.long)
    strategy.exit("LE", "HMA_LNG", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)
    
if signal[0] == -1 and signal[1] != -1 and trend == -1 and testWindow()
    sl := close + sl_factor*atr_e
    tp := close - tp_factor*atr_e
    strategy.entry("HMA_SHRT", strategy.short)
    strategy.exit("SE", "HMA_SHRT", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e)


if strategy.position_size != 0
    sl := sl[1]
    tp := tp[1]

// -----------------------------------------------------------------------------
// PLOT
// -----------------------------------------------------------------------------
hma_s = plot(hma_signal, title="SIGNAL", color = signal == 1 ? color.green : color.red)
hma_l = plot(hma_filter, title="TREND", color = trend == 1 ? color.green : color.red)

plot(tp, title="TAKE PROFIT", color= strategy.position_size != 0 ? color.blue: na, linewidth=1)  
plot(sl, title="STOP LOSS", color= strategy.position_size != 0 ? color.red: na, linewidth = 1)