Stratégie de change basée sur les ondes fractales et SMMA

Auteur:ChaoZhang est là., Date: le 13 novembre 2023 à 16h39h41
Les étiquettes:

img

Résumé

Cette stratégie combine la théorie des ondes fractales et SMMA pour identifier les opportunités de tendance, et utilise un stop-loss et un stop-trailing appropriés pour contrôler les risques pour maximiser les bénéfices.

La logique de la stratégie

  • Utiliser SMMA pour calculer le prix moyen et filtrer le bruit du marché pour déterminer la direction de la tendance
  • Identifier les points d'inversion de tendance en utilisant le prix le plus élevé/le plus bas au cours de certaines périodes sous forme d'ondes fractales
  • Faire du short lorsque la vague de prix dépasse la SMMA, faire du long lorsque la vague dépasse la SMMA
  • Définir un arrêt-perte et un arrêt-traînage basés sur l'ATR pour contrôler les risques
  • Ne négociez que dans des sessions spécifiées, en évitant les fluctuations du week-end et de l'intraday

Analyse des avantages

  • La théorie des ondes fractales identifie avec précision les points d'inversion de tendance, combinés avec SMMA pour la direction de la tendance
  • L'arrêt des pertes et l'arrêt de suivi ATR limitent efficacement les pertes par transaction
  • Seule la négociation pendant les séances liquides évite les glissements et la volatilité excessifs
  • Suivre le SAR parabolique strictement à la sortie au signal d'inversion maximise le profit

Analyse des risques

  • Une vague fractal inexacte peut provoquer des coups de fouet dans les périodes non tendance
  • Le décalage SMMA peut manquer les points d'inversion de tendance idéaux
  • Stop loss trop serré peut être arrêté facilement, trop lâche peut entraîner une plus grande perte
  • Prise de bénéfices fixes incapable de s'adapter aux différentes conditions du marché

Les solutions:

  • Optimiser les paramètres pour la période fractale et la SMMA
  • Ajouter des stochastiques pour confirmer les signaux d'inversion
  • Optimiser dynamiquement le stop loss, l'objectif de profit

Directions d'optimisation

  • Optimiser la période fractale et les paramètres SMMA
  • Ajouter l'indicateur Stochastique pour filtrer les fausses ruptures
  • Expérience avec stop loss dynamique et prise de profit
  • Élargir le stop-loss pour éviter d'être arrêté
  • Optimiser les paramètres pour différents produits et sessions de négociation

Résumé

Cette stratégie intègre la théorie des ondes fractales et SMMA pour identifier les points de tendance et d'inversion du commerce, avec un stop-loss et une prise de profit appropriés.


/*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)


Plus de