Двойная стратегия обратной торговли движущейся средней генерирует торговые сигналы путем расчета простых движущихся средних двух различных периодов - краткосрочных и долгосрочных. Она длится, когда короткий период движущейся средней пересекает выше длинного периода движущейся средней, и становится короткой, когда короткий период движущейся средней пересекает ниже длинного периода движущейся средней. Эта стратегия относится к категории стратегии следующего тренду.
Эта стратегия устанавливает две простые скользящие средние с различными длинами периода через входные параметры, с коротким периодом MA, называемым быстрой линией, и длинным периодом MA, называемым медленной линией. Быстрая линия быстрее реагирует на изменения цен и улавливает краткосрочные тенденции, в то время как медленная линия реагирует медленнее на изменения цен и фильтрует краткосрочный рыночный шум, улавливая основную тенденцию. Когда быстрая линия пересекает верхнюю линию медленного, это указывает на усиление восходящего тренда и занятие длинной позиции. Когда быстрая линия пересекает ниже медленной линии, это указывает на усиление нисходящего тренда и занятие короткой позиции.
В частности, стратегия рассчитывает два МА с использованием функции sma ((), присваивая результат xSMA (медленной линии) и быстрой линии. МА рассчитываются на основе цены закрытия. Когда цена закрытия пересекает xSMA, принимается длинная позиция. Когда цена закрытия пересекает xSMA, принимается короткая позиция. Стратегия также устанавливает лимит временного диапазона торговли, так что торговые сигналы генерируются только в указанном временном диапазоне.
В то же время стратегия графизирует соотношение цены и MA на полосках с помощью функции barcolor - полоски окрашены в зеленый цвет во время длинных позиций, красный цвет во время коротких позиций и синий цвет при плоской.
Риск может быть уменьшен путем корректировки параметров MA, оптимизации стратегии take profit/stop loss, устранения временных ограничений или установления более разумных периодов торговли.
Стратегия двойного движущегося среднего обратного трейдинга в целом является простой и практичной стратегией, следующей за трендом. Она в полной мере использует эффект сглаживания MAs для определения направления тренда и использует быстрые / медленные MAs для генерации торговых сигналов. Стратегия проста в реализации с четкой логикой, подходящей для понимания новичков. Однако она может генерировать чрезмерные ложные сигналы и проблемы с отставанием. Улучшения могут быть сделаны с помощью оптимизации параметров, добавления вспомогательных индикаторов и т. Д., Чтобы сделать стратегию более надежной. Если использовать правильно, эта стратегия может приносить стабильную прибыль и стоит всестороннего тестирования и оптимизации.
/*backtest start: 2023-09-15 00:00:00 end: 2023-10-15 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HPotter // Simple SMA strategy // // WARNING: // - For purpose educate only // - This script to change bars colors //@version=4 timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0 strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true) Resolution = input(title="Resolution", type=input.resolution, defval="D") Source = input(title="Source", type=input.source, defval=close) xSeries = security(syminfo.tickerid, Resolution, Source) Length = input(title="Length", type=input.integer, defval=14, minval=2) TriggerPrice = input(title="Trigger Price", type=input.source, defval=close) TakeProfit = input(50, title="Take Profit", step=0.01) StopLoss = input(20, title="Stop Loss", step=0.01) UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false) BarColors = input(title="Painting bars", type=input.bool, defval=true) ShowLine = input(title="Show Line", type=input.bool, defval=true) UseAlerts = input(title="Use Alerts", type=input.bool, defval=false) timeframe = input(title="Time Frame", defval="15") timerange = input(title="Time Range", defval="2300-0800") reverse = input(title="Trade Reverse", type=input.bool, defval=false) pos = 0 xSMA = sma(xSeries, Length) pos := iff(TriggerPrice > xSMA, 1, iff(TriggerPrice < xSMA, -1, nz(pos[1], 0))) nRes = ShowLine ? xSMA : na alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY') alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL') alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position') possig =iff(pos[1] != pos, iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)), 0) if (possig == 1 and timeinrange(timeframe, timerange)) strategy.entry("Long", strategy.long) if (possig == -1 and timeinrange(timeframe, timerange)) strategy.entry("Short", strategy.short) if (timeinrange(timeframe, timerange) == 0) strategy.close_all() if (UseTPSL) strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit") strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss") strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit") strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss") nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na barcolor(nColor) plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)