HMAとCCIのコンボトレンド 戦略をフォローする

作者: リン・ハーンチャオチャン開催日:2023年9月11日15時02分37秒
タグ:

この戦略は,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()

もっと