가격 채널 및 MACD 기반의 멀티 타임프레임 거래 전략

저자:차오장, 날짜: 2023-12-08 15:15:37
태그:

img

전반적인 설명

이 전략은 가격 채널 지표와 MACD 지표를 결합하여 트렌드를 추적하고 여러 시간 프레임에 걸쳐 과반 구매 및 과반 판매 수준을 식별하여 구매 및 판매 결정을 내립니다. 이 전략은 또한 위험을 관리하기 위해 스톱 로스 및 수익을 포함합니다.

전략 논리

가격 채널 지표는 가격이 채널을 벗어날 때 동향을 결정하기 위해 가장 높고 가장 낮은 가격의 EMA 라인을 기반으로 한 가격 채널을 구성합니다. MACD 지표는 상승 및 하락 모멘텀을 판단합니다. 제로 라인 이상의 값은 황소 시장을 시사하는 반면 아래의 값은 곰 시장을 시사합니다.

이 전략의 거래 신호는 다음과 같은 측면으로 나옵니다.

  1. MACD 히스토그램이 빨간색으로 바뀌면 장을 입력합니다. MACD 히스토그램이 녹색으로 바뀌면 짧을 수 있습니다.

  2. 가격이 채널의 하단에 접근하고 MACD가 0선 아래에 있을 때 단위로 들어가십시오.

  3. 가격이 채널 상단에 접근하고 MACD가 0선 위에 있을 때 장면을 입력합니다.

  4. MACD가 0선을 넘을 때 장을 입력합니다. MACD가 0선을 넘을 때 짧은 것을 입력합니다.

출입은 스톱 로스로 시작되고 수익을 취합니다.

전략 의 장점

  1. 지표의 조합은 잘못된 파장을 방지합니다.

  2. 시간 프레임에 걸쳐 표시자를 조합하여 신뢰성있는 트렌드 검출을 보장합니다.

  3. 스톱 로즈와 수익을 취하는 것을 통합하여 거래 손실을 효과적으로 제어합니다.

전략 의 위험

  1. 제한된 최적화 공간은 과잉 최적화로 이어집니다.

  2. 낮은 가격 채널 설정은 더 큰 움직임을 놓칩니다.

  3. 긴 스톱 손실은 더 큰 손실을 유발합니다.

해결책:

  1. 과도한 최적화를 방지하기 위해 앞으로 나아가는 최적화를 채택하십시오.

  2. 가격 채널에 적응적인 매개 변수를 설정합니다.

  3. 변동성 기반의 스톱 손실을 도입하여 스톱 거리의 동적 조정

최적화 방향

  1. MACD 매개 변수 조합을 최적화합니다.

  2. 가격 채널 매개 변수를 최적화 할 수 있습니다.

  3. 더 많은 필터를 추가해서 가짜 유출을 방지하고 효율성을 높여줍니다.

요약

이 전략은 합리적인 매개 변수 설정과 큰 최적화 공간으로 가격 채널과 MACD의 강점을 결합합니다. 트렌드 탐지 및 과소 구매 / 과소 판매 식별에서 잘 수행합니다. 스톱 손실 / 취업 이익 메커니즘은 거래 손실에 따라 제어합니다. 앞으로는 매개 변수 최적화, 필터 추가 및 스톱 손실 메커니즘 최적화로 개선이 가능합니다.


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

//@version=2
strategy("Sonic R + Barcolor MACD", overlay=true)
HiLoLen     = input(34, minval=2,title="High Low channel Length")
pacL        = ema(low,HiLoLen)
pacH        = ema(high,HiLoLen)
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0)
H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0)
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 )
//SR
PeriodLookBack = input(34)
xHighest = highest(PeriodLookBack)
xLowest = lowest(PeriodLookBack)
Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0)
// Strategy//
conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0)
gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH
consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0)
gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL
if(gobuy)
    strategy.entry("Buy",strategy.long)
if(gosell)
    strategy.entry("Sell",strategy.short)
//if(Trend==-1 and close<pacL)
//    strategy.close("Buy")
//if(Trend==1 and close>pacH)
//    strategy.close("Sell")
 ////////////// TP and SL//
SL = input(defval=100.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)

더 많은