Bidirektionale Druck-quantitative Handelsstrategie


Erstellungsdatum: 2023-11-02 13:56:23 zuletzt geändert: 2023-11-02 13:56:23
Kopie: 0 Klicks: 373
1
konzentrieren Sie sich auf
1166
Anhänger

Bidirektionale Druck-quantitative Handelsstrategie

Überblick

Die Bindungsstrength-Trading-Strategie ist eine Trend-Tracking-Strategie, die eine Kombination von Randomisierungsindikatoren und Transaktionsindikatoren verwendet. Die Strategie verwendet hauptsächlich die Randomisierungsindikatoren K und D sowie die Transaktionsindikatoren, um Kauf- und Verkaufssignale zu erzeugen, unterstützt durch die Gleichungslinie Gold- und Todesforken, um zusätzliche Signale zu erzeugen.

Strategieprinzip

Kaufsignale

Die wichtigsten Auslöser für ein Kaufsignal sind:

  1. K- und D-Linien brechen gleichzeitig die Überverkaufszone (z. B. 20) und erzeugen eine Obergrenze, wobei K- und D-Linien gleichzeitig im Aufwärtstrend sind

  2. Transaktionsvolumen höher als ein bestimmter Schwellenwert (z. B. 1,4 mal der durchschnittliche Transaktionsvolumen)

  3. Der Schlusskurs ist höher als der Eröffnungskurs (weiße K-Linie)

Zusätzliche Kaufsignale könnten auch von:

  1. Mittellinien-Goldfalke: Durchschneidung der langsameren EMA-Linie auf der schnellen EMA-Linie, wobei beide Mittellinien gleichzeitig steigen

  2. Die K- und D-Linie treten gleichzeitig von den Tiefstpositionen in die Überverkaufszone ein (z. B. von unter 20 in den Bereich 20 bis 80 steigen)

Verkauft das Signal.

Die wichtigsten Auslöser für die Verkaufssignale sind:

  1. K- und D-Linien sind gleichzeitig in den Überverkaufszonen (z. B. 80)

  2. Durchschnittsschieber: Schnelle EMA-Linie unterhalb der langsamen EMA-Linie

  3. Die K-Linie durchquert die D-Linie und sowohl die K-Linie als auch die D-Linie sind im Abwärtstrend

Stoppsignal

Setzen Sie einen bestimmten Prozentsatz des Kaufpreises (z. B. 6%) als Stop-Loss-Linie, wenn der Preis unter dieser Linie fällt, wird ein Stop-Loss-Sell ausgelöst.

Strategische Stärkenanalyse

  • Vermeiden Sie Falschsignale mit doppelten Zufallsindikatoren
  • Synthetische Verkehrslärmfilter, um eine Trendsicherheit zu gewährleisten
  • Mehrfache Überschneidung von Signalen zur Verbesserung der Genauigkeit
  • Die Durchschnittslinie hilft, die Richtung der großen Trends zu bestimmen
  • Setzen Sie eine Stop-Loss-Strategie, um Risiken zu kontrollieren

Vorteil 1: Doppel-Zufallsindikator vermeidet Falschsignale

Ein einzelner Zufallsindikator kann eine große Anzahl von Falschsignalen erzeugen. Die Strategie verwendet eine Kombination aus zwei Zufallsindikatoren, die K- und D-Linien (die bewegliche Durchschnittslinie der K-Linien) verwenden, um Falschsignale effektiv zu filtern und die Zuverlässigkeit des Signals zu gewährleisten.

Vorteil 2: Filterung von Verkehrsgeräuschen, um eine Trendsicherheit sicherzustellen

Die Aufnahme der Transaktionsmenge als Hilfskriterium, die Transaktionsmenge muss über ein bestimmtes Niveau, um zu filtern niedrige Mengen von nicht-trendigen Kauf- und Verkaufspunkte, um das Risiko von abgesicherten Positionen zu reduzieren.

Vorteil 3: Mehrfache Überlagerung von Signalen, bessere Genauigkeit

Die Strategie kombiniert mehrere Kauf- und Verkaufssignale aus Zufalls-, Volumen- und Durchschnittsindikatoren, die gleichzeitig ausgelöst werden müssen, um ein echtes Handelssignal zu erzeugen. Die Überlagerung mehrerer Indikatoren kann die Zuverlässigkeit des Signals erhöhen.

Vorteil 4: Die Durchschnittslinie hilft, die Richtung der großen Trends zu bestimmen

