Стратегия скользящего среднего трейлинг-стопа


Дата создания: 2023-09-19 21:33:48 Последнее изменение: 2023-09-19 21:33:48
Копировать: 2 Количество просмотров: 691
1
Подписаться
1617
Подписчики

Обзор

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

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

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

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

  3. Дневная средняя величина N, умноженная на множитель, используется для динамического отслеживания стоп-лосса и контроля риска.

  4. Запуск стратегии, покупка и продажа во время обратной оценки.

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

Эта стратегия сочетает в себе преимущества движущихся средних показателей для определения тенденций и перекрестных сигналов и динамического отслеживания стоп-убытков 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. Исследование эффективности увеличения частоты открытия складов.

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

Эта стратегия, которая сочетает в себе преимущества равнолинейного перекрестного генерирования сигналов и контроля риска 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