FX-Strategie auf Basis von Fraktalwellen und SMMA

Schriftsteller:ChaoZhang, Datum: 2023-11-13 16:39:41
Tags:

img

Übersicht

Diese Strategie kombiniert Fraktalwellentheorie und SMMA, um Trendchancen zu identifizieren, und verwendet einen ordnungsgemäßen Stop-Loss und Trailing-Stop, um Risiken für die Gewinnmaximierung zu kontrollieren.

Strategie Logik

  • Verwenden Sie SMMA zur Berechnung des durchschnittlichen Preises und filtern Sie Marktlärm für die Trendrichtung
  • Identifizieren Sie Trendumkehrpunkte unter Verwendung des höchsten/niedrigsten Preises innerhalb bestimmter Zeiträume als Fraktalwellen
  • Kurz gehen, wenn die Preiswelle über SMMA bricht, lang gehen, wenn sie unterhalb bricht
  • Einrichtung von Stop-Loss und Trailing-Stop auf Basis von ATR zur Risikokontrolle
  • Handel nur innerhalb bestimmter Sitzungen, Vermeidung von Wochenend- und Intraday-Schwankungen

Analyse der Vorteile

  • Die Fraktalwellentheorie identifiziert genau Trendumkehrpunkte, kombiniert mit SMMA für die Trendrichtung
  • Stop-Loss und ATR-Trailing-Stop begrenzen effektiv den Verlust pro Handel
  • Nur der Handel während liquider Sitzungen verhindert übermäßige Verschiebungen und Volatilität
  • Nach dem parabolischen SAR streng zu verlassen bei Umkehrsignal maximiert den Gewinn

Risikoanalyse

  • Ungenaue Fraktalwelle kann in nicht-trendigen Perioden zu Whipsaws führen
  • Die SMMA-Verzögerung kann die idealen Trendumkehrpunkte verfehlen
  • Ein zu starker Stoppverlust kann leicht gestoppt werden, ein zu lockerer Stoppverlust kann zu größeren Verlusten führen
  • Festgewinne, die nicht an unterschiedliche Marktbedingungen angepasst werden können

Lösungen:

  • Optimierung der Parameter für Fraktalperiode und SMMA
  • Hinzufügen von Stochastics zur Bestätigung von Umkehrsignalen
  • Dynamische Optimierung von Stop-Loss, Gewinnziel

Optimierungsrichtlinien

  • Optimierung der Fraktalperiode und der SMMA-Parameter
  • Hinzufügen von Stochastics-Indikatoren zum Filtern falscher Ausbrüche
  • Experiment mit dynamischem Stop-Loss und Gewinngewinn
  • Vergrößern Sie den Stop-Loss, um nicht ausgeschaltet zu werden
  • Optimierung der Parameter für verschiedene Produkte und Handelssitzungen

Zusammenfassung

Diese Strategie integriert die Fraktalwellentheorie und SMMA, um Trend- und Umkehrpunkte für den Handel zu identifizieren, mit angemessenem Stop-Loss und Gewinngewinn.


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

//@version=4
strategy("FX Strategy Based on Fractals and SMMA", overlay=true)

// パラメータ
SMMAPeriod1 = input(30, title="SMMA Period")
StopLoss1 = input(7, title="Stop Loss %")
TrailingStopCoef1 = input(2.7, title="Trailing Stop Coefficient")
fractalPeriod = input(5, title="Fractal Period")

// SMMAの計算関数
smma(src, length) =>
    var float smma = na
    if na(smma[1])
        smma := sma(src, length)
    else
        smma := (smma[1] * (length - 1) + src) / length
    smma

// フラクタルの近似
highFractal = high[2] > high[1] and high[2] > high[3] and high[2] > high[4] and high[2] > high
lowFractal = low[2] < low[1] and low[2] < low[3] and low[2] < low[4] and low[2] < low

// エントリー条件
longEntrySignal = lowFractal and close[1] < smma(close, SMMAPeriod1)
shortEntrySignal = highFractal and close[1] > smma(close, SMMAPeriod1)

// エントリー実行
if (longEntrySignal)
    strategy.entry("Long", strategy.long)

if (shortEntrySignal)
    strategy.entry("Short", strategy.short)

// トレーリングストップの計算
atrValue = atr(10)
longStopPrice = close - atrValue * TrailingStopCoef1
shortStopPrice = close + atrValue * TrailingStopCoef1

// トレーリングストップの設定
strategy.exit("Exit Long", "Long", stop=longStopPrice)
strategy.exit("Exit Short", "Short", stop=shortStopPrice)

// バックテスト期間の設定(MetaTraderのバックテストと同じ期間)
startYear = 2007
startMonth = 05
startDay = 01
endYear = 2022
endMonth = 04
endDay = 01

startDate = timestamp(startYear, startMonth, startDay, 00, 00)
endDate = timestamp(endYear, endMonth, endDay, 23, 59)

// バックテスト期間内でのみトレードを実行
if (time >= startDate and time <= endDate)
    if (longEntrySignal)
        strategy.entry("Long", strategy.long)
    if (shortEntrySignal)
        strategy.entry("Short", strategy.short)


Mehr