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


Дата создания: 2024-03-01 11:08:43 Последнее изменение: 2024-03-01 11:08:43
Копировать: 0 Количество просмотров: 826
1
Подписаться
1617
Подписчики

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

Обзор

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

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

В основном, эта стратегия определяет время покупки по следующим показателям:

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

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

  3. объем (volume) - требуется объем сделок, превышающий предыдущий день, чтобы обеспечить эффективный прорыв;

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

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

trailPrice = close * (100 - trailPercent) / 100

Это означает, что если цена растет, то стоп-линия также растет, что блокирует прибыль. Когда цена возвращается к стоп-линии, стоп-линия закрывается.

Стратегические преимущества

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

  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)