멀티타임라인 이동평균 시스템 트레이딩 전략


생성 날짜: 2023-12-12 16:07:18 마지막으로 수정됨: 2023-12-12 16:07:18
복사: 1 클릭수: 648
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

멀티타임라인 이동평균 시스템 트레이딩 전략

개요

이 전략은 다중 시간 축의 평선 시스템을 채택하고, RSI 지표와 같은 여러 가지 기술 지표와 결합하여 다중 공간 자동 전환을 구현합니다. 전략은 ?? Multi-Timeframe Moving Average System Trading Strategy ?? 라고 불립니다. 주요 아이디어는 서로 다른 시간 기간 동안의 가격의 추세를 판단하여 더 신뢰할 수있는 거래 신호를 생성하는 것입니다.

전략 원칙

이 전략의 핵심 지표는 평선 시스템이다. 전략은 JMA, TEMA, DEMA 등 여러 평선 지표를 사용하여 15분, 30분, 60분 등 다양한 주기 동안의 가격 트렌드를 계산한다. 예를 들어, 15주기 동안 JMA를 사용하여 계산된 평선 움직임이 그 주기 내의 가격 트렌드를 판단한다. 전략은 다른 주기 동안의 가격 움직임을 비교하여 긴 선과 짧은 선 사이에 오차가 있는지 판단한다.

구체적으로, 전략의 trend, trend2 및 trend3 변수는 각각 15분, 30분 및 60분 가격 경향을 나타냅니다. 15분 가격이 반전되고 30분 및 60분이 아직 반전되지 않은 경우, 짧은 선과 긴 선 사이에 오차가 있다고 판단하면 거래 신호가 생성됩니다. 모든 주기적 추세가 일치하면 거래 신호가 생성되지 않습니다.

이 전략의 핵심은 여러 주기간의 관계를 비교함으로써 가짜 신호를 필터링하여 더 신뢰할 수 있는 거래 신호를 생성하는 것입니다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 다중 시간축 분석을 사용하여 신호의 신뢰성을 높이고, 가짜 신호를 필터링합니다.
  2. 단일 지표로 인한 문제를 피하기 위해 여러 지표와 결합하여 종합적으로 판단하십시오.
  3. 자동으로 다중 공중 헤드 전환을 구현하여, 인적 개입이 필요하지 않고, 조작의 난이도를 줄일 수 있다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 다중 시간 축 분석은 거래 시점의 불확실성을 증가시킬 것이며, 최적의 출장 시점을 놓칠 수 있습니다.
  2. 동시에 여러 지표와 결합하여, 지표 파라미터를 잘못 설정하면 거래 신호의 질이 떨어질 수 있습니다.
  3. 자동 스위치 다중 공허 헤드가 너무 최적화 될 위험이 있으며, 실리드 디스크 효과는 재검토보다 약할 수 있다.

위와 같은 위험에 대해, 우리는 다음과 같은 조치를 취할 수 있습니다.

  1. 시간축 파라미터를 조정하여 짧은 라인 신호가 vez로 들어오는 것을 알 수 있도록 한다.
  2. 대량의 데이터를 통해 지속적으로 지표 변수를 최적화합니다.
  3. 실제 시장에 적절한 개입을 통해 자동화된 시스템에서 맹목적으로 거래하는 것을 피하십시오.

최적화 방향

이 전략에는 더 많은 최적화할 여지가 있습니다:

  1. 기계 학습 알고리즘을 도입하여 모델 훈련을 통해 다중 지표 변수를 자동으로 최적화 할 수 있습니다.
  2. 시장의 변동에 따라 슬라이드 크기를 조정할 수 있는 적응 슬라이드 설정을 추가하여 고정 디스크 효과를 향상시킬 수 있습니다.
  3. 수량확인 메커니즘을 도입하여 추세가 급격하게 변하는 손실을 방지할 수 있다.

요약하다

