Эта стратегия генерирует сигналы покупки, когда быстрая линия покупки EMA пересекает медленную линию покупки SMA, и использует динамическую остановку ATR для контроля риска.
Вычислить быструю EMA и медленную SMA линии покупки, генерировать сигнал покупки, когда быстрая линия пересекает медленную линию с определенной силой покупки.
Вычисляет быструю линию EMA и медленную линию SMA, генерирует сигнал продажи, когда быстрая линия пересекает медленную линию.
Для контроля риска использовать среднее значение ATR за N дней умноженное на коэффициент динамической остановки.
Начать стратегию в период обратного тестирования для покупки и продажи исполнения.
Оптимизируйте параметры для каждого акции, чтобы найти наилучшие значения.
Стратегия сочетает в себе преимущества пересечения MA для сигналов и ATR для контроля риска.
Быстрая EMA и медленные перекрестки SMA идентифицируют тенденции и генерируют сигналы.
ATR прекращает корректировку на основе волатильности рынка, эффективно контролируя риски.
Оптимизация для каждой акции повышает прибыльность.
Простая логика и правила, легко внедряемые и проверяемые.
Завершите функцию обратного теста для проверки стратегии.
Стремится к стабильному превосходству над покупкой и удержанием.
Оптимизированные параметры могут не работать в будущем, может потребоваться периодическая повторная оптимизация.
Пересечения EMA и SMA могут генерировать неправильные или отстающие сигналы.
Стойка ATR может быть слишком агрессивной, может ослабить диапазон стоп-потери.
Низкая частота торговли может упустить хорошие возможности.
Нужно учитывать влияние торговых издержек.
Продолжайте тестировать различные комбинации параметров для получения оптимальных значений.
Попробуйте ввести другие индикаторы для фильтрации сигнала.
Оптимизировать период ATR, чтобы сбалансировать чувствительность остановки потерь.
Оценить эффект расслабления диапазона стоп-лосса.
Рассмотрим машинное обучение для автоматической оптимизации параметров.
Эффект исследования от увеличения частоты торговли.
Эта стратегия движущегося среднего последнего остановки сочетает в себе сильные стороны кроссоверов 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