Стратегия Momentum Burst Tracking оценивает прорывы цен путем расчета процентных изменений цен и фильтрует сигналы с объемом торговли для реализации высоковероятного захвата точек прорыва тренда.
Основными показателями, используемыми этой стратегией для определения сигналов входа, являются:
Процентное изменение цены (isFourPercentBull) - Вычисляется процентное изменение цены закрытия по отношению к цене закрытия предыдущего дня, чтобы определить, действительно ли цена прорвалась.
Соотношение цены закрытия к самой высокой цене (HighCloseRatio) - рассчитывается соотношение цены закрытия к самой высокой цене для определения силы прорыва цены.
Объем торговли (объем) - требует, чтобы объем торговли был больше, чем в предыдущий день, чтобы обеспечить действительный прорыв.
200-дневная простая скользящая средняя (SMA) - требует, чтобы цена закрытия и цена открытия были выше 200-дневной линии для определения направления тренда.
Когда вышеперечисленные множественные условия выполняются одновременно, выпускается сигнал покупки. После этого стратегия использует ценовое отслеживание стоп-лосса для активного остановки потерь и блокировки прибыли. В частности, формула расчета линии остановки потерь заключается в следующем:
trailPrice = close * (100 - trailPercent) / 100
где trailPercent - это конфигурируемый процент остановки потери. Это гарантирует, что до тех пор, пока цены растут, линия остановки потери также будет расти, чтобы блокировать прибыль. Когда цены опускаются обратно к линии остановки потери, закрыть позиции, чтобы остановить потери.
Как типичная стратегия выхода из кризиса, она имеет следующие преимущества:
Многоусловное фильтрация обеспечивает достоверность прорыва и предотвращает ложные прорывы.
Используйте систему отслеживания цены, которая может активно сокращать потери и блокировать прибыль, чтобы максимально избежать снижения.
Логика стратегии проста и ясна, легко понять и оптимизировать.
Стратегия также сопряжена с некоторыми рисками:
Все еще существует вероятность неудачного выхода, который не может полностью избежать потерь.
Чрезмерно агрессивные остановки могут привести к частым остановкам.
Неправильное настройка параметров может привести к чрезмерной частоте торговли или пропущенным сигналам.
Решения соответствующих рисков:
Оптимизировать параметры и уменьшить величину остановки потери, чтобы обеспечить достаточное пространство.
Разумно смягчить условия прорыва, чтобы не пропустить явные тенденции.
Испытывать различные сорта для оценки стабильности стратегии.
Учитывая высокую частоту остановок в этой стратегии, следующие направления могут быть дополнительно оптимизированы:
Попробуйте другие методы отслеживания стоп-лосса, такие как отслеживание скользящей средней, ATR и отслеживание волатильности.
Увеличить алгоритмы машинного обучения для обучения суждениям о лучших комбинациях параметров на основе исторических данных.
Добавить вспомогательные условия суждения, основанные на объемных прорывах для обеспечения эффективности.
Оценить различия в параметрах различных сортов, чтобы найти лучшее соответствие.
Стратегия отслеживания трендов в целом является очень практичной стратегией отслеживания трендов. Она решает проблему невозможности эффективно остановить убытки и прибыль при использовании стратегий прорыва, одновременно хорошо контролируя риски при улавливании тенденций.
/*backtest start: 2023-03-01 00:00:00 end: 2023-12-10 05:20:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © doks23 //@version=5 strategy(title = "SD:Momentum Burst", overlay=true, initial_capital=1000,commission_value = 0,slippage = 0,process_orders_on_close=true) //Check Vol checkVol = input.bool(defval=false,title="IncludeAvgVolume?") volSMAlength = input(50, title="VolumeLength") volumeSma = ta.sma(volume, volSMAlength) highvolume = volume >= volumeSma volumeCond=checkVol?highvolume:true // Profit and Loss trailPercent = input.float(title="Trail%", defval=3, step=0.1) //longCondition PercentThreshold=input.float(3.8,'BreakoutPercent', step=0.1) MaxThreshold=input.float(10,'Max Breakout', step=0.1) HighCloseRatio=input.float(70,'Close to High Ratio', step=1) float candleCloseBull = ((close[0] - open[0]) / (high[0] - open[0]) * 100) float isFourPercentBull = (((close[0] - close[1]) / close[1]) * 100) LongCond=volume > volume[1] and isFourPercentBull > PercentThreshold and candleCloseBull > HighCloseRatio and isFourPercentBull<MaxThreshold barcolor(color=(LongCond?color.yellow: na),title='BObar') longCondition= LongCond and volumeCond and close>ta.sma(close,200) and open>ta.sma(close,200) //Input Strategy DateCheck= input.bool(title = 'Custom Date Range?', defval=true,group = 'Strategy') FromDate= input(defval = timestamp("1 Jan 2019 00:00"),group = 'Strategy') ToDate =input(defval = timestamp("31 Dec 2023 00:00"),group = 'Strategy') PostionSize =input.string('Contract','Select Position Size',options = ['Percent of Equity','Contract'],group = 'Strategy') ContractQty =input.int(1,'No of Contract',group = 'Strategy') //Backtesting Date Range TimeWindow=true // Number of Contract var int trade_qty=na if(PostionSize=='Contract') trade_qty:=ContractQty else trade_qty:= (strategy.equity>strategy.initial_capital)?math.floor(strategy.equity/strategy.initial_capital):ContractQty //Position Buy BuyTriggerPrice = ta.valuewhen(longCondition,high,0) //Trailing price var float trailPrice = na float percentMulti = (100 - trailPercent) / 100 longCondition2=longCondition and TimeWindow if longCondition2 strategy.entry("Long", strategy.long,qty=trade_qty,stop = BuyTriggerPrice) trailPrice := close*percentMulti if strategy.position_size>0 trailPrice := math.max(close*percentMulti,trailPrice[1]) if low <= trailPrice strategy.exit('Exit','Long',stop = trailPrice) if strategy.position_size==0 trailPrice:=na // Plot Strategy var float trail_long_SL=na if strategy.position_size>0 trail_long_SL:=trailPrice else trail_long_SL:=na //Strategy Plot PlotMA=input.bool(title="Plot MA?", defval=false) plot(PlotMA?ta.sma(close,10):na,color = color.red,title = '10MA') plot(PlotMA?ta.sma(close,21):na,color = color.white,title = '21MA') plot(PlotMA?ta.sma(close,200):na,color = color.orange,title = '200MA') // plot(trail_long_SL,color = color.gray,style = plot.style_steplinebr,linewidth = 1)