Estratégia de cobertura de alta frequência baseada na cor da barra MACD e na regressão linear

Autora:ChaoZhang, Data: 2023-10-27 10:42:54
Tags:

img

Resumo

Esta estratégia combina a cor da barra MACD e os indicadores de regressão linear para alcançar a negociação de reversão de alta frequência, que é especialmente adequada para arbitragem e hedging de curto prazo.

Estratégia lógica

A estratégia consiste nos seguintes componentes principais:

  1. Quando a barra MACD é verde, indica uma tendência ascendente, por isso não devem ser colocadas ordens curtas.

  2. Regressão linear como o indicador chave de sinal de negociação. Vá longo quando o preço cruza acima da linha de regressão linear e vá curto quando o preço cruza abaixo da linha.

  3. O canal PAC é formado pela EMA de preços altos, baixos e próximos para determinar a direção da linha de regressão linear.

  4. EMA 89 como a linha de stop loss, feche as posições quando o preço cruzar acima desta linha.

A lógica dos sinais comerciais é:

Signo longo: A regressão linear cruza a faixa inferior do PAC E a regressão linear está inclinada para cima E a barra MACD não é vermelha.

sinal curto: a regressão linear cruza abaixo da faixa superior PAC E a regressão linear está inclinada para baixo E a barra MACD não é verde.

Sinal de saída: Preço cruza abaixo da EMA 89.

Esta estratégia combina o julgamento da tendência e os níveis principais de preços para alcançar a negociação de cobertura de alta frequência.

Análise das vantagens

  1. A cor da barra do MACD ajuda a determinar a tendência principal e evita a negociação contra a tendência.

  2. A regressão linear é suave e filtra algum ruído.

  3. O canal EMA define claramente o viés de alta/baixa.

  4. O stop loss é razoavelmente definido para maximizar os lucros.

  5. A alta frequência de negociação torna-o adequado para negociação algorítmica.

  6. Consegue operações de cobertura e pode lucrar com mercados de gama.

Análise de riscos

  1. Parâmetros de regressão linear e canal precisam de otimização, caso contrário podem falhar.

  2. O stop loss pode ser ativado com frequência durante grandes oscilações de preços.

  3. A alta frequência do comércio significa que os custos de transação podem ser substanciais.

  4. O MACD tem algum atraso e pode perder inversões de tendência de curto prazo.

  5. Os canais da EMA também necessitam de uma otimização contínua para se adaptarem às condições de mercado em evolução.

Orientações de otimização

  1. Ajustar os parâmetros da regressão linear e do canal para melhor adaptar os diferentes instrumentos.

  2. Ampliar a gama de stop loss mantendo a relação recompensa/risco acima de 1.

  3. Otimizar os parâmetros do MACD para captar mais sinais de curto prazo.

  4. Tente outros indicadores para substituir a regressão linear, como Bandas de Bollinger.

  5. Adicionar dimensionamento de posição para evitar perdas excessivas de sentido único.

  6. Incorpore outros indicadores como RSI para filtrar alguns sinais comerciais.

Conclusão

Esta estratégia combina múltiplos indicadores técnicos para alcançar a negociação de hedge de alta frequência. Sua força reside em capturar reversões de curto prazo com controles de risco razoáveis, tornando-a muito adequada para condições de mercado limitadas a faixa. Ao mesmo tempo, é necessária certa otimização e melhorias de parâmetros para evitar o sobreajuste. Com uma gestão adequada, pode se tornar uma estratégia de negociação de alta frequência altamente prática.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy("Sonic R + Linear Reg + Kumo Cloud + Barcolor MACD", overlay=true,default_qty_value=10000,initial_capital=200,currency=currency.USD, pyramiding=1)
EMA = input(defval=89, title="EMA Signal")
HiLoLen     = input(34, minval=2,title="High Low channel Length")
pacC        = ema(close,HiLoLen)
pacL        = ema(low,HiLoLen)
pacH        = ema(high,HiLoLen)
DODGERBLUE = #1E90FFFF
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=DODGERBLUE, linewidth=1, title="High PAC EMA",transp=90)
H=plot(pacH, color=DODGERBLUE, linewidth=1, title="Low PAC EMA",transp=90)
C=plot(pacC, color=DODGERBLUE, linewidth=2, title="Close PAC EMA",transp=80)
//Moving Average//
signalMA =ema(close,EMA)
plot(signalMA,title="EMA Signal",color=black,linewidth=3,style=line)
linereg = linreg(close, EMA, 0)
plot(linereg, color = orange, title = "Linear Regression Curve", style = line, linewidth = 1)
//////ICHIMOKU/////////
conversionPeriods = input(9),
basePeriods = input(26, minval=1, title="Base Line")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span"),
displacement = input(26, minval=1)
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine) 
leadLine2 = donchian(laggingSpan2Periods-1)
p1 = plot(leadLine1, offset = displacement-1, color=gray,title="Senkou span A", transp=90)
p2 = plot(leadLine2, offset = displacement-1, color=gray, title="Senkou span B", transp=90)
fill(p1, p2, color = leadLine1 > leadLine2 ? green : red, title="Kumo Cloud")
///////////////// MACD BARCOLOR /////////////////////
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hisup= iff(delta>delta[1] and delta>0, 1,
	     iff(delta<delta[1], -1, nz(hisup[1], 0)))
hisdown = iff(delta<delta[1] and delta<0, 1,
	     iff(delta>delta[1], -1, nz(hisdown[1], 0)))
barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue )
///////////// SIGNAL ///////////////
conbuy = iff(crossover(linereg,pacL) and rising(linereg,5), 1,
	     iff(crossover(linereg,pacH) or (crossunder(linereg,pacL) and pacL<signalMA), -1, nz(conbuy[1], 0)))
consell = iff(crossunder(linereg,pacH) and falling(linereg,5), 1,
	     iff(crossunder(linereg,pacL) or (crossover(linereg,pacH) and pacH>signalMA), -1, nz(consell[1], 0)))
golong= conbuy==1 and close>open and open<pacH and close>linereg and hisdown!=1
goshort= consell==1 and close<open and open>pacL and close<linereg and hisup!=1
if(golong)
    strategy.entry("Buy",strategy.long)
if(goshort)
    strategy.entry("Sell",strategy.short)
closelong= conbuy==-1
closeshort=consell==-1
if(closelong)
    strategy.close("Buy")
if(closeshort)
    strategy.close("Sell")
 ////////////// TP and SL//.
//SL = input(defval=200.00, title="Stop Loss Point", type=float, step=1)
//rr= input(defval=0.1,title="Reward/Risk",type=float)
//useTPandSL = input(defval = false, title = "Use exit order strategy?")
//Stop = SL
//Take=SL*rr
//Q = 100
//if(useTPandSL)
//    strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop)
//    strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop) 

Mais.