Стратегия торговли движущейся средней системой

Автор:Чао Чжан, Дата: 2024-01-05 15:36:00
Тэги:

img

Обзор

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

Логика стратегии

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

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

  • MA Source: Default to average of OHLC (OHLC4) (Источник MA: Неполноценность к среднему показателю OHLC (OHLC4))
  • Тип МА: дефолт до простой скользящей средней (SMA)
  • Длина MA: по умолчанию до 17

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

Производство торговых сигналов

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

  • Закрыть > Движущаяся средняя: длинный сигнал
  • Закрыть < скользящая средняя: короткий сигнал

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

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

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

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

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

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

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

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

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

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

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

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

Руководство по оптимизации

Вот несколько идей для оптимизации стратегии:

  1. Корректировка параметров скользящей средней, оптимизация цифр периодов, например, изменение на 30-периодные или 50-периодные.

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

  3. Добавить другие индикаторы в комбинации, например, MACD для оценки силы; RSI для снижения ложных сигналов.

  4. Добавьте механизмы остановки потери.

  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)

Больше