Стратегия отслеживания тренда на основе многофакторной модели с адаптивным отслеживанием потерь

Автор:Чао Чжан, Дата: 2023-12-19 11:04:27
Тэги:

img

Обзор

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

Принципы

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

В частности, он генерирует сигнал покупки, когда RSI превышает 52 и происходит золотой крест MACD; он генерирует сигнал продажи, когда RSI ниже 48 и происходит мертвый крест MACD. Чтобы отфильтровать ложные сигналы, он также обнаруживает, является ли Стохастик перекупленным или перепроданным. Для стоплосса он рассчитывает параметр на основе 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)

Больше