Strategie für das Trendverfolgungsnetz der variablen Positionen

Schriftsteller:ChaoZhang, Datum: 2024-03-29 15:23:23
Tags:EMARSIMACDATRADX

img

Übersicht

Diese Strategie ist eine trendfolgende variable Positionsrasterstrategie, die hauptsächlich EMA, RSI und Engulfing-Muster verwendet, um die Trendrichtung und den Eintrittszeitpunkt zu bestimmen. Die Strategie passt die Stop-Loss- und Take-Profit-Positionen anhand der Größe des Engulfing-Musters an und ermöglicht es den Benutzern, nur lang, nur kurz oder beides zu wählen. Darüber hinaus bietet die Strategie die Möglichkeit, MACD als Trendfilter zu verwenden.

Strategieprinzipien

Die Strategie verwendet eine 200-Perioden-EMA, um die allgemeine Trendrichtung zu bestimmen. Wenn der Preis über der EMA liegt, wird er als Aufwärtstrend betrachtet, und wenn er unterhalb der EMA liegt, wird er als Abwärtstrend betrachtet. Ein 9-Perioden-RSI wird verwendet, um die Dynamik zu messen, wobei ein RSI über 50 eine stärkere bullische Dynamik anzeigt und unter 50 eine stärkere bärische Dynamik anzeigt.

Die Stop-Loss- und Take-Profit-Positionen werden auf der Grundlage der Größe des Eindringen-Musters bestimmt. Der Stop-Loss wird auf das Doppelte der Größe des Eindringen-Körpers festgelegt, mit einem Mindest-Stop-Loss-Prozent von 0,3% vom Einstiegspreis, um häufige Stop-Outs aufgrund kleiner Stop-Loss-Distanzen zu vermeiden. Die Take-Profit-Position wird durch Multiplikation der Stop-Loss-Distanz mit einem vordefinierten Risiko-Rendite-Verhältnis festgelegt, um ein festes Risiko-Rendite-Verhältnis zu gewährleisten. Darüber hinaus bietet die Strategie die Möglichkeit, den MACD als Trendfilter zu verwenden, wobei ein stärkerer Bullish-Trend berücksichtigt wird, wenn die MACD-Linie über der Signallinie liegt und ein stärkerer Bearish-Trend, wenn die MACD-Linie unter der Signallinie liegt.

Strategische Vorteile

  1. Trendverfolgung: Die Strategie verwendet mehrere Indikatoren, um den Trend zu bestimmen und hilft, in den frühen Stadien einer Trendbildung einzutreten und Trendbewegungen zu erfassen.

  2. Dynamische Stop-Loss- und Take-Profit-Positionen: Durch die Anpassung der Stop-Loss- und Take-Profit-Positionen an die Größe des Gesamtmusters erweitert die Strategie den Take-Profit-Bereich, wenn der Trend stark ist, und verengt den Stop-Loss-Bereich, wenn der Trend schwach ist, wodurch ein flexibles Positionsmanagement ermöglicht wird.

  3. Benutzer können die Handelsrichtung, Risikopräferenzen und andere Parameter anpassen, um den unterschiedlichen Benutzerbedürfnissen gerecht zu werden.

  4. Die Option, den MACD als Trendfilter zu verwenden, bestätigt die Trendstärke weiter und verbessert die Eingangsgenauigkeit.

Strategische Risiken

  1. Falsche Trendbestimmung: Obwohl die Strategie mehrere Indikatoren zur Bestimmung des Trends verwendet, kann es immer noch Fälle geben, in denen der Trend falsch ermittelt wird, was zu Verlusten führt.

  2. Verengung der Bandbreite: Wenn der Körper des Eingangsmusters klein ist, sind die Stop-Loss- und Take-Profit-Distanzen sehr nahe, was zu einer Verschlechterung des Risiko-Rendite-Verhältnisses führt.

  3. Optimierung von Parametern: Die optimalen Parameter können in verschiedenen Instrumenten und Zeitrahmen erheblich variieren, so dass Benutzer kontinuierlich testen und optimieren müssen.

