Dual-Trend-Filtered-Chain-Gleitende-Average-Ratio-Strategie


Erstellungsdatum: 2023-12-28 17:37:14 zuletzt geändert: 2023-12-28 17:37:14
Kopie: 1 Klicks: 623
1
konzentrieren Sie sich auf
1623
Anhänger

Dual-Trend-Filtered-Chain-Gleitende-Average-Ratio-Strategie

Überblick

Diese Strategie basiert auf einer Trendverfolgungsstrategie, die auf einem doppelten Moving Average Ratio-Indikator basiert, kombiniert mit einem Brin-Filter und einem doppelten Trendfilter-Indikator, und verwendet eine Ketten-Ausgangsmethode. Die Strategie zielt darauf ab, mit dem Moving Average Ratio-Indikator die Richtung der mittleren und langen Linie zu identifizieren, die beste Eintrittsstelle zu wählen, wenn die Richtung der Tendenz klar ist, und eine Stop-Loss-Ausgangsmethode einzurichten, um Gewinne zu sichern und Verluste zu verringern.

Strategieprinzip

  1. Berechnen Sie die schnellen beweglichen Durchschnitte (die 10-Tage-Linie) und die langsamen beweglichen Durchschnitte (die 50-Tage-Linie) und berechnen Sie deren Verhältnis, das als Preis-Moving-Average-Verhältnis bezeichnet wird. Dieses Verhältnis kann die Veränderung der langen Trendlinie in den Preisen effektiv erkennen.
  2. Umrechnen Sie die Moving-Average-Rate in einen Prozentsatz, d.h. die relative Stärke der aktuellen Rate in der vergangenen Zeit. Dieser Prozentsatz wird als Oszillator definiert.
  3. Wenn der Oszillator über die eingestellte Kauf-Trench () 10) ein Kaufsignal erzeugt, erzeugt der Oszillator ein Verkaufsignal, wenn er die Verkaufstrench () 90 überschreitet, und folgt dem Trend.
  4. In Kombination mit dem Brin-Bandbreitenindikator wird das Handelssignal gefiltert, während der Brin-Band sich schrumpft.
  5. Mit einem doppelten Trendfilter erzeugt ein Kaufsignal nur, wenn der Preis sich im Aufwärtstrendkanal befindet, und ein Verkaufsignal nur, wenn der Preis sich im Abwärtstrendkanal befindet, um einen Rückschlag zu vermeiden.
  6. Es gibt eine Kette von Ausstiegsmechanismen, einschließlich Stop, Stop Loss und Kombinations-Ausstiegsmechanismen, bei denen mehrere Ausstiegsbedingungen vorgegeben werden können, wobei der Gewinn am meisten bevorzugt wird.

Strategische Vorteile

  1. Dual-Trend-Filtermechanismus, um die Richtung des Haupttrends zuverlässig zu beurteilen und Rückwärtsoperationen zu vermeiden.
  2. Der Moving Average Ratio ist ein besserer Indikator für Trendänderungen als ein einfacher Moving Average.
  3. Der Brin-Bandbreiten-Indikator ist sehr effektiv, um die niedrigen Schwankungen des Marktes zu bestimmen, in denen die Handelssignale zuverlässiger sind.
  4. Der Chain-Exit-Mechanismus stabilisiert den Gewinn und maximiert die Gesamtheit der Gewinne.

Risiken und Lösungen

  1. Wenn es keine offensichtlichen Trends in der Erschütterungssituation gibt, treten mehr Fehlsignale und Umkehrungen auf. Die Lösung besteht darin, die Brin-Bandbreitenüberschreitung zu kombinieren, die bei einer Verschärfung betrieben werden.
  2. Bei einer offensichtlichen Trendwende erzeugt der Moving Average eine Verzögerung und kann nicht sofort ein Umkehrsignal erkennen. Die Lösung besteht darin, die Moving Average-Zyklusparameter angemessen zu verkürzen.
  3. In der Praxis kann der Stop-Loss-Punkt in der Lage sein, einen Moment zu schlagen, wenn eine Lücke auftritt, was zu größeren Verlusten führt. Die Lösung ist, die Parameter für den Stop-Loss-Punkt angemessen zu lockern.

