Эта стратегия оценивает ценовую тенденцию, рассчитывая перекресток двойных скользящих средних значений, и выпускает сигналы купли и продажи с определенными ограничениями параметров.
В основе этой стратегии лежит вычисление быстрых и медленных скользящих средних. Быстрый скользящий средний имеет период половины от общего периода скользящего среднего, который более чувствителен к изменениям цен; медленный скользящий средний имеет период общего периода скользящего среднего, который более плавно отражает изменения цен. Когда быстрый скользящий средний превышает медленный, считается, что цена растет; когда ниже, она падает.
Кроме того, стратегия устанавливает определенные параметры, чтобы избежать неправильных сделок.Например, порог решения должен гарантировать, что сигналы выпускаются только тогда, когда разница между двумя скользящими средними превышает определенный уровень; параметр доверия используется для фильтрации небольших колебаний цен.
Наконец, для контроля рисков используются стоп-прибыль и стоп-потеря. Если открытая прибыль меньше точки остановки потери или больше точки остановки прибыли, позиции будут закрыты.
Наибольшее преимущество этой стратегии заключается в сочетании суждения о ценовой тенденции и характеристиках волатильности с помощью показателей скользящих средних. Пересечение двойных скользящих средних является классическим эффективным техническим подходом к определению ценовых тенденций. С оптимизацией параметров он может точно улавливать тенденции. Параметр доверия может эффективно фильтровать неуравновешенные рынки и избегать частых неправильных сделок.
Кроме того, такие параметры, как порог принятия решения, стоп-прибыль и стоп-затрата, также могут значительно снизить торговые риски, избегая преследования максимумов и продажи минимумов.
Основной риск этой стратегии заключается в возможности ошибочных сигналов от двойных скользящих средних. Как быстрые, так и медленные МА являются взвешенными скользящими средними, которые медленно реагируют на внезапные события, тем самым упуская краткосрочные перевороты цен. В это время параметр доверия может обеспечить двойное подтверждение.
Кроме того, неправильное установление точек стоп-прибыли и стоп-потери также увеличивает риски. Слишком высокая цель прибыли и низкая точка стоп-потери могут привести к потерям, превышающим ожидания. Необходимо установить разумные параметры в соответствии с характеристиками различных торговых продуктов и волатильностью.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать периоды скользящих средних, устанавливать адаптивные скользящие средние для лучшего моделирования колебаний цен различных циклов;
Установка механизмов динамического отслеживания стоп-прибыли и стоп-пробега, вычисление волатильности в режиме реального времени на основе рыночных условий, чтобы точки остановки могли динамически меняться;
Увеличьте модели машинного обучения для оценки направлений ценового тренда, используйте больше исторических данных для определения текущих движений цен и уменьшите неправильные сигналы.
В целом, это классическая простая и эффективная стратегия торговли трендами. Она использует двойной скользящий средний крест для определения тенденций, устанавливает параметры для контроля рисков и имеет высокую конфигуративность для торговли несколькими продуктами. Если можно внедрить более интеллектуальные средства суждения, такие как машинное обучение, общий эффект может быть еще лучше для дальнейших исследований.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // Any timeFrame ok but good on 15 minute & 60 minute , Ichimoku + Daily-Candle_cross(DT) + HULL-MA_cross + MacD combination 420 special blend strategy("Trade Signal", shorttitle="Trade Alert", overlay=true ) keh=input(title="Double HullMA",defval=14, minval=1) dt = input(defval=0.0010, title="Decision Threshold (0.001)", type=float, step=0.0001) SL = input(defval=-10.00, title="Stop Loss in $", type=float, step=1) TP = input(defval=100.00, title="Target Point in $", type=float, step=1) ot=1 n2ma=2*wma(close,round(keh/2)) nma=wma(close,keh) diff=n2ma-nma sqn=round(sqrt(keh)) n2ma1=2*wma(close[1],round(keh/2)) nma1=wma(close[1],keh) diff1=n2ma1-nma1 sqn1=round(sqrt(keh)) n1=wma(diff,sqn) n2=wma(diff1,sqn) b=n1>n2?lime:red c=n1>n2?green:red d=n1>n2?red:green confidence=(request.security(syminfo.tickerid, '5', close[1])-request.security(syminfo.tickerid, '60', close[1]))/request.security(syminfo.tickerid, '60', close[1]) conversionPeriods = input(9, minval=1, title="Conversion Line Periods") basePeriods = input(26, minval=1, title="Base Line Periods") laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods") displacement = input(26, minval=1, title="Displacement") donchian(len) => avg(lowest(len), highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) LS=close, offset = -displacement MACD_Length = input(9) MACD_fastLength = input(12) MACD_slowLength = input(26) MACD = ema(close, MACD_fastLength) - ema(close, MACD_slowLength) aMACD = ema(MACD, MACD_Length) closelong = n1<n2 and close<n2 and confidence<dt or strategy.openprofit<SL or strategy.openprofit>TP if (closelong) strategy.close("Long") closeshort = n1>n2 and close>n2 and confidence>dt or strategy.openprofit<SL or strategy.openprofit>TP if (closeshort) strategy.close("Short") longCondition = n1>n2 and strategy.opentrades<ot and confidence>dt and close>n2 and leadLine1>leadLine2 and open<LS and MACD>aMACD if (longCondition) strategy.entry("Long",strategy.long) shortCondition = n1<n2 and strategy.opentrades<ot and confidence<dt and close<n2 and leadLine1<leadLine2 and open>LS and MACD<aMACD if (shortCondition) strategy.entry("Short",strategy.short) //alerts alertcondition(closelong, title='Close Buy Position', message='Close Buy Position') alertcondition(closeshort, title='Close Short Position', message='Close Short Position') alertcondition(longCondition, title='Buy Signal', message='Buy Signal Alert') alertcondition(shortCondition, title='Sell Signal', message='Sell Signal Alert') //a1=plot(n1,color=c) //a2=plot(n2,color=c)plot(cross(n1, n2) ? n1 : na, style = circles, color=b, linewidth = 4) //plot(cross(n1, n2) ? n1 : na, style = line, color=d, linewidth = 4) plot(conversionLine, color=#0496ff, title="Conversion Line") plot(baseLine, color=#991515, title="Base Line") plot(close, offset = -displacement, color=#459915, title="Lagging Span") p1=plot (leadLine1, offset = displacement, color=green, title="Lead 1") p2=plot (leadLine2, offset = displacement, color=red, title="Lead 2") fill(p1, p2, color = leadLine1 > leadLine2 ? green : red) // remove the "//" from before the plot script if want to see the indicators on chart