Strategi ini menggabungkan teori gelombang fraktal dan SMMA untuk mengenal pasti peluang trend, dan menggunakan stop loss dan trailing stop yang betul untuk mengawal risiko untuk memaksimumkan keuntungan.
Penyelesaian:
Strategi ini mengintegrasikan teori gelombang fraktal dan SMMA untuk mengenal pasti titik trend dan pembalikan perdagangan, dengan stop loss dan mengambil keuntungan yang betul. Ia boleh ditingkatkan lagi dengan mengoptimumkan parameter dan menambah penunjuk pengesahan untuk kestabilan dan keuntungan yang lebih tinggi.
/*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)