Эта стратегия объединяет HMA и CCI для выявления и торговли тенденциями. В частности, она длинна, когда HMA переходит вверх, а CCI пересекает нижнюю полосу, и коротка, когда HMA переходит вниз, а CCI пересекает верхнюю полосу. Выходы происходят, когда HMA переходит обратно в противоположном направлении, или CCI вновь входит в пороговый диапазон.
Преимущество этой стратегии заключается в использовании HMA для определения направления тренда, а 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()