Адаптивная стратегия следования за трендом на основе многофакторной модели


Дата создания: 2023-12-19 11:04:27 Последнее изменение: 2023-12-19 11:04:27
Копировать: 1 Количество просмотров: 653
1
Подписаться
1621
Подписчики

Адаптивная стратегия следования за трендом на основе многофакторной модели

Обзор

Стратегия является адаптивной стратегией отслеживания трендов, управляемой многофакторной моделью. Она объединяет несколько показателей, таких как RSI, MACD, Stochastics, и строит многофакторную модель для определения направления тренда. В то же время, она имеет адаптивный механизм остановки, который может регулировать цену остановки в зависимости от динамики ATR, чтобы обеспечить контроль риска.

Принципы

Эта стратегия использует несколько индикаторов, чтобы построить модель для определения тенденции. Во-первых, она определяет направление тенденции в сочетании с RSI и MACD; затем, в сочетании со стохастикой, она определяет, является ли это перепродажей или перекупкой, отфильтровывая некоторые сигналы. После входа в ордер, она использует ATR для расчета параметров риска и осуществления адаптивного стоп-лоста.

В частности, когда RSI выше 52 и MACD золотой форк, создается сигнал покупки; когда RSI ниже 48 и MACD мертвой форк, создается сигнал продажи. Чтобы отфильтровать ложные сигналы, он также обнаруживает, не перекупает ли Stochastics. Что касается остановки, то она может эффективно контролировать риск одиночного стоп-поста на основе параметров расчета ATR, чтобы реализовать адаптивную остановку.

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

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

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

Риск

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

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

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Настройка весов показателей в многофакторной модели для поиска оптимальной комбинации весов

  2. Проверка большего количества показателей, таких как CCI, волатильность и т. д., с использованием многофакторной модели.

  3. Оптимизация параметров для большего количества сортов и циклов

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

  5. Добавление модулей для обучения моделей и оценки стратегий, для реализации машинного обучения

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

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

Исходный код стратегии
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="TradersAI_UTBot", overlay = true)
// CREDITS to @HPotter for the orginal code. 
// CREDITS to @Yo_adriiiiaan for recently publishing the UT Bot study based on the original code - 
// I just added some simple code to turn it into a strategy so that you all can backtest it to see the results for yourself! 
// Use this strategy on your favorite instrumnet and timeframe, with your favorite settings
// While @Yo_adriiiiaan mentions it works best on a 4-hour timeframe or above, 
// I am  happy to share here this working on a 15-minute chart on e-mini S&P 500 Index (using the KeyValue setting at 10)
// I am sure different people would discover different settings that work best for their preferred instrumnet/timeframe etc. 
// Play with it and enjoy! And, don't forget to share any positive results you might get! Good luck with your trading!

SOURCE = input(hlc3)
RSILENGTH = input(14, title = "RSI LENGTH")
RSICENTERLINE = input(52, title = "RSI CENTER LINE")
MACDFASTLENGTH = input(7, title = "MACD FAST LENGTH")
MACDSLOWLENGTH = input(12, title = "MACD SLOW LENGTH")
MACDSIGNALSMOOTHING = input(12, title = "MACD SIGNAL SMOOTHING")
a = input(10, title = "Key Vaule. 'This changes the sensitivity'") 
SmoothK = input(3)
SmoothD = input(3)
LengthRSI = input(14)
LengthStoch = input(14)
RSISource = input(close) 
c = input(10, title="ATR Period")
xATR = atr(c)
nLoss = a * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
     iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
     iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos =	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
     iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == -1 ? red: pos == 1 ? green : blue 
ema= ema(close,1)
above = crossover(ema,xATRTrailingStop )
below = crossover(xATRTrailingStop,ema)
buy = close > xATRTrailingStop and above 
sell = close < xATRTrailingStop and below
barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 
plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= green,textcolor = white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= red,textcolor = white, transp = 0, size = size.tiny)
barcolor(barbuy? green:na)
barcolor(barsell? red:na)
alertcondition(buy, title='Buy', message='Buy')
alertcondition(sell, title='Sell', message='Sell')

if(buy)
    strategy.entry("UTBotBuy",strategy.long)
if(sell)
    strategy.entry("UTBotSell",strategy.short)