この戦略は,HMAとCCIを組み合わせてトレンドを特定し取引する.具体的には,HMAが上向きに突破してCCIが下帯を越えたとき,HMAが下向きに突破してCCIが上帯を越えたとき,HMAが上向きに突破してCCIが下帯を越えたとき,HMAが上向きに突破してCCIが上向きに突破したとき,HMAが上向きに突破したり,CCIが上限範囲に再入ったときに,HMAが上向きに突破してCCIが上向きに突破したとき,HMAが上向きに突破してCCIが上向きに突破したとき,HMAが上向きに突破してCCIが上向きに突破したとき,HMAが上向きに突破してCCIが上向きに突破したとき,HMAが上向きに突破すると,HMAが上向きに突破すると,HMAが上向きに突破すると,HMAが上向きに突破すると,HMAが上向きに突破すると,HMAが上向きに突破すると,H
この戦略の利点は,トレンド方向を決定するためにHMAを使用し,トレンド開始を確認するためにCCIを使用することで,効果的にウィップソーとプルバックエラーを削減することです.しかし,HMAとCCIの両方には遅れの問題があり,最適なエントリーポイントが欠けている可能性があります.また,CCIは複雑な市場状況で限られた能力を持っています.
概要すると,HMAとCCIのコンボトレンドフォロー戦略は,強いトレンド段階では立派な結果を生むことができます.しかし,ライブトレーディングでは,LIQRイベントからの損失を削減するためにストップ損失に注意が必要です.適切なパラメータ最適化によってのみ,この戦略は長期的に成功して適用できます.
/*backtest start: 2023-08-11 00:00:00 end: 2023-09-10 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("HMA+CCI strategy", overlay=true) src = input(close) hmaLen = input(21) cciLen = input(10) cciLower = input(-50) cciUpper = input(50) cciLowerExit = input(-100) cciUpperExit = input(100) hmaExit = input(false) cciExit = input(true) //rciLower = input(-60) //rciUpper = input(60) // Backtest fromyear = input(2017, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(21, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") leverage = input(100) term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)) //itvs = input(9, "short interval") //itvm = input(36, "middle interval") //itvl = input(52, "long interval") //src = input(close, "source") //upperband=input(title="High line[%]",defval=80,type=integer) //lowerband=input(title="Low line[%]",defval=-80,type=integer) ord(seq, idx, itv) => p = seq[idx] o = 1 for i = 0 to itv - 1 if p < seq[i] o := o + 1 o d(itv) => sum = 0.0 for i = 0 to itv - 1 sum := sum + pow((i + 1) - ord(src, i, itv), 2) sum rci(itv) => (1.0 - 6.0 * d(itv) / (itv * (itv * itv - 1.0))) * 100.0 hullma = wma(2*wma(src, hmaLen/2)-wma(src, hmaLen), round(sqrt(hmaLen))) cci = cci(close, cciLen) plot(hullma, color=hullma[1]>hullma?red:green, linewidth=4) longCondition = hullma[1] < hullma and crossover(cci, cciLower) //rci < -60 // crossover(cci, cciLower) shortCondition = hullma[1] > hullma and crossunder(cci, cciUpper) //rci > 60 exitLong1 = hmaExit ? hullma[1] > hullma : false exitLong2 = cciExit ? cci > cciUpperExit : false exitShort1 = hmaExit ? hullma[1] < hullma : false exitShort2 = cciExit ? cci < cciLowerExit : false if (longCondition and term) strategy.entry("Long", strategy.long ) if (shortCondition and term) strategy.entry("Short", strategy.short) if strategy.position_size > 0 and term if (exitLong1 or exitLong2) strategy.close_all() if strategy.position_size < 0 and term if (exitShort1 or exitShort2) strategy.close_all()