Торговая стратегия на основе системы скользящих средних


Дата создания: 2024-01-05 15:36:00 Последнее изменение: 2024-01-05 15:36:00
Копировать: 1 Количество просмотров: 683
1
Подписаться
1617
Подписчики

Торговая стратегия на основе системы скользящих средних

Обзор

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

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

Расчет скользящей средней

Эта стратегия использует следующие параметры для вычисления скользящей средней:

  • MA источник: среднее значение по умолчанию для OHLC ((OHCL4)
  • Тип MA: по умолчанию простая скользящая средняя ((SMA)
  • Продолжительность МА: 17 по умолчанию

На основе этих параметров будет вызвана функция getMAType () для вычисления цены закрытия SMA на 17 циклов.

Создание торгового сигнала

Затем сравниваем ценовую связь закрытия с этой скользящей средней:

  • Закрытие цены > Передвигающаяся средняя: сигнал длинной позиции
  • Закрытие цены < Передвигающаяся средняя: сигнал пустоты

При закрытии цены сверху вниз по перемещающейся средней образуются сигналы о пересечении; сверху вниз - сигналы о пересечении.

Исполнение сделки

В течение отсчетного цикла открываются позиции при наличии сигнала “сделай больше”, а при наличии сигнала “сделай меньше”.

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

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

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

С помощью параметров можно адаптироваться к различным периодам и различным породам.

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

Во-первых, эта стратегия основана на одном показателе, и, поскольку критерии являются более однозначными, это может привести к большему количеству ошибочных сигналов.

Кроме того, эта стратегия относится к системе отслеживания трендов, которая не может работать в условиях скоординированных и волатильных рынков.

Кроме того, нет установки стоп-стоп, существует риск увеличения убытков.

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

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

Вот некоторые моменты, которые помогут оптимизировать стратегию:

  1. Настройка параметров скользящих средних, оптимизация количества циклов. Например, изменение на 30 циклов или 50 циклов и т. Д.

  2. Попробуйте различные типы скользящих средних, такие как EMA, VIDYA и т. д. Они различаются по степени чувствительности к изменениям цены.

  3. Добавление комбинаций с другими индикаторами. Например, с MACD, чтобы определить, что является сильным или слабым. Или с RSI, чтобы уменьшить ошибочные сигналы.

  4. Увеличение механизма стоп-лосса. Установка фиксированного процента или мобильного стоп-лосса ATR. Контроль одноразового убытка.

  5. Увеличение механизма сдерживания. Установление целевого процента прибыли. Максимизация прибыли.

Эти оптимизации позволяют более стабильно использовать стратегию и избежать чрезмерного отмены.

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

В этой статье анализируется простая торговая стратегия, основанная на 17-циклической скользящей средней. Источник сигналов стратегии прост, прост в понимании и реализации, относится к типичным системам отслеживания тенденций.

Исходный код стратегии
/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    if maType == "vwma"
        res := vwma(sourceType, maLen)
    if maType == "rma"
        res := rma(sourceType, maLen)
    res
    
MA = getMAType(maType, source, length)

/////////////// Strategy ///////////////
long = close > MA
short = close < MA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)

/////////////// Plotting /////////////// 
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)