Strategi FX Berdasarkan Gelombang Fraktal dan SMMA

Penulis:ChaoZhang, Tanggal: 2023-11-13 16:39:41
Tag:

img

Gambaran umum

Strategi ini menggabungkan teori gelombang fraktal dan SMMA untuk mengidentifikasi peluang tren, dan menggunakan stop loss dan trailing stop yang tepat untuk mengendalikan risiko untuk memaksimalkan keuntungan.

Logika Strategi

  • Menggunakan SMMA untuk menghitung harga rata-rata dan menyaring kebisingan pasar untuk arah tren
  • Mengidentifikasi titik pembalikan tren menggunakan harga tertinggi/terendah dalam periode tertentu sebagai gelombang fraktal
  • Pergi pendek ketika gelombang harga melanggar SMMA, pergi panjang ketika melanggar di bawah
  • Atur stop loss dan trailing stop berdasarkan ATR untuk mengendalikan risiko
  • Hanya berdagang dalam sesi tertentu, menghindari pergeseran akhir pekan dan intraday

Analisis Keuntungan

  • Teori gelombang fraktal secara akurat mengidentifikasi titik pembalikan tren, dikombinasikan dengan SMMA untuk arah tren
  • Stop loss dan ATR trailing stop secara efektif membatasi kerugian per perdagangan
  • Hanya perdagangan selama sesi likuid yang menghindari slippage dan volatilitas yang berlebihan
  • Mengikuti SAR parabola ketat untuk keluar pada sinyal pembalikan memaksimalkan keuntungan

Analisis Risiko

  • Gelombang fraktal yang tidak akurat dapat menyebabkan whipsaws pada periode non-trending
  • SMMA lag mungkin melewatkan titik pembalikan tren ideal
  • Stop loss terlalu ketat dapat berhenti keluar dengan mudah, terlalu longgar dapat menimbulkan kerugian yang lebih besar
  • Keuntungan tetap tidak dapat disesuaikan dengan kondisi pasar yang berbeda

Solusi:

  • Mengoptimalkan parameter untuk periode fraktal dan SMMA
  • Tambahkan Stochastics untuk mengkonfirmasi sinyal pembalikan
  • Dinamis mengoptimalkan stop loss, target keuntungan

Arahan Optimasi

  • Mengoptimalkan periode fraktal dan parameter SMMA
  • Tambahkan indikator Stochastics untuk menyaring false breakout
  • Eksperimen dengan stop loss dan profit taking dinamis
  • Memperluas stop loss untuk menghindari berhenti keluar
  • Mengoptimalkan parameter untuk produk dan sesi perdagangan yang berbeda

Ringkasan

Strategi ini mengintegrasikan teori gelombang fraktal dan SMMA untuk mengidentifikasi titik tren dan pembalikan perdagangan, dengan stop loss dan profit taking yang tepat.


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


Lebih banyak