フラクタル波とSMMAをベースにしたFX戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月13日 16:39:41
タグ:

img

概要

この戦略は,フラクタル波理論とSMMAを組み合わせてトレンド機会を特定し,利益最大化のためのリスクを制御するために適切なストップ・ロストとトレリング・ストップを使用する.特定の取引セッション中に特定の市場の変動を避けるためにポジションを入力するのみである.

戦略の論理

  • 平均価格を計算するためにSMMAを使用し,傾向の方向性について市場のノイズをフィルターします
  • 特定の期間の最高/最低価格をフラクタル波として用いてトレンド逆転点を特定する
  • 価格波がSMMAを突破するとショート,突破するとロング
  • リスク管理のために ATR をベースにストップ・ロストとトレリング・ストップを設定する
  • 特定のセッション内で取引するのみで,週末や日中変動は避ける.

利点分析

  • フラクタル波理論は,トレンド方向のSMMAと組み合わせて,トレンド逆転点を正確に識別します
  • ストップ・ロストとATR・トライリング・ストップは,取引毎の損失を効果的に制限する.
  • リキッドセッションでの取引のみで過度のスライプと変動を回避する
  • 逆転信号で厳格に出口するパラボリックSARをフォローすると利益を最大化します

リスク分析

  • 不正確なフラクタル波は,非トレンド期間にウィップソーを引き起こす可能性があります.
  • SMMA遅延は理想的なトレンド逆転点を逃す可能性があります.
  • ストップ損失があまりにも緊迫している場合,簡単にストップアウトされることがあります.あまりにも緩い場合は,より大きな損失が発生します.
  • 固定利益は 異なる市場状況に適応できない

解決策:

  • フラクタル周期とSMMAのパラメータを最適化
  • 逆転信号を確認するためにストキャスティックを追加
  • ストップ・ロスト,利益目標を動的に最適化

オプティマイゼーションの方向性

  • フラクタル周期とSMMAパラメータを最適化
  • 誤ったブレイクをフィルターするためにストキャスティック指標を追加します
  • ダイナミックストップ・ロストと利益採取の実験
  • ストップロスを拡大してストップアウトを避ける
  • 異なる製品と取引セッションのためのパラメータを最適化

概要

この戦略は,適切なストップ損失と利益採取を伴うトレンドと逆転点を特定するために,フラクタル波理論とSMMAを統合しています.パラメータを最適化し,より高い安定性と収益性のための確認指標を追加することによってさらに改善することができます.


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


もっと