Richtung der Strategieoptimierung

  1. Parameteroptimierung. Es können Schritt-zu-Schritt-Tests mit Moving-Average-Perioden, Oszillator-Kauf- und Verkaufspunkten, Brin-Band-Parametern und Trendfilter-Parametern durchgeführt werden, um die optimale Kombination von Parametern zu finden.
  2. Einbeziehung anderer Indikatoren. Es kann in Betracht gezogen werden, andere Indikatoren zu verwenden, die eine Trendwende beurteilen, wie z. B. KD-Indikatoren, MACD-Indikatoren usw., um die Genauigkeit der Strategie zu verbessern.
  3. Maschinelles Lernen: Es ist möglich, historische Daten zu sammeln, Modelle mit Maschinelles Lernen zu trainieren, die Parameter dynamisch zu optimieren und die Parameter anpassungsfähig anzupassen.

Zusammenfassen

Die Strategie verwendet die Kombination aus zwei Bewegungsmittel-Ratio-Indikatoren und Brin-Band-Indikatoren, um die Richtung des mittleren langen Trends zu bestimmen, nach der Bestätigung des Trends die besten Einstiegspunkte zu finden, und eine Ketten-Exit-Mechanismus zur Gewinnschließung mit hoher Zuverlässigkeit und deutlicher Wirksamkeit. Die Strategie kann durch Parameteroptimierung, Hinzufügung anderer unterstützender Beurteilungsindikatoren und maschinellem Lernen weiter verbessert und die Gewinnquote erhöht werden.