이 전략은 비교 시간축 가격 움직임을 통해 긴 짧은 라인 관계를 판단하고, 여러 지표 통합 분석과 결합하여 거래 신호를 생성하고, 자동 다중 공허 헤드 스위치를 구현하고, 재 측정 효과가 좋습니다. 우리는 또한 이 전략에 대한 개선의 여지가 있다는 것을 발견했습니다. 머신 학습, 적응 슬라이드, 가격 확인 등의 방법을 도입하여 향후 최적화하여 전략의 실장 효과를 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Drexel Strategy", overlay=true )
Length1=7
Length2=9
Multiplier=input(1.5,"Multiplier")
jma(src,length) =>
    beta = 0.45*(length-1)/(0.45*(length-1)+2)
    alpha = beta
    tmp0 = (1-alpha)*src + alpha*nz(tmp0[1])
    tmp1 = (src - tmp0[0])*(1-beta) + beta*nz(tmp1[1])
    tmp2 = tmp0[0] + tmp1[0]
    tmp3 = (tmp2[0] - nz(tmp4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(tmp3[1])
    tmp4 = nz(tmp4[1]) + tmp3[0]
    JMA = tmp4
    JMA
rsx(src,length) =>
    f90_ = (nz(f90_[1]) == 0.0) ? 1.0 : (nz(f88[1]) <= nz(f90_[1])) ? nz(f88[1])+1 : nz(f90_[1])+1
    f88 = (nz(f90_[1]) == 0.0) and (length-1 >= 5) ? length-1.0 : 5.0 
    f8 =  100.0*(src) 
    f18 = 3.0 / (length + 2.0) 
    f20 = 1.0 - f18 
    f10 = nz(f8[1])
    v8 = f8 - f10 
    f28 = f20 * nz(f28[1]) + f18 * v8 
    f30 = f18 * f28 + f20 * nz(f30[1])
    vC = f28 * 1.5 - f30 * 0.5 
    f38 = f20 * nz(f38[1]) + f18 * vC 
    f40 = f18 * f38 + f20 * nz(f40[1])
    v10 = f38 * 1.5 - f40 * 0.5 
    f48 = f20 * nz(f48[1]) + f18 * v10 
    f50 = f18 * f48 + f20 * nz(f50[1])
    v14 = f48 * 1.5 - f50 * 0.5 
    f58 = f20 * nz(f58[1]) + f18 * abs(v8) 
    f60 = f18 * f58 + f20 * nz(f60[1])
    v18 = f58 * 1.5 - f60 * 0.5
    f68 = f20 * nz(f68[1]) + f18 * v18 
    f70 = f18 * f68 + f20 * nz(f70[1])
    v1C = f68 * 1.5 - f70 * 0.5 
    f78 = f20 * nz(f78[1]) + f18 * v1C 
    f80 = f18 * f78 + f20 * nz(f80[1])
    v20 = f78 * 1.5 - f80 * 0.5
    f0 = ((f88 >= f90_) and (f8 != f10)) ? 1.0  : 0.0
    f90 = ((f88 == f90_) and (f0 == 0.0))  ? 0.0  : f90_
    v4_ = ((f88 < f90) and (v20 > 0.0000000001)) ? (v14 / v20 + 1.0) * 50.0 : 50.0
    rsx = ((v4_ > 100.0) ? 100.0 : (v4_ < 0.0) ? 0.0 : v4_)-50
    rsx
xPrice=open
emaA = ema(xPrice, Length2)  
Xprice = rsx(open,14)
XPrice = high, xprice = low
xe1 = jma(xPrice, Length1)
xe11 = jma(Xprice[1],Length1)
xe111 = jma(XPrice[1],Length1)
xe1111=jma(xprice[1],Length1)
xe2 = jma(xe1, Length1)
xe21 = jma(xe111, Length1)
xe3 = jma(xe2, Length1)
xe31 = jma(xe1111,Length2)
xe3a = jma(xe2,Length1)
xe4 = jma(xe3, Length1)
xe5 = jma(xe4, Length1)
xe6 = jma(xe5, Length1)
b = 0.7
c1 = -b*b*b
c2 = 3*b*b+3*b*b*b
c3 = -6*b*b-3*b-3*b*b*b
c3a = nz(c3a[1])
c4 = 1+3*b+b*b*b+3*b*b
TEMA = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3
DEMA = 2 * emaA - ema(emaA, Length2)
Length(mod)=>(mod*c3a)+Length2
Trend1=TEMA/DEMA
a=rsx(open,Length(2))
b1=rsx(open,Length(3))
c=rsx(open,Length(5))
d=rsx(open,Length(8))
e=rsx(open,Length(13))
f=rsx(open,Length(21))
g=rsx(open,Length(34))
h=rsx(open,Length(55))
i=rsx(open,Length(89))
j=rsx(open,Length(144))
trend1 = (((a-b1)+(c-d)+(e-f)+(g-h)+(i-j))/10)
trend = trend1>0?avg(a,b,c4,c2):trend1==0?XPrice:avg(rsx(open,24),jma(open,24),rsx(jma(open,24),24))
trend2 = trend1>0?avg(d,e,c2,c1):trend1==0?XPrice:avg(rsx(open,48),jma(open,48),rsx(jma(open,48),48))
trend3 = trend1>0?avg(d,e,c2,c1):trend1==0?xprice:avg(rsx(open,96),jma(open,96),rsx(jma(open,96),96))
bc=request.security(syminfo.tickerid,'15',trend)
bc1=request.security(syminfo.tickerid,'15',trend2)
bc2=request.security(syminfo.tickerid,'15',trend3)
bd=request.security(syminfo.tickerid,'30',trend)
bd1=request.security(syminfo.tickerid,'30',trend2)
bd2=request.security(syminfo.tickerid,'30',trend3)
be=request.security(syminfo.tickerid,'60',trend)
be1=request.security(syminfo.tickerid,'60',trend2)
be2=request.security(syminfo.tickerid,'60',trend3)
bf=request.security(syminfo.tickerid,'120',trend)
bf1=request.security(syminfo.tickerid,'120',trend2)
bf2=request.security(syminfo.tickerid,'120',trend3)
bg=request.security(syminfo.tickerid,'240',trend)
bg1=request.security(syminfo.tickerid,'240',trend2)
bg2=request.security(syminfo.tickerid,'240',trend3)
bh=request.security(syminfo.tickerid,'D',trend)
bh1=request.security(syminfo.tickerid,'D',trend2)
bh2=request.security(syminfo.tickerid,'D',trend3)
Trend=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh))
Trend11=((bc-bc1)+(bd-bd1)+(be-be1)+(bf-bf1)+(bg-bg1)+(bh1))
Trend33 = max(min(min(min(bc2,bd2),min(be2,bf2)),bg2),bh2)
AverageTrend=sma(Trend1,1000)
StdDev=Multiplier*stdev(Trend1,1000)
TopBand=AverageTrend+StdDev
BotBand=AverageTrend-StdDev
ap=open
n1=10
n2=21
esa1 = jma(ap, n1)
d1 = jma(abs(ap - esa1), n1)
x1 = trend3==Trend33
y1 = trend2==Trend11 
ci = (ap - esa1) / (0.015 * d1)
tci = jma(ci, n2)
wt1=tci
wt2=sma(wt1,4)
fast=jma(open,5)
slow=jma(open,13)
macd=fast-slow
signal=sma(macd,4)
WaveTrend1=wt1-wt2
JMACD1=macd-signal
rsi = (((rsi(open,6))-50)*3)
g1=rsi>Trend1 and WaveTrend1>Trend1 and JMACD1>Trend1
h1=g1?tci*c3a:nz(h[1])
strategy.entry("Long",true,when=x1)
strategy.close("Long",y1)
strategy.entry("Short",false,when=y1)
strategy.close("Short",x1)