Количественная торговая стратегия, основанная на скользящей средней


Дата создания: 2024-01-26 16:29:23 Последнее изменение: 2024-01-26 16:29:23
Копировать: 0 Количество просмотров: 555
1
Подписаться
1617
Подписчики

Количественная торговая стратегия, основанная на скользящей средней

Обзор

Стратегия пересечения скользящих средних - это количественная торговая стратегия, основанная на скользящих средних. Эта стратегия использует пересечение скользящих средних цен ценных бумаг в течение определенного периода времени для получения торговых сигналов и получения прибыли.

Стратегический принцип

Эта стратегия использует в основном скрещивание быстрых и медленных скользящих средних для определения ценовых тенденций и получения торговых сигналов. В частности, используются скользящие средние двух различных длин периодов, например, 10-дневная линия и 20-дневная линия.

Когда быстрый скользящий средний с нижнего направления прорывает медленный скользящий средний, считается, что движение переходит от понижения к подъему, создавая сигнал покупать. Когда быстрый скользящий средний с верхнего направления падает вниз от медленного скользящего среднего, считается, что движение переходит от подъема к снижению, создавая сигнал продажи.

Захватывая переломные моменты ценовых тенденций, стратегия позволяет покупать в хорошие времена и продавать в плохие, чтобы получить прибыль.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Концепция проста, легко понятна и реализуема
  2. Настраиваемые параметры, такие как периодичность скользящих средних
  3. Лучшая обратная связь, особенно в трендовых ситуациях
  4. Интеграция с логикой Stop Loss, управление рисками

Анализ рисков

Также существуют следующие риски:

  1. Неправильные сигналы и чрезмерная торговля при сборе
  2. Необходимо дебютировать параметры, различные комбинации параметров могут сильно отличаться в результате отбора
  3. Если не учитывать стоимость сделки и скольжение, то эффективность диска может быть слабее, чем отсчет.
  4. С другой стороны, существует задержка, которая может привести к упущению возможности быстрого изменения цены.

Эти риски можно снизить с помощью соответствующей оптимизации.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих направлениях:

  1. В сочетании с другими индикаторами фильтруют сигналы, например, количественный индикатор, индикатор вибрации и т. д., чтобы избежать ошибочных сделок при сводке
  2. Добавление адаптивных скользящих средних для динамического изменения циклических параметров и лучшего отслеживания цен
  3. Оптимизация циклических параметров для скользящих средних, поиск оптимального сочетания параметров
  4. Установление условий для повторного входа, чтобы избежать частых сделок
  5. Принимая во внимание фактические затраты на сделку и скольжение, скорректируйте точку остановки.

Благодаря этой оптимизации можно значительно повысить эффективность стратегии на рабочем диске.

Подвести итог

В целом, стратегия пересечения подвижных средних является простой в освоении и реализации количественной торговой стратегией. Она использует принцип пересечения средних цен, чтобы просто и интуитивно оценивать движение рынка и генерировать торговые сигналы.

Исходный код стратегии
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
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
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)
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)
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)
    
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)