Variabler Index Dynamischer gleitender Durchschnitt Mehrschichtige Strategie zur Verfolgung von Gewinntrends

BB ATR CMO TP MO
Erstellungsdatum: 2024-12-12 14:29:53 zuletzt geändert: 2024-12-12 14:29:53
Kopie: 1 Klicks: 82
1
konzentrieren Sie sich auf
1166
Anhänger

Variabler Index Dynamischer gleitender Durchschnitt Mehrschichtige Strategie zur Verfolgung von Gewinntrends

Überblick

Die Strategie ist ein Trend-Tracking-System, das die Variablen-Index-Dynamischen Durchschnittslinien (VIDYA) mit den Bollinger-Bändern (Bollinger Bands) kombiniert und gleichzeitig ein mehrschichtiges Stop-Mechanismus integriert. Anders als bei den herkömmlichen Trendstrategien verwendet die Strategie eine anpassungsfähigere Gewinnmethode, um offene Positionen durch einzigartige ATR-Basiswerte und Prozentsatzziele zu unterscheiden. Die Innovation liegt in der Verwendung einer dynamischen mehrschichtigen Stop-Methode, insbesondere der Verwendung einer radikaleren Prozentsatzmultiplikation für den Leerlaufhandel, die Flexibilität hilft, die Handelsverwaltung und die Gewinnverteilung entsprechend der Marktvolatilität und der Stärke der Trends zu optimieren.

Strategieprinzip

