Обзор: Эта стратегия основана на классической торговой стратегии кроссовера скользящих средних. Она использует двойные скользящие средние, включая простую скользящую среднюю (SMA), экспоненциальную скользящую среднюю (EMA), переменную взвешенную скользящую среднюю (VWMA) и ходовую скользящую среднюю (HMA).
Принцип: Основной логикой стратегии является двойной кроссовер скользящей средней. При расчете двух скользящих средних с различными параметрами, сигнал покупки генерируется, когда быстрый скользящий средний пересекает медленный, и сигнал продажи генерируется, когда быстрый скользящий средний пересекает медленный.
Анализ преимуществ: основными преимуществами двойной стратегии перекрестного движущегося среднего являются простота и простота работы. Только с одним сигналом можно получить наиболее базовое суждение о тренде без слишком большого количества параметров и корректировок, что очень подходит для начинающих трейдеров. Кроме того, различные типы движущихся средних тестируются для оптимизации различных комбинаций.
Анализ рисков: основной риск этой стратегии заключается в том, что обычные стратегии перекрестного перемещения скользящих средних будут иметь много ложных сигналов, что приведет к множеству небольших прибылей и плоских позиций, что повлияет на общую доходность. Кроме того, фиксированные настройки длины скользящих средних быстро и медленно могут потерпеть неудачу в определенных циклах.
Направления оптимизации: 1) Испытать различные периоды, чтобы определить оптимальное сочетание пересечений скользящих средних; 2) рассмотреть возможность введения второго набора параметров скользящих средних и индикаторов RSI, чтобы помочь в суждении, чтобы уменьшить ложные сигналы; 3) Ввести суждение о состоянии, основанное на постепенном изменении индикатора MA, вместо простого перекрестка, чтобы получить более надежное перекрестное суждение.
Резюме: Эта стратегия использует основу традиционной стратегии перекрестного перемещения скользящих средних для тестирования двойных скользящих средних для поиска оптимальной комбинации периодов скользящих средних. В то же время она добавляет суждения о стоп-лос на основе ROC и цены скользящей средней. В целом это простая и простая в использовании стратегия двойных скользящих средних, которая соответствует количественной логике торговли. Кроме того, богатые идеи оптимизации также обеспечивают пространство для дальнейшего развития этой стратегии.
/*backtest start: 2023-11-27 00:00:00 end: 2023-12-27 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(5, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) f_hma(_src, _length)=> _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length))) price1 = if (type1 == "SMA") sma(price, ma1) else if (type1 == "EMA") ema(price, ma1) else if (type1 == "VWMA") vwma(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else if (type2 == "VWMA") vwma(price, ma2) else f_hma(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) // and time>timestamp(2018,6,1,9,30) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) // and time>timestamp(2018,6,1,9,30) strategy.entry("Short", strategy.short) lookback1 = input(1, "Lookback 1") roc1 = roc(price1, lookback1) ma1up = false ma1down = false ma2up = false ma2down = false ma1up := nz(ma1up[1]) ma1down := nz(ma1down[1]) ma2up := nz(ma2up[1]) ma2down := nz(ma2down[1]) trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01 if crossover(roc1, trendStrength1) ma1up := true ma1down := false if crossunder(roc1, -trendStrength1) ma1up := false ma1down := true shortexitCondition = ma1up and ma1down[1] if (shortexitCondition) strategy.close("Short") longexitCondition = ma1down and ma1up[1] if (longexitCondition) strategy.close("Long")