Интрадневная тенденция в соответствии с количественной стратегией, основанной на фильтрации условий с использованием нескольких индикаторов

Автор:Чао Чжан, Дата: 2023-12-15 15:59:37
Тэги:

img

Обзор

Эта стратегия сочетает в себе PSAR для оценки ценовых тенденций, ADX для оценки силы тренда, RSI для определения зон перекупленности и перепроданности и CMF для определения потоков средств для построения внутридневной количественной торговой стратегии, следующей за трендом в течение циклов. Она может быстро определить направления новых тенденций, когда цены выходят из консолидации и формируют новые тенденции, и продолжает отслеживать тенденции после этого.

Принципы

Основными правилами оценки этой стратегии являются:

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

  2. Требуйте, чтобы RSI был выше средней точки 50 для фильтрации ложных прорывов, происходящих в перепроданных зонах.

  3. Требовать, чтобы ADX был выше своей линии EMA, что указывает на устойчивый сигнал в анализе тенденций.

  4. Требовать, чтобы CMF был больше 0, судя по увеличению поступления средств.

Сигналы покупки генерируются при выполнении всех четырех условий выше. Условия продажи возникают, когда PSAR поднимается выше цен, RSI падает ниже 50, ADX падает ниже своей EMA и CMF становится меньше 0.

Эта стратегия всесторонне учитывает направление ценового тренда, силу тренда, состояние перекупленности / перепроданности и потоки средств при установлении правил торговли.

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

К основным преимуществам этой стратегии относятся:

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

  2. Быстрое определение направления и отслеживание начинающегося тренда позволяет получить большую часть прибыли от тренда.

  3. Установка условий фильтрации процесса позволяет эффективно контролировать риски и обеспечивает эффективность отслеживания.

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

Анализ рисков

К основным рискам этой стратегии относятся:

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

  2. Следите за изменением состояния фильтрации во время отслеживания, чтобы избежать потерь при отмене.

  3. Эта среднесрочная и долгосрочная стратегия может быть нарушена в краткосрочной перспективе колебаниями и сопряжена с рисками стоп-лосса.

Соответствующие меры по управлению рисками включают: оптимизацию правил размещения позиций, установку линий предупреждения риска и расширение расстояний остановки и т.д.

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

Пространства оптимизации включают:

  1. Оптимизация параметров с помощью машинного обучения с учетом текущих субъективных настроек.

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

  3. Улучшить механизмы остановки, например, остановки задержки, временные остановки или остановки прорыва.

Заключение

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


/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 )

start = input(1.02)
increment = input(1.02)
maximum = input(1.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

//rsi strat
length = input( 50 )
middle_RSI=input(49)
price = close
vrsi = rsi(price, length)

//cmf
lengthCMF = input(20, minval=1)
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthCMF) / sum(volume, lengthCMF)

//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
ema_length=input(10)
ema_sig= ema(sig,ema_length)


long = not uptrend  and vrsi > middle_RSI and sig > ema_sig   and mf>0 
short= uptrend   and vrsi < middle_RSI and sig<ema_sig and mf<0

strategy.entry("long",1,when=long)
strategy.close('long',when=short)

Больше