O recurso está a ser carregado... Carregamento...

Uma tendência intradiária seguindo uma estratégia quantitativa baseada na filtragem de condições com múltiplos indicadores

Autora:ChaoZhang, Data: 2023-12-15 15:59:37
Tags:

img

Resumo

Esta estratégia combina PSAR para julgar as tendências de preços, ADX para julgar a força da tendência, RSI para localizar zonas de sobrecompra e sobrevenda e CMF para julgar os fluxos de fundos para construir uma estratégia quantitativa de negociação intradiária seguindo a tendência em todos os ciclos.

Princípios

As principais regras de avaliação desta estratégia são:

  1. Usar o indicador PSAR para julgar se os preços estão em tendência de alta.

  2. Exigir que o RSI esteja acima do ponto médio de 50 para filtrar falsas rupturas que ocorrem em zonas de sobrevenda.

  3. Exigir que o ADX esteja acima da sua linha EMA, indicando um sinal sustentável na análise de tendências.

  4. Exigir que o CMF seja superior a 0, julgando o aumento do fluxo de fundos.

Os sinais de compra são gerados quando todas as quatro condições acima são atendidas. As condições de venda ocorrem quando o PSAR sobe acima dos preços, o RSI cai abaixo de 50, o ADX cai abaixo de sua EMA e o CMF se torna menor que 0.

Esta estratégia considera de forma abrangente a direção da tendência de preços, a força da tendência, o estado de sobrecompra/supervenda e os fluxos de fundos ao estabelecer regras de negociação.

Vantagens

As principais vantagens desta estratégia incluem:

  1. A combinação de múltiplos indicadores no estabelecimento de regras de negociação pode prevenir efetivamente falhas e garantir a qualidade do sinal.

  2. A localização rápida de tendências emergentes e o rastreamento permitem capturar a maioria dos lucros da tendência.

  3. A criação de condições de filtragem de processos pode controlar eficazmente os riscos e garantir a eficácia do rastreamento.

  4. Considerando a força da tendência ajuda a evitar congestionamentos de gama de negociação.

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. A acumulação de uma única estratégia implica riscos de carteira, que exigem um dimensionamento adequado das posições.

  2. Monitorizar de perto as alterações das condições de filtragem durante o rastreamento para evitar perdas quando cancelado.

  3. Esta estratégia de médio/longo prazo pode ser perturbada a curto prazo por flutuações e incorrer em riscos de stop loss.

As medidas de gestão de risco correspondentes incluem: a otimização das regras de dimensionamento das posições, a fixação de linhas de alerta de risco e o alargamento das distâncias de parada, etc.

Orientações de otimização

Os espaços de otimização incluem:

  1. Optimização de parâmetros através de aprendizagem de máquina, dadas as configurações subjetivas atuais.

  2. Adicionar um módulo de dimensionamento de posições que dimensionar dinamicamente com base nos riscos.

  3. Melhorar os mecanismos de paragem, por exemplo, paradas de atraso, paradas de tempo ou paradas de fuga.

Conclusão

Esta estratégia combinando indicadores provou ser eficaz na localização e rastreamento rápidos de tendências nascentes, validando a negociação quantitativa com base em múltiplas dimensões, como tendências e fundos.


/*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)

Mais.