Hinzufügen von Durchschnittswert-Beurteilungsregeln, z. B. nur dann ein Kaufsignal zu berücksichtigen, wenn der Durchschnittswert gleichzeitig steigt. Dies verhindert einen Gegenkauf oder einen Anstieg und beurteilt den Trend aus einem großen Zeitrahmen.

Vorteil 5: Setzen Sie eine Stop-Loss-Strategie, um Risiken zu kontrollieren

Die Strategie beinhaltet eine Stop-Loss-Signal-Design, die automatisch einen Verlust verursacht, wenn der Preis bei einem bestimmten Prozentsatz des Kauf- und Kaufpreises fällt. Dies ermöglicht eine effektive Kontrolle des maximalen Verlusts eines einzelnen Handels.

Risikoanalyse

  • Die Strategie-Parameter müssen sorgfältig deaktiviert werden, und eine falsche Einstellung kann zu einer schlechten Leistung führen
  • Die Stop-Loss-Einstellungen berücksichtigen das Sprungrisiko.
  • Liquiditätsrisiken bei Handelsarten
  • Beobachten Sie die Bit-Risiken bei mehrzeitigen Indikatoren

Risiko 1: Die Strategieparameter müssen sorgfältig deaktiviert werden

Die Strategie beinhaltet mehrere Parameter, wie z. B. die Parameter für die Zufallsmessung, die Parameter für die Durchschnittslinie und die Parameter für die Übergangsmenge. Diese Parameter müssen für verschiedene Sorten optimiert werden, und eine falsche Einstellung kann zu schlechten Ergebnissen führen.

Risiko 2: Die Einstellung des Stop-Loss-Punktes berücksichtigt das Risiko des Sprungens

Bei der Einstellung eines Stop-Loss-Punktes ist die Möglichkeit eines Preissprungs zu berücksichtigen. Wenn der Stop-Loss-Punkt zu nahe am Kaufpreis liegt, kann der Sprung zu einem unnötigen Stop führen.

Risiko 3: Liquiditätsrisiken bei den Handelsarten

Bei weniger flüssigen Sorten können Überflussregeln übermäßige Signale filtern. In diesem Fall müssen die Überflussbedingungen reduziert werden.

Risiko 4: Bit-Sequenz-Risiko bei mehrzeitigen Indikatoren

Es kann ein Problem mit der Unvereinbarkeit der Positionsfolge zwischen verschiedenen Periodenindikatoren auftreten, was die Genauigkeit des Signals beeinträchtigen kann. Es ist erforderlich, die Übereinstimmung der Positionsfolge des Signals zu überprüfen.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierung von Parametern zur Steigerung der Stabilität

  2. Hinzufügen von Parametern für die dynamische Anpassung von Methoden des maschinellen Lernens

  3. Optimierung von Stop-Loss-Strategien zur Verringerung der Stop-Loss-Rate

  4. Mehr Filterbedingungen, weniger Transaktionen

  5. Versuchen Sie, die Rentabilität durch die Ein- oder Ein-Stop-Strategie zu verbessern

Richtung 1: Optimierung von Parametern zur Steigerung der Stabilität

Die wichtigsten Parameter können durch systematischere Methoden wie genetische Algorithmen optimiert werden, um sicherzustellen, dass die Parameter in verschiedenen Marktzyklen eine stabile Leistung erzielen.

Richtung 2: Hinzufügen von dynamischen Anpassungsparametern für die Methode des maschinellen Lernens

Modelle können trainiert werden, um die Marktlage in Echtzeit zu bewerten und die Strategieparameter entsprechend anzupassen, um eine dynamische Optimierung der Parameter zu erreichen.

Richtung 3: Optimierung von Stop-Loss-Strategien und Verringerung der Stop-Loss-Rate

Es kann eine bessere Stop-Loss-Strategie erforscht werden, um unnötige Stop-Losses so gering wie möglich zu halten und den Gewinnraum zu erhöhen, während die Risiken kontrolliert werden.

Richtung 4: Mehr Filterbedingungen, weniger Transaktionen

Stärkung der Filterbedingungen, um die Anzahl der Transaktionen zu reduzieren und die Auswirkungen der Transaktionskosten zu verringern, um die Rendite pro Transaktion zu erhöhen.

Richtung 5: Versuchen Sie eine einmalige oder einmalige Strategie zur Erhöhung der Rendite