Der Kern der Strategie ist die Verwendung von zwei VIDA-Indikatoren, schnell und langsam, um die Preisentwicklung zu analysieren, wobei die Volatilität des Marktes berücksichtigt wird. Die Berechnungsformel des VIDA-Indikators lautet: Der Gleitfaktor ((α) = 2/ ((Zyklus+1)) Das ist die Summe der Zahlen, die wir in diesem Beispiel sehen. Dabei ist k = CANDER-Dynamik-Oszillator (MO) 100

Brin-Band als Fluktuationsfilter: Auffahrt = MA + (K * Standardabweichung) Unterstraße = MA - (K * Standarddifferenz)

Teilnahmebedingungen:

  • Mehrere Köpfe: Der Preis durchbricht die langsame VIDA und die schnelle VIDA tritt nach oben, während der Preis die Brin-Band durchbricht
  • Blank: Der Preis fällt unter dem langsamen VIDYA und der schnelle VIDYA geht nach unten, während der Preis unter dem Brin-Band abgleitet

Mehrschicht-Sperrmechanismen umfassen:

  1. ATR-basierter Stopp
  2. Prozentsatz-basierter Stopp
  3. Der Einsatz von Multiplikatoren erhöht die Stop-Out-Rate.

Strategische Vorteile

  1. Dynamische Anpassungsfähigkeit: Der Vidya-Indikator passt sich automatisch an Marktbewegungen an und ist empfindlicher als traditionelle Durchschnittslinien
  2. Gute Risikomanagement: Mehrere Stufen von Stop-Loss-Mechanismen, die Gewinne auf unterschiedlichen Preisniveaus sperren können
  3. Differenzierte Behandlung: Eine andere Strategie zur Verhinderung von Leerpositionen, die besser an die Merkmale des Marktes angepasst ist
  4. Schwankungsrate-Filterung: Die Verwendung von Brinband filtert falsche Durchbruchsignale
  5. Flexibilität der Parameter: Anpassung der Parameter an unterschiedliche Marktbedingungen

Strategisches Risiko

  1. Risiken eines Marktschocks: Falsche Signale auf der Börse
  2. Slippage-Effekte: mehrere Stopps können zu einer Abweichung der Ausführungspreise führen
  3. Parameterabhängigkeit: Parameter können in unterschiedlichen Marktumgebungen häufig angepasst werden
  4. Systemische Komplexität: Mehrschichtige Verhinderungsmechanismen erhöhen die Strategiekomplexität
  5. Geldmanagement-Spannungen: Mehrfache Stillstände können zu einer erhöhten Schwierigkeit bei der Verwaltung von Positionen führen

Richtung der Strategieoptimierung

  1. Dynamische Parameteranpassung: Anpassungsparametersysteme können entwickelt werden, die sich automatisch an die Marktbedingungen anpassen
  2. Marktumfelderkennung: Hinzufügung von Modulen zur Marktumfeldentscheidung, mit unterschiedlichen Parametern unter verschiedenen Marktbedingungen
  3. Optimierung von Stop Loss: Erhöhung der dynamischen Stop-Loss-Mechanismen und Verbesserung der Risikokontrolle
  4. Signalfilterung: Zusatzkennzahlen wie erhöhtes Verkehrsaufkommen, erhöhte Signalsicherheit
  5. Positionsmanagement: Entwicklung von intelligenten Positionsverteilungsalgorithmen

Zusammenfassen

Die Strategie erzeugt ein umfassendes Trend-Tracking-System durch die Kombination von dynamischer Adaptivität der VIDAY-Indikatoren und der Volatilitätsfilterfunktion der Brin-Band. Eine mehrschichtige Stop-Mechanismus und eine differenzierte Multi-Air-Behandlung ermöglichen eine gute Profitabilität und Risikokontrolle. Die Benutzer müssen jedoch auf die Veränderung der Marktumgebung achten, die Parameter anpassen und ein gutes System für die Kapitalverwaltung aufbauen.

Strategiequellcode
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading

// This strategy, "VIDYA ProTrend Multi-Tier Profit," is a trend-following system that utilizes fast and slow VIDYA indicators 
// to identify entry and exit points based on the direction and strength of the trend. 
// It incorporates Bollinger Bands as a volatility filter and features a multi-step take profit mechanism, 
// with adjustable ATR-based and percentage-based profit targets for both long and short positions. 
// The strategy allows for more aggressive take profit settings for short trades, making it adaptable to varying market conditions.

//@version=5
strategy("VIDYA ProTrend Multi-Tier Profit", overlay=true, precision=3, commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1, currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=10000)


// User-defined inputs
tradeDirection = input.string(title="Trading Direction", defval="Both", options=["Long", "Short", "Both"])
fastVidyaLength = input.int(10, title="Fast VIDYA Length", minval=1)
slowVidyaLength = input.int(30, title="Slow VIDYA Length", minval=1)
minSlopeThreshold = input.float(0.05, title="Minimum VIDYA Slope Threshold", step=0.01)

// Bollinger Bands Inputs
bbLength = input.int(20, title="Bollinger Bands Length", minval=1)
bbMultiplier = input.float(1.0, title="Bollinger Bands Multiplier", step=0.1)

// Multi-Step Take Profit Settings
group_tp = "Multi-Step Take Profit"
useMultiStepTP = input.bool(true, title="Enable Multi-Step Take Profit", group=group_tp)
tp_direction = input.string(title="Take Profit Direction", defval="Both", options=["Long", "Short", "Both"], group=group_tp)
atrLengthTP =  input.int(14, title="ATR Length", group=group_tp)


// ATR-based Take Profit Steps
atrMultiplierTP1 = input.float(2.618, title="ATR Multiplier for TP 1", group=group_tp)
atrMultiplierTP2 = input.float(5.0, title="ATR Multiplier for TP 2", group=group_tp)
atrMultiplierTP3 = input.float(10.0, title="ATR Multiplier for TP 3", group=group_tp)

// Short Position Multiplier for Take Profit Percentages
shortTPPercentMultiplier = input.float(1.5, title="Short TP Percent Multiplier", group=group_tp)

// Percentage-based Take Profit Steps (Long)
tp_level_percent1 = input.float(title="Take Profit Level 1 (%)", defval=3.0, group=group_tp)
tp_level_percent2 = input.float(title="Take Profit Level 2 (%)", defval=8.0, group=group_tp)
tp_level_percent3 = input.float(title="Take Profit Level 3 (%)", defval=17.0, group=group_tp)

// Percentage-based Take Profit Allocation (Long)
tp_percent1 = input.float(title="Take Profit Percent 1 (%)", defval=12.0, group=group_tp)
tp_percent2 = input.float(title="Take Profit Percent 2 (%)", defval=8.0, group=group_tp)
tp_percent3 = input.float(title="Take Profit Percent 3 (%)", defval=10.0, group=group_tp)

// ATR-based Take Profit Percent Allocation (Long)
tp_percentATR1 = input.float(title="ATR TP Percent 1 (%)", defval=10.0, group=group_tp)
tp_percentATR2 = input.float(title="ATR TP Percent 2 (%)", defval=10.0, group=group_tp)
tp_percentATR3 = input.float(title="ATR TP Percent 3 (%)", defval=10.0, group=group_tp)

// Short position percentage allocations using the multiplier
tp_percent1_short = tp_percent1 * shortTPPercentMultiplier
tp_percent2_short = tp_percent2 * shortTPPercentMultiplier
tp_percent3_short = tp_percent3 * shortTPPercentMultiplier

tp_percentATR1_short = tp_percentATR1 * shortTPPercentMultiplier
tp_percentATR2_short = tp_percentATR2 * shortTPPercentMultiplier
tp_percentATR3_short = tp_percentATR3 * shortTPPercentMultiplier

// VIDYA Calculation Function
calcVIDYA(src, length) =>
    alpha = 2 / (length + 1)
    momm = ta.change(src)
    m1 = momm >= 0.0 ? momm : 0.0
    m2 = momm < 0.0 ? -momm : 0.0
    sm1 = math.sum(m1, length)
    sm2 = math.sum(m2, length)
    chandeMO = nz(100 * (sm1 - sm2) / (sm1 + sm2))
    k = math.abs(chandeMO) / 100
    var float vidya = na
    vidya := na(vidya[1]) ? src : (alpha * k * src + (1 - alpha * k) * vidya[1])
    vidya

// Calculate VIDYAs
fastVIDYA = calcVIDYA(close, fastVidyaLength)
slowVIDYA = calcVIDYA(close, slowVidyaLength)

// Bollinger Bands Calculation
[bbUpper, bbBasis, bbLower] = ta.bb(close, bbLength, bbMultiplier)

// Manual Slope Calculation (price difference over time)
calcSlope(current, previous, length) =>
    (current - previous) / length

// Slope of fast and slow VIDYA (comparing current value with value 'length' bars ago)
fastSlope = calcSlope(fastVIDYA, fastVIDYA[fastVidyaLength], fastVidyaLength)
slowSlope = calcSlope(slowVIDYA, slowVIDYA[slowVidyaLength], slowVidyaLength)

// Conditions for long entry with Bollinger Bands filter
longCondition = close > slowVIDYA and fastVIDYA > slowSlope and fastSlope > minSlopeThreshold and slowSlope > 1/2*minSlopeThreshold and close > bbUpper

// Conditions for short entry with Bollinger Bands filter
shortCondition = close < slowVIDYA and fastSlope < slowSlope and fastSlope < -minSlopeThreshold and slowSlope < -1/2*minSlopeThreshold and close < bbLower

// Exit conditions (opposite crossovers or flat slopes)
exitLongCondition = fastSlope < -minSlopeThreshold and slowSlope < -1/2*minSlopeThreshold or shortCondition
exitShortCondition = fastSlope > minSlopeThreshold and slowSlope > 1/2*minSlopeThreshold or longCondition

// Entry and Exit logic with trading direction
if (longCondition) and (strategy.position_size == 0) and (tradeDirection == "Long" or tradeDirection == "Both")
    strategy.entry("Long", strategy.long)

if (exitLongCondition) and strategy.position_size > 0 and (tradeDirection == "Long" or tradeDirection == "Both")
    strategy.close("Long")

if (shortCondition) and (strategy.position_size == 0) and (tradeDirection == "Short" or tradeDirection == "Both")
    strategy.entry("Short", strategy.short)

if (exitShortCondition) and strategy.position_size < 0 and (tradeDirection == "Short" or tradeDirection == "Both")
    strategy.close("Short")


if useMultiStepTP
    if strategy.position_size > 0 and (tp_direction == "Long" or tp_direction == "Both")
        // ATR-based Take Profit (Long)
        tp_priceATR1_long = strategy.position_avg_price + atrMultiplierTP1 * ta.atr(atrLengthTP)
        tp_priceATR2_long = strategy.position_avg_price + atrMultiplierTP2 * ta.atr(atrLengthTP)
        tp_priceATR3_long = strategy.position_avg_price + atrMultiplierTP3 * ta.atr(atrLengthTP)
        
        // Percentage-based Take Profit (Long)
        tp_pricePercent1_long = strategy.position_avg_price * (1 + tp_level_percent1 / 100)
        tp_pricePercent2_long = strategy.position_avg_price * (1 + tp_level_percent2 / 100)
        tp_pricePercent3_long = strategy.position_avg_price * (1 + tp_level_percent3 / 100)

        // Execute ATR-based exits for Long
        strategy.exit("TP ATR 1 Long", from_entry="Long", qty_percent=tp_percentATR1, limit=tp_priceATR1_long)
        strategy.exit("TP ATR 2 Long", from_entry="Long", qty_percent=tp_percentATR2, limit=tp_priceATR2_long)
        strategy.exit("TP ATR 3 Long", from_entry="Long", qty_percent=tp_percentATR3, limit=tp_priceATR3_long)
        
        // Execute Percentage-based exits for Long
        strategy.exit("TP Percent 1 Long", from_entry="Long", qty_percent=tp_percent1, limit=tp_pricePercent1_long)
        strategy.exit("TP Percent 2 Long", from_entry="Long", qty_percent=tp_percent2, limit=tp_pricePercent2_long)
        strategy.exit("TP Percent 3 Long", from_entry="Long", qty_percent=tp_percent3, limit=tp_pricePercent3_long)

    if strategy.position_size < 0 and (tp_direction == "Short" or tp_direction == "Both")
        // ATR-based Take Profit (Short) - using the same ATR levels as long
        tp_priceATR1_short = strategy.position_avg_price - atrMultiplierTP1 * ta.atr(atrLengthTP)
        tp_priceATR2_short = strategy.position_avg_price - atrMultiplierTP2 * ta.atr(atrLengthTP)
        tp_priceATR3_short = strategy.position_avg_price - atrMultiplierTP3 * ta.atr(atrLengthTP)
        
        // Percentage-based Take Profit (Short) - using the same levels, but more aggressive percentages
        tp_pricePercent1_short = strategy.position_avg_price * (1 - tp_level_percent1 / 100)
        tp_pricePercent2_short = strategy.position_avg_price * (1 - tp_level_percent2 / 100)
        tp_pricePercent3_short = strategy.position_avg_price * (1 - tp_level_percent3 / 100)

        // Execute ATR-based exits for Short (using the percentage multiplier for short)
        strategy.exit("TP ATR 1 Short", from_entry="Short", qty_percent=tp_percentATR1_short, limit=tp_priceATR1_short)
        strategy.exit("TP ATR 2 Short", from_entry="Short", qty_percent=tp_percentATR2_short, limit=tp_priceATR2_short)
        strategy.exit("TP ATR 3 Short", from_entry="Short", qty_percent=tp_percentATR3_short, limit=tp_priceATR3_short)
        
        // Execute Percentage-based exits for Short
        strategy.exit("TP Percent 1 Short", from_entry="Short", qty_percent=tp_percent1_short, limit=tp_pricePercent1_short)
        strategy.exit("TP Percent 2 Short", from_entry="Short", qty_percent=tp_percent2_short, limit=tp_pricePercent2_short)
        strategy.exit("TP Percent 3 Short", from_entry="Short", qty_percent=tp_percent3_short, limit=tp_pricePercent3_short)
// Plot VIDYAs
plot(fastVIDYA, color=color.green, title="Fast VIDYA")
plot(slowVIDYA, color=color.red, title="Slow VIDYA")