Количественная стратегия отслеживания тренда между циклами


Дата создания: 2023-12-15 15:59:37 Последнее изменение: 2023-12-15 15:59:37
Копировать: 0 Количество просмотров: 600
1
Подписаться
1621
Подписчики

Количественная стратегия отслеживания тренда между циклами

Обзор

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

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

Основные критерии этой стратегии:

  1. Используйте индикатор PSAR для определения того, находится ли цена в восходящей тенденции, а снижение PSAR рассматривается как завершение восходящей тенденции и переход к снижению;

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

  3. ADX требует, чтобы его средняя линия EMA была выше, что свидетельствует о том, что результаты анализа тенденций продолжаются;

  4. CMF требует больше 0, чтобы рассматривать как денежный поток;

Сигнал покупать возникает при выполнении вышеуказанных четырех условий; сигнал продавать возникает при выполнении ПСАР, 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)