Sie können entweder eine einzelne Strategie oder eine mobile Stop-Off-Strategie entwerfen, um die Gewinne so weit wie möglich zu maximieren, während Sie den Verlust stoppen.

Zusammenfassen

Die Strategie berücksichtigt mehrere Aspekte wie Trendbeurteilung, Risikokontrolle und Handelsfrequenz. Der Kernvorteil besteht darin, dass die doppelten Zufallsindikatoren die Trendbeurteilung der Umsatzindikatoren und die Risikokontrolle der Stop-Loss-Mechanismen kombinieren. Die Stop-Loss-Mechanismen können als nächstes optimiert werden, um die Parameterstabilität zu verbessern, die Parameter dynamisch anzupassen und die Stop-Loss-Rate zu senken, so dass die Strategie in mehreren Marktumgebungen einen stabilen Ertrag erzielen kann.

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

//@version=3
// SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke]
// Script created by Sergio Waldoke (BETA VERSION v0.5, fine tuning PENDING)
// Stochastic process is the main source of signals, reinforced on buying by Volume. Also by Golden Cross.
// Selling is determined by K and D entering overselling zone or EMA's Death Cross signal, the first occurring,
// and some other signals combined.
// Buy Long when you see a long buy arrow.
// Sell when you see a close arrow.
// This is a version to be tuned and improved, but already showing excelent results after tune some parameters
// according to the kind of market.
// Strategy ready for doing backtests.

// SVE SYSTEM DESIGN:
// Buy Signal Trigger:
// - Both Stoch <= 20 crossing up and both growing and green candle and Vol/sma vol >= 1.40 Avg Vol
//   or
// - Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and
//   both prior Stoch crossing up
//   or
//   [OPTIONAL]: (Bad for BTC 2018, excelent for 2017)
// - Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle

// Exit position:
// - Both Stoch <= 20 and Both Stoch were > 20 during position
//   or
// - CrossingUnder(Fast EMA, Medium EMA)
//   or   [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H)
// - CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line

//calc_on_every_tick=true,
//calc_on_order_fills=true,   (affects historical calculation, triggers in middle of the bar, may be better for automatic orders)
strategy("SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke]", shorttitle="SW SVE", overlay=true, max_bars_back=5000,
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency="USD",
         commission_type=strategy.commission.percent, commission_value=0.25)

//Strategy Parameters
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2018, title = "From Year", minval = 2009, maxval = 2200)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 2030, title = "To Year", minval = 2009, maxval = 2200)

//Indicator Parameters
//Original defaults for 4HS: 14, 3, 80, 20,   14, 23, 40,   20, 40,   3:
stoch_k = input(title="Stoch K",  defval=14, minval=1)
stoch_d = input(title="Stoch D",  defval=3, minval=1)
over_buying  = input(title="Stoch Overbuying Zone",  defval=80, minval=0, maxval=100)
over_selling = input(title="Stoch Overselling Zone",  defval=20, minval=0, maxval=100)

fast_ema_periods = input(title="Fast EMA (Death Cross)",  defval=14, minval=1, maxval=600)
slow_ema_periods = input(title="Slow EMA (Death Cross)",  defval=23, minval=1, maxval=600)
trend_ema_periods = input(title="Slowest EMA (Trend Test)",  defval=40, minval=1, maxval=600)

volume_periods = input(title="Volume Periods",  defval=20, minval=1, maxval=600)
volume_factor = input(title="Min Volume/Media Increase (%)",  defval=80, minval=-100) / 100 + 1

threshold_sl_perc = input(title="[Sell Trigger] Stop Loss Threshold %", defval=6.0, type=float, minval=0, maxval=100)

//before_buy = input(title="# Growing Before Buy",  defval=2, minval=1)
//before_sell = input(title="# Decreasing Before Sell",  defval=1, minval=1)
//stepsignal = input(title="Show White Steps", type=bool, defval=true)
//steps_base = input(title="White Steps Base",  defval=242, minval=0)

//Signals
fast_ema = ema(close, fast_ema_periods)
slow_ema = ema(close, slow_ema_periods)
trend_ema = ema(close, trend_ema_periods)
k = stoch(close, high, low, stoch_k)
d = sma(k, stoch_d)
vol_ma = sma(volume, volume_periods)

//REVIEW CONSTANT 1.75:
in_middle_zone(a) => a > over_selling * 1.75 and a < over_buying
growing(a) => a > a[1] 

