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.
As principais regras de avaliação desta estratégia são:
Usar o indicador PSAR para julgar se os preços estão em tendência de alta.
Exigir que o RSI esteja acima do ponto médio de 50 para filtrar falsas rupturas que ocorrem em zonas de sobrevenda.
Exigir que o ADX esteja acima da sua linha EMA, indicando um sinal sustentável na análise de tendências.
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.
As principais vantagens desta estratégia incluem:
A combinação de múltiplos indicadores no estabelecimento de regras de negociação pode prevenir efetivamente falhas e garantir a qualidade do sinal.
A localização rápida de tendências emergentes e o rastreamento permitem capturar a maioria dos lucros da tendência.
A criação de condições de filtragem de processos pode controlar eficazmente os riscos e garantir a eficácia do rastreamento.
Considerando a força da tendência ajuda a evitar congestionamentos de gama de negociação.
Os principais riscos desta estratégia incluem:
A acumulação de uma única estratégia implica riscos de carteira, que exigem um dimensionamento adequado das posições.
Monitorizar de perto as alterações das condições de filtragem durante o rastreamento para evitar perdas quando cancelado.
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.
Os espaços de otimização incluem:
Optimização de parâmetros através de aprendizagem de máquina, dadas as configurações subjetivas atuais.
Adicionar um módulo de dimensionamento de posições que dimensionar dinamicamente com base nos riscos.
Melhorar os mecanismos de paragem, por exemplo, paradas de atraso, paradas de tempo ou paradas de fuga.
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)