Стратегия отслеживания импульса

Автор:Чао Чжан, Дата: 2024-03-01 11:08:43
Тэги:

img

Обзор

Стратегия Momentum Burst Tracking оценивает прорывы цен путем расчета процентных изменений цен и фильтрует сигналы с объемом торговли для реализации высоковероятного захвата точек прорыва тренда.

Принцип стратегии

Основными показателями, используемыми этой стратегией для определения сигналов входа, являются:

  1. Процентное изменение цены (isFourPercentBull) - Вычисляется процентное изменение цены закрытия по отношению к цене закрытия предыдущего дня, чтобы определить, действительно ли цена прорвалась.

  2. Соотношение цены закрытия к самой высокой цене (HighCloseRatio) - рассчитывается соотношение цены закрытия к самой высокой цене для определения силы прорыва цены.

  3. Объем торговли (объем) - требует, чтобы объем торговли был больше, чем в предыдущий день, чтобы обеспечить действительный прорыв.

  4. 200-дневная простая скользящая средняя (SMA) - требует, чтобы цена закрытия и цена открытия были выше 200-дневной линии для определения направления тренда.

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

trailPrice = close * (100 - trailPercent) / 100

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

Преимущества стратегии

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

  1. Многоусловное фильтрация обеспечивает достоверность прорыва и предотвращает ложные прорывы.

  2. Используйте систему отслеживания цены, которая может активно сокращать потери и блокировать прибыль, чтобы максимально избежать снижения.

  3. Логика стратегии проста и ясна, легко понять и оптимизировать.

Риски стратегии

Стратегия также сопряжена с некоторыми рисками:

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

  2. Чрезмерно агрессивные остановки могут привести к частым остановкам.

  3. Неправильное настройка параметров может привести к чрезмерной частоте торговли или пропущенным сигналам.

Решения соответствующих рисков:

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

  2. Разумно смягчить условия прорыва, чтобы не пропустить явные тенденции.

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

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

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

  1. Попробуйте другие методы отслеживания стоп-лосса, такие как отслеживание скользящей средней, ATR и отслеживание волатильности.

  2. Увеличить алгоритмы машинного обучения для обучения суждениям о лучших комбинациях параметров на основе исторических данных.

  3. Добавить вспомогательные условия суждения, основанные на объемных прорывах для обеспечения эффективности.

  4. Оценить различия в параметрах различных сортов, чтобы найти лучшее соответствие.

Заключение

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


/*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)

Больше