Strategieoptimierungsrichtlinien

  1. Trenderkennung: Es sollte in Erwägung gezogen werden, zusätzliche Trendbestätigungsinstrumente wie Bollinger-Bänder, Durchschnittsrichtungsindex (ADX) usw. einzuführen, um die Genauigkeit der Trenderkennung zu verbessern.

  2. Optimierung von Stop-Loss und Take-Profit: Es sollte in Betracht gezogen werden, volatilitätsbezogene Indikatoren wie ATR einzubeziehen, um die Stop-Loss- und Take-Profit-Distanzen dynamisch anzupassen und so das mit kleinen Intervallen verbundene Risiko zu reduzieren.

  3. Positionsgröße: Dynamische Anpassung der Positionsgröße basierend auf der Trendstärke, der Kontoprofitabilität usw., Erhöhung der Positionsgröße, wenn der Trend stark und konsequent profitabel ist, und Reduzierung der Kosten für häufigen Handel.

  4. Koordinierung zwischen mehreren Zeiträumen und mehreren Instrumenten: Validieren von Trendsignalen über Zeiträume und Instrumente hinweg, um die Genauigkeit der Trendbestimmung zu verbessern und gleichzeitig das Risiko eines einzigen Instruments oder Zeitrahmens zu diversifizieren.

Zusammenfassung

Diese Trend-folgende variable Positionsrasterstrategie funktioniert gut in Trendmärkten, indem sie mehrere Indikatoren verwendet, um die Trendrichtung und -stärke zu bestimmen, den Stop-Loss, den Take-Profit und die Positionsgröße dynamisch anpasst, um Trends zu erfassen und überschüssige Renditen zu erzielen. Die Performance der Strategie ist jedoch in unklaren oder häufig schwankenden Märkten durchschnittlich. Daher ist es bei der Verwendung dieser Strategie entscheidend, sich auf die Auswahl von Trending-Instrumenten und die Anpassung von Parametern bei Veränderung der Marktbedingungen zu konzentrieren. Darüber hinaus gibt es Raum für weitere Optimierung bei der Trendidentifizierung, Stop-Loss und Take-Profit-Platzierung, Positionsgröße und Koordination über mehrere Zeitrahmen und mehrere Instrumente.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © niosupetranmartinez
//@version=5
strategy("Trend Follower Scalping Strategy", overlay=true, process_orders_on_close = true)

// Inputs
emaLen = input(200, 'EMA Length')
rsiLen = input(9, 'RSI Length')
trendDirection = input.string("Both", 'Trend Direction', options=["Long Only", "Short Only", "Both"])
risk_reward_ratio = input(2, 'Risk Reward Ratio')
useMacdFilter = input.bool(true, "Use MACD Filter")
macdTimeframe = input("5", "MACD Timeframe")

// EMA and RSI
ema200 = ta.ema(close, emaLen)
customRsi = ta.rsi(close, rsiLen)

// MACD Filter
[macdLine, signalLine, _] = request.security(syminfo.tickerid, macdTimeframe, ta.macd(close, 12, 26, 9))


// Majority Body Candle Identification Function
isMajorityBodyCandle(candleOpen, candleClose, high, low) =>
    bodySize = math.abs(candleClose - candleOpen)
    fullSize = high - low
    bodySize / fullSize > 0.6

// Engulfing Patterns
isBullishEngulfing = close > open and close[1] < open[1] and (close - open) > (open[1] - close[1]) and isMajorityBodyCandle(open, close, high, low)
isBearishEngulfing = close < open and close[1] > open[1] and (open - close) > (close[1] - open[1]) and isMajorityBodyCandle(open, close, high, low)

// Entry Conditions with MACD Filter
longCondition = close > ema200 and customRsi > 50 and isBullishEngulfing and (not useMacdFilter or macdLine > signalLine)
shortCondition = close < ema200 and customRsi < 50 and isBearishEngulfing and (not useMacdFilter or macdLine < signalLine)

// Trade Execution
var float stopLossPrice = na
var float entryPrice = na

// Long Entry
if (longCondition and (trendDirection == "Long Only" or trendDirection == "Both"))
    entryPrice := close
    engulfingBodySize = math.abs(close - open)
    minimumStopLoss = entryPrice * 0.997
    calculatedStopLoss = entryPrice - (engulfingBodySize * 2)
    stopLossPrice := calculatedStopLoss < minimumStopLoss ? calculatedStopLoss : minimumStopLoss
    risk = entryPrice - stopLossPrice
    takeProfitPrice = entryPrice + (risk_reward_ratio * risk)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)

// Short Entry
if (shortCondition and (trendDirection == "Short Only" or trendDirection == "Both"))
    entryPrice := close
    engulfingBodySize = math.abs(open - close)
    minimumStopLoss = entryPrice * 1.003
    calculatedStopLoss = entryPrice + (engulfingBodySize * 2)
    stopLossPrice := calculatedStopLoss > minimumStopLoss ? calculatedStopLoss : minimumStopLoss
    risk = stopLossPrice - entryPrice
    takeProfitPrice = entryPrice - (risk_reward_ratio * risk)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)

// Plotting
plot(ema200, color=color.blue, linewidth=2, title="EMA 200")

Verwandt

Mehr