Strategiequellcode
/*backtest
start: 2023-12-20 00:00:00
end: 2023-12-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Premium MA Ratio Strategy", overlay = true)

// Input: Adjustable parameters for Premium MA Ratio
fast_length = input(10, title = "Fast MA Length")
slow_length = input(50, title = "Slow MA Length")
oscillator_threshold_buy = input(10, title = "Oscillator Buy Threshold")
oscillator_threshold_sell = input(90, title = "Oscillator Sell Threshold")

// Input: Adjustable parameters for Bollinger Bands
bb_length = input(20, title = "Bollinger Bands Length")
bb_source = input(close, title = "Bollinger Bands Source")
bb_deviation = input(2.0, title = "Bollinger Bands Deviation")
bb_width_threshold = input(30, title = "BB Width Threshold")
use_bb_filter = input(true, title = "Use BB Width Filter?")

// Input: Adjustable parameters for Trend Filter
use_trend_filter = input(true, title = "Use Trend Filter?")
trend_filter_period_1 = input(50, title = "Trend Filter Period 1")
trend_filter_period_2 = input(200, title = "Trend Filter Period 2")
use_second_trend_filter = input(true, title = "Use Second Trend Filter?")

// Input: Adjustable parameters for Exit Strategies
use_exit_strategies = input(true, title = "Use Exit Strategies?")
use_take_profit = input(true, title = "Use Take Profit?")
take_profit_ticks = input(150, title = "Take Profit in Ticks")
use_stop_loss = input(true, title = "Use Stop Loss?")
stop_loss_ticks = input(100, title = "Stop Loss in Ticks")
use_combined_exit = input(true, title = "Use Combined Exit Strategy?")
combined_exit_ticks = input(50, title = "Combined Exit Ticks")

// Input: Adjustable parameters for Time Filter
use_time_filter = input(false, title = "Use Time Filter?")
start_hour = input(8, title = "Start Hour")
end_hour = input(16, title = "End Hour")

// Calculate moving averages
fast_ma = sma(close, fast_length)
slow_ma = sma(close, slow_length)

// Calculate the premium price moving average ratio
premium_ratio = fast_ma / slow_ma * 100

// Calculate the percentile rank of the premium ratio
percentile_rank(src, length) =>
    rank = 0.0
    for i = 1 to length
        if src > src[i]
            rank := rank + 1.0
    percentile = rank / length * 100

// Calculate the percentile rank for the premium ratio using slow_length periods
premium_ratio_percentile = percentile_rank(premium_ratio, slow_length)

// Calculate the oscillator based on the percentile rank
oscillator = premium_ratio_percentile

// Dynamic coloring for the oscillator line
oscillator_color = oscillator > 50 ? color.green : color.red

// Plot the oscillator on a separate subplot as a line
hline(50, "Midline", color = color.gray)
plot(oscillator, title = "Oscillator", color = oscillator_color, linewidth = 2)

// Highlight the overbought and oversold areas
bgcolor(oscillator > oscillator_threshold_sell ? color.red : na, transp = 80)
bgcolor(oscillator < oscillator_threshold_buy ? color.green : na, transp = 80)

// Plot horizontal lines for threshold levels
hline(oscillator_threshold_buy, "Buy Threshold", color = color.green)
hline(oscillator_threshold_sell, "Sell Threshold", color = color.red)

// Calculate Bollinger Bands width
bb_upper = sma(bb_source, bb_length) + bb_deviation * stdev(bb_source, bb_length)
bb_lower = sma(bb_source, bb_length) - bb_deviation * stdev(bb_source, bb_length)
bb_width = bb_upper - bb_lower

// Calculate the percentile rank of Bollinger Bands width
bb_width_percentile = percentile_rank(bb_width, bb_length)

// Plot the Bollinger Bands width percentile line
plot(bb_width_percentile, title = "BB Width Percentile", color = color.blue, linewidth = 2)

// Calculate the trend filters
trend_filter_1 = sma(close, trend_filter_period_1)
trend_filter_2 = sma(close, trend_filter_period_2)

// Strategy logic
longCondition = crossover(premium_ratio_percentile, oscillator_threshold_buy)
shortCondition = crossunder(premium_ratio_percentile, oscillator_threshold_sell)

// Apply Bollinger Bands width filter if enabled
if (use_bb_filter)
    longCondition := longCondition and bb_width_percentile < bb_width_threshold
    shortCondition := shortCondition and bb_width_percentile < bb_width_threshold

// Apply trend filters if enabled
if (use_trend_filter)
    longCondition := longCondition and (close > trend_filter_1)
    shortCondition := shortCondition and (close < trend_filter_1)

// Apply second trend filter if enabled
if (use_trend_filter and use_second_trend_filter)
    longCondition := longCondition and (close > trend_filter_2)
    shortCondition := shortCondition and (close < trend_filter_2)

// Apply time filter if enabled
if (use_time_filter)
    longCondition := longCondition and (hour >= start_hour and hour <= end_hour)
    shortCondition := shortCondition and (hour >= start_hour and hour <= end_hour)

// Generate trading signals with exit strategies
if (use_exit_strategies)
    strategy.entry("Buy", strategy.long, when = longCondition)
    strategy.entry("Sell", strategy.short, when = shortCondition)
    
    // Define unique exit names for each order
    buy_take_profit_exit = "Buy Take Profit"
    buy_stop_loss_exit = "Buy Stop Loss"
    sell_take_profit_exit = "Sell Take Profit"
    sell_stop_loss_exit = "Sell Stop Loss"
    combined_exit = "Combined Exit"
    
    // Exit conditions for take profit
    if (use_take_profit)
        strategy.exit(buy_take_profit_exit, from_entry = "Buy", profit = take_profit_ticks)
        strategy.exit(sell_take_profit_exit, from_entry = "Sell", profit = take_profit_ticks)
    
    // Exit conditions for stop loss
    if (use_stop_loss)
        strategy.exit(buy_stop_loss_exit, from_entry = "Buy", loss = stop_loss_ticks)
        strategy.exit(sell_stop_loss_exit, from_entry = "Sell", loss = stop_loss_ticks)
    
    // Combined exit strategy
    if (use_combined_exit)
        strategy.exit(combined_exit, from_entry = "Buy", loss = combined_exit_ticks, profit = combined_exit_ticks)