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

Автор:Чао Чжан, Дата: 2023-09-19 21:33:48
Тэги:

Обзор

Эта стратегия генерирует сигналы покупки, когда быстрая линия покупки EMA пересекает медленную линию покупки SMA, и использует динамическую остановку ATR для контроля риска.

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

  1. Вычислить быструю EMA и медленную SMA линии покупки, генерировать сигнал покупки, когда быстрая линия пересекает медленную линию с определенной силой покупки.

  2. Вычисляет быструю линию EMA и медленную линию SMA, генерирует сигнал продажи, когда быстрая линия пересекает медленную линию.

  3. Для контроля риска использовать среднее значение ATR за N дней умноженное на коэффициент динамической остановки.

  4. Начать стратегию в период обратного тестирования для покупки и продажи исполнения.

  5. Оптимизируйте параметры для каждого акции, чтобы найти наилучшие значения.

Стратегия сочетает в себе преимущества пересечения MA для сигналов и ATR для контроля риска.

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

  1. Быстрая EMA и медленные перекрестки SMA идентифицируют тенденции и генерируют сигналы.

  2. ATR прекращает корректировку на основе волатильности рынка, эффективно контролируя риски.

  3. Оптимизация для каждой акции повышает прибыльность.

  4. Простая логика и правила, легко внедряемые и проверяемые.

  5. Завершите функцию обратного теста для проверки стратегии.

  6. Стремится к стабильному превосходству над покупкой и удержанием.

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

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

  2. Пересечения EMA и SMA могут генерировать неправильные или отстающие сигналы.

  3. Стойка ATR может быть слишком агрессивной, может ослабить диапазон стоп-потери.

  4. Низкая частота торговли может упустить хорошие возможности.

  5. Нужно учитывать влияние торговых издержек.

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

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

  2. Попробуйте ввести другие индикаторы для фильтрации сигнала.

  3. Оптимизировать период ATR, чтобы сбалансировать чувствительность остановки потерь.

  4. Оценить эффект расслабления диапазона стоп-лосса.

  5. Рассмотрим машинное обучение для автоматической оптимизации параметров.

  6. Эффект исследования от увеличения частоты торговли.

Резюме

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


/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//created by XPloRR 04-03-2018

strategy("XPloRR MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100)

testStartYear = input(2005, "Start Year")
testStartMonth = input(1, "Start Month")
testStartDay = input(1, "Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

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

testPeriodBackground = input(title="Background", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

ema1Period = input(12, "Fast EMA Buy")
sma1Period = input(54, "Slow SMA Buy")
strength1 = input(52, "Minimum Buy Strength")

ema2Period = input(18, "Fast EMA Sell")
sma2Period = input(55, "Slow SMA Sell")
strength2 = input(100, "Minimum Sell Strength")

delta = input(8, "Trailing Stop (#ATR)")

testPeriod() => true

ema1val=ema(close,ema1Period)
sma1val=sma(close,sma1Period)
ema1strength=10000*(ema1val-ema1val[1])/ema1val[1]

ema2val=ema(close,ema2Period)
sma2val=sma(close,sma2Period)
ema2strength=10000*(ema2val-ema2val[1])/ema2val[1]

plot(ema1val,color=blue,linewidth=1)
plot(sma1val,color=orange,linewidth=1)
plot(ema2val,color=navy,linewidth=1)
plot(sma2val,color=red,linewidth=1)

long=crossover(ema1val,sma1val) and (ema1strength > strength1) 
short=crossunder(ema2val,sma2val) and (ema2strength < -strength2)

stopval=ema(close,6)
atr=sma((high-low),15)

inlong=0
buy=0
stop=0
if testPeriod()
    if (inlong[1])
        inlong:=inlong[1]
        buy:=close
        stop:=iff((stopval>(stop[1]+delta*atr)),stopval-delta*atr,stop[1])
    if (long) and (not inlong[1])
        strategy.entry("buy",strategy.long)
        inlong:=close
        buy:=close
        stop:=stopval-delta*atr
plot(buy,color=iff(close<inlong,red,lime),style=columns,transp=90,linewidth=1)
plot(stop,color=iff((short or (stopval<stop)) and (close<inlong),red,lime),style=columns,transp=60,linewidth=1)
if testPeriod()
    if (short or (stopval<stop)) and (inlong[1])
        strategy.close("buy")
        inlong:=0
        stop:=0
        buy:=0



Больше