Momentum-Squeeze Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-14 14:04:24
Tags:

img

Übersicht

Die Hauptidee dieser Strategie besteht darin, den Momentumindikator von Lazy Bear und den MFI-Indikator von Crypto Face zu kombinieren, um bei Aufwärtstrend lang zu gehen und bei Abwärtstrend kurz zu gehen, um eine quantitative Handelsstrategie zu realisieren, die den Markttrends folgt.

Strategie Logik

  1. Verwenden Sie den Momentumsindikator BlueWave von Lazy Bear, der die lineare Regression des Schlusskurses gegenüber dem 20-Tage-Höchst-Höchst-, Tief- und Schlussgehalt berechnet, um die Trendrichtung zu bestimmen.

  2. Verwenden Sie den verbesserten MFI-Indikator von Crypto Face, der die Summe der Preisänderung und des Volumens in den letzten 58 Tagen berechnet, um den Geldfluss zu bestimmen.

  3. Wenn BlueWave über 0 liegt und MFI größer als 0, wird ein Kaufsignal generiert, um eine Long-Position zu eröffnen; wenn BlueWave unter 0 liegt und MFI kleiner als 0, wird ein Verkaufssignal generiert, um eine Short-Position zu eröffnen.

  4. Setzen Sie Stop-Loss- und Take-Profit-Bedingungen, um dem Markttrend für den Gewinn zu folgen und gleichzeitig Risiken zu kontrollieren.

Vorteile

  1. Durch die Kombination zweier Indikatoren kann die Marktentwicklungsrichtung genauer ermittelt werden.

  2. Die glatte Kurve von BlueWave vermeidet Verzerrungen durch Ausreißer und macht das Trendbeurteilen zuverlässiger.

  3. MFI können den Geldfluss bestimmen und Verluste durch falsche Ausbrüche vermeiden.

  4. Die Strategie hat nur wenige Parameter und ist einfach umzusetzen und zu betreiben.

  5. Flexible Stop-Loss- und Take-Profit-Einstellungen helfen, Handelsrisiken zu kontrollieren.

  6. Handelssitzungen können so eingestellt werden, dass während bestimmter Marktzeiten eine ungewöhnliche Volatilität vermieden wird.

Risiken

  1. Ein anhaltender Abwärtstrend kann zu aufeinanderfolgenden Shortpositionen und Verlusten führen.

  2. Falsche Signale können dazu führen, dass Sie nach dem Eintritt in Positionen gefangen werden.

  3. Ein übergroßer Stop-Loss kann Verluste verstärken.

  4. Eine hohe Volatilität kann häufig Stopp-Loss-Punkte erreichen.

  5. Eine unsachgemäße Optimierung der Parameter kann zu einer schlechten Strategieleistung führen.

  6. Zu häufige Handelssignale können die Transaktionskosten und den Schlupf erhöhen.

Erweiterung

  1. Optimierung der Parameter von BlueWave und MFI für stabilere und zuverlässigere Signale.

  2. Trendindikatoren enthalten, um anhaltende Kurzverluste zu vermeiden.

  3. Dynamische Anpassung der Stop-Loss-/Take-Profit-Verhältnisse, um die Wahrscheinlichkeit zu senken, dass sie eingeschlossen werden.

  4. Verfeinern Sie die Einstiegsbedingungen, um falsche Signale zu reduzieren.

  5. Überlegen Sie, wie Sie die Position anpassen, um nicht zu verfolgen und zu fallen.

  6. Kombination mit Modellen für maschinelles Lernen für genauere Ein- und Ausstiegspunkte.

Schlussfolgerung

Diese Strategie kombiniert BlueWave und MFI-Indikatoren, um die Trendrichtung zu bestimmen, indem sie auf Aufwärtstrends lang und auf Abwärtstrends kurz geht und Markttrends effektiv für Gewinne folgt. Allerdings bestehen Risiken in Parameter-Einstellungen, Stop-Loss/Take-Profit, anhaltenden Abwärtstrends usw., die eine weitere Optimierung der Parameter-Tuning, Stop-Loss-Mechanismen, Filterbedingungen usw. erfordern, um die Strategieleistung und Robustheit zu verbessern. Insgesamt ist die Strategie intuitiv und funktioniert gut für langfristige Trendverfolgung, aber Verluste können entstehen, wenn Sie in den unterschiedlichen Märkten gefangen sind.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021
strategy(title="Crypto Squeeze Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))


//// Indicator Inputs
// Lazy Bear's Momentum Indicator
BlueWave = linreg(close - avg(avg(highest(high, 20), lowest(low, 20)), sma(close, 20)), 20, 0)

// Replicated version of Crypto Face's MFI Indicator
mfiUpper = sum(volume * (change(hlc3) <= 0 ? 0 : hlc3), 58)
mfiLower = sum(volume * (change(hlc3) >= 0 ? 0 : hlc3), 58)
_mfiRsi(mfiUpper, mfiLower) =>
    if mfiLower == 0
        100
    if mfiUpper == 0
        0
	100.0 - (100.0 / (1.0 + mfiUpper / mfiLower))

mf = _mfiRsi(mfiUpper, mfiLower)
mfi = (mf - 50) * 3


//// Strategy
// Creating Long and Short Strategy
buy_signal = crossover(BlueWave, 0) and mfi > 0 
sell_signal = crossunder(BlueWave, 0) and mfi < 0 

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")

// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")


Mehr