MACD 바 색상과 선형 회귀에 기초한 고주파 헤지 전략

저자:차오장, 날짜: 2023-10-27 10:42:54
태그:

img

전반적인 설명

이 전략은 MACD 바 색상과 선형 회귀 지표를 결합하여 고주파 반전 거래를 달성하여 특히 단기 중재 및 헤지링에 적합합니다. 그것은 전형적인 시장 중립 전략에 속합니다.

전략 논리

이 전략은 다음과 같은 주요 구성 요소로 구성됩니다.

  1. 트렌드 판단 지표로 MACD 막대 색. MACD 막대 색이 녹색이면 상승 추세를 나타냅니다. 따라서 단편 주문을 할 수 없습니다. MACD 막대 색이 빨간색이면 하락 추세를 나타냅니다. 따라서 긴 주문을 할 수 없습니다.

  2. 주요 거래 신호 지표로 선형 회귀. 가격이 선형 회귀선을 넘을 때 길게, 가격이 선을 넘을 때 짧게 이동합니다.

  3. PAC 채널은 선형 회귀선의 방향을 결정하기 위해 높은 가격, 낮은 가격 및 가까운 가격의 EMA에 의해 형성됩니다. 선형 회귀 방향이 채널 트렌드와 일치 할 때만 거래 신호가 생성됩니다.

  4. EMA 89는 스톱 로스 라인입니다. 가격이 이 라인을 넘어선 후에 포지션을 닫습니다.

트레이드 신호의 논리는 다음과 같습니다.

긴 신호: 선형 회귀가 PAC 하단 대역 위에 넘어가고 선형 회귀가 기울어지고 MACD 바가 빨간색이 아닙니다.

짧은 신호: 선형 회귀가 PAC 상단역 아래로 넘어가고 선형 회귀가 아래로 기울이고 MACD 바가 초록색이 아닙니다.

출구 신호: 가격 EMA 89 아래로 넘어갑니다.

이 전략은 트렌드 판단과 주요 가격 수준을 결합하여 높은 빈도의 헤지 트레이딩을 달성합니다.

이점 분석

  1. MACD 바 색상은 주요 트렌드를 결정하고 트렌드에 반대하는 거래를 피합니다.

  2. 선형 회귀는 부드럽고 소음을 필터합니다.

  3. EMA 채널은 분명히 상승/하락 편향을 정의합니다.

  4. 스톱 로스는 수익을 극대화하기 위해 합리적으로 설정됩니다.

  5. 높은 거래 빈도는 알고리즘 거래에 적합합니다.

  6. 헤지 트레이드를 달성하고 범위 시장에서 이익을 얻을 수 있습니다.

위험 분석

  1. 선형 회귀와 채널의 매개 변수는 최적화가 필요합니다. 그렇지 않으면 실패 할 수 있습니다.

  2. 스톱 손실은 큰 가격 변동 중에 자주 발생 할 수 있습니다. 스톱 손실 범위를 확장하는 것을 고려 할 수 있습니다.

  3. 높은 거래 빈도는 거래 비용이 상당할 수 있다는 것을 의미합니다.

  4. MACD는 약간의 지연을 가지고 있으며 단기 트렌드 반전을 놓칠 수 있습니다.

  5. 또한 EMA 채널은 변화하는 시장 조건에 적응하기 위해 지속적인 최적화가 필요합니다.

최적화 방향

  1. 선형 회귀와 채널 매개 변수를 조정하여 다른 기기에 더 잘 맞게 조정합니다.

  2. 스톱 로스 범위를 넓히고 수익/위험 비율을 1 이상 유지합니다.

  3. MACD 매개 변수를 최적화하여 더 많은 단기 신호를 포착합니다.

  4. 볼링거 밴드 같은 선형 회귀를 대체하는 다른 지표를 시도해보세요.

  5. 과도한 일방적 손실을 방지하기 위해 위치 크기를 추가합니다.

  6. 일부 거래 신호를 필터링하기 위해 RSI와 같은 다른 지표를 포함하십시오.

결론

이 전략은 높은 주파수 헤지 트레이딩을 달성하기 위해 여러 기술적 지표를 결합합니다. 그것의 강점은 합리적인 리스크 통제로 단기 반전을 잡는 데 있으며, 범위 제한 시장 조건에 매우 적합합니다. 동시에 과도한 적합성을 방지하기 위해 특정 매개 변수 최적화 및 개선이 필요합니다. 적절한 관리로 매우 실용적인 높은 주파수 거래 전략이 될 수 있습니다.


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

더 많은