was_in_middle_zone = k == d
was_in_middle_zone := was_in_middle_zone[1] or in_middle_zone(k) and in_middle_zone(d)

//Buy Signal Trigger:
//- Both Stoch <= 20 crossing up and both growing and 
//  green candle and Vol/sma vol >= 1.40 Avg Vol
buy = k <= over_selling and d <= over_selling and crossover(k, d) and growing(k) and growing(d) and
      close > open and volume/vol_ma >= volume_factor

//or
//- Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and
//  both prior Stoch crossing up
buy := buy or (growing(k) and growing(d) and volume/vol_ma >= volume_factor and close > open and
              crossover(k[1], d[1]) )
//Worse:
//              (crossover(k[1], d[1]) or (crossover(k, d) and k[1] <= over_selling and d[1] <= over_selling) ) )

//or
//  [OPTIONAL]: (Bad for BTC 2018, excelent for 2017)
//- Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle
buy := buy or (crossover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and close > open)


//Debug:
//d1 = close > open  ? 400 : 0
//plot(d1+5200, color=white, linewidth = 3, style = stepline)

//Exit position:
//- Both Stoch <= 20 and Both Stoch were > 20 during position
sell = k <= over_selling and d <= over_selling and was_in_middle_zone

//  or
//- CrossingUnder(Fast EMA, Medium EMA)
sell := sell or crossunder(fast_ema, slow_ema)

//  or  [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H)
//- CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line
sell := sell or (crossunder(k, d) and k[1] >= over_buying and d[1] >= over_buying and
                 not growing(k) and not growing(d) and k <= over_buying)

color = buy ? green : red

bought_price = close
bought_price := nz(bought_price[1])

already_bought = false
already_bought := nz(already_bought[1], false)

//Date Ranges
buy  := buy and  not already_bought


//d1 = buy ? 400 : 0
//plot(d1+6500, color=white, linewidth = 3, style = stepline)

was_in_middle_zone := (not buy and was_in_middle_zone) or (in_middle_zone(k) and in_middle_zone(d))

already_bought   := already_bought[1] or buy
bought_price := buy ? close * (1 - threshold_sl_perc/100) : bought_price[1]
trigger_SL = close < bought_price[0]
sell := sell or trigger_SL

sell := sell and  
                 already_bought and not buy and (was_in_middle_zone or trigger_SL)

//plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)
                 
already_bought   := already_bought[0] and not sell
bought_price := sell ? 0 : bought_price[0]

//plot((was_in_middle_zone?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)

was_in_middle_zone := not sell and was_in_middle_zone

//Plot signals
plot(fast_ema, title="Fast EMA", color=red, linewidth = 4)
plot(slow_ema, title="Slow EMA", color=blue, linewidth = 4)
plot(trend_ema, title="Trend EMA", color=yellow, linewidth = 4)

//Stop Loss
plot(bought_price, color=gray, linewidth=2, style=cross, join=true, title="Stop Loss")

//Y = stepsignal ? lowest(40) : na
//Y = steps_base
//plot(mysignal+Y, title="Steps", color=white, linewidth = 3, style = stepline)
//Unit steps - for debugging
//plot(mysteps+Y, title="Steps2", color=yellow, linewidth = 3, style = stepline)

//Bought or not - for debugging
//plot((already_bought?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)
//plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)

plotshape(buy, title="Buy arrows", style=shape.arrowup, location=location.belowbar, color=color, text="Buy", textcolor=color, size=size.huge, transp=30)
plotshape(sell, title="Sell arrows", style=shape.arrowdown, location=location.abovebar, color=color, text="Sell", textcolor=color, size=size.huge, transp=30)

//if n>2000
strategy.entry("buy", strategy.long, when=buy)
strategy.close_all(when=sell)

//plot(strategy.equity, title="Equity", color=white, linewidth = 4, style = line)

//AlertS trigger
//msg = "[SW Magic Signals EMA] BUY/SELL Signal has been triggered." + "(" + tostring(fastema) + ", " + tostring(slowema) + ") on " + tickerid + ", " + period + "."
msg = "SW SVE BUY/SELL Signal has been triggered. (#, #) on EXCH:PAIR, period: #."

alertcondition(buy or sell, title="SW SVE (BUY/SELL SIGNAL)", message=msg)
alertcondition(buy, title="SW SVE (BUY SIGNAL)", message=msg)
alertcondition(sell, title="SW SVE (SELL SIGNAL)", message=msg)