Эта стратегия генерирует торговые сигналы путем вычисления различных типов скользящих средних (простых скользящих средних SMA, экспоненциальных скользящих средних EMA, Hull Moving Average HMA и взвешенных скользящих средних VWMA) и обнаружения точек перекрестного пересечения между ними, чтобы определить тенденцию рынка и следовать за ней.
Основная идея этой стратегии заключается в том, чтобы судить о тенденции рынка путем сравнения двух скользящих средних. В частности, она позволяет настроить две МА с различными типами и длинами с помощью входных параметров. Первая МА имеет более длительный период для представления основной тенденции, в то время как вторая МА имеет более короткий период для текущей краткосрочной тенденции.
Когда краткосрочный MA пересекает долгосрочный MA снизу, это сигнализирует о том, что краткосрочная тенденция укрепляется, и рынок вступает в восходящую тенденцию. Таким образом, в этой точке перекрестка генерируется сигнал покупки. Напротив, когда краткосрочный MA пересекает ниже долгосрочного MA, это означает, что краткосрочная тенденция ослабевает, и рынок переходит вниз. Соответственно, тогда генерируется сигнал продажи.
Поскольку эта стратегия позволяет выявлять такие перекрестки, она следует тенденции рынка к торговле.
Решения:
Эта стратегия основана на классической идее использования кроссоверов MA для обнаружения основных трендов. Благодаря гибким комбинациям MA, ее легко реализовать и подходит для алгоритмической автоматизации торговли. В целом она достаточно практична, но оставляет место для улучшений, таких как настройка параметров, дополнительные фильтры и т. Д., Чтобы еще больше улучшить производительность.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 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", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, 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) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short)