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.
Solusi:
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)