다주기 적응 트렌드 예측 전략

저자:차오장, 날짜: 2024-02-01 14:34:38
태그:

img

전반적인 설명

이 전략은 트렌드 및 출력 거래 신호를 예측하기 위해 시장 운영의 단계점과 결합하여 다주기 적응적 이동 평균 및 지그자그 위험 평가 지표를 사용합니다. 전략 이름은 다주기 적응적 트렌드 예측 전략입니다.

전략 원칙

전략의 핵심 논리는 두 가지 주요 라인으로 나뉘어 있다. 첫 번째 주요 라인은 다중주기 필터링 판단 시스템을 구축하기 위해 다른 매개 변수와 함께 적응적인 이동 평균 nAMA를 이용한다. 두 번째 주요 라인은 다중주기 위험 평가 시스템을 구축하기 위해 다른 매개 변수와 함께 지그재그 위험 평가 시스템을 이용한다. 마지막으로 두 주요 라인은 결합된다. 짧은 주기 라인이 긴 주기를 초과할 때 구매 신호가 생성된다. 짧은 주기 라인이 긴 주기 라인의 아래에 있을 때 판매 신호가 생성된다.

특히, 첫 번째 메인 라인은 각각 10 사이클 및 4, 24 매개 변수의 적응 이동 평균을 설정합니다. 두 번째 메인 라인은 각각 7 사이클 및 4, 300 매개 변수의 지그자그 위험 평가 라인을 설정합니다. 마지막으로, 첫 번째 메인 라인의 10 사이클 라인은 31 사이클 라인과 비교하여 거래 신호를 형성합니다. 10 사이클 라인이 31 사이클 라인의 위로 상승하면 구매 신호가 생성됩니다. 10 사이클 라인이 31 사이클 라인의 아래에 떨어지면 판매 신호가 생성됩니다.

또한, 전략은 또한 볼륨 가격 확인 모듈을 설정한다. 거래 신호는 거래량이 6주기 평균 거래량보다 크었을 때만 유효하다. 이것은 어느 정도 잘못된 신호를 필터링할 수 있다. 마지막으로, 전략은 참조 신호로 다른 사이클 레벨의 단계적 지점을 그린다.

전략적 이점 분석

이 전략의 가장 큰 장점은 시장 조건에 따라 주기를 적응적으로 조정하여 주기를 동적으로 조정할 수있는 다중 주기 적응 구조의 적용입니다. 트렌드 섹션이나 충격 영역에서 전략의 트렌드 추적 능력을 향상시키기 위해 적절한 주기 매개 변수 조합을 찾을 수 있습니다.

또한 이 전략은 거래 위험을 효과적으로 통제하고 고위험 단계에서 포지션을 설정하는 것을 피하기 위해 지그자그 위험 평가 시스템의 다주기 공동 필터링을 사용합니다. 동시에 이 전략은 부피가 적당한 경우 잘못된 신호를 생성하지 않도록 부피 가격 필터링 조건을 설정합니다.

전략 위험 분석

이 전략의 가장 큰 위험은 여러 사이클 라인의 동일한 방향 판단을 필요로 하기 때문에 단기 역시장을 포착하는 능력이 약하기 때문이다. 단기 사이클 라인과 긴 사이클 라인이 동시에 변화할 때 불분명한 신호가 쉽게 생성될 수 있다. 파라미터 사이클은 최적화를 위해 단축될 수 있다.

또한, 적응형 이동 평균 및 지그자그 위험 평가 시스템의 주주기 단계는 더 넓은 시장에 비해 상대적으로 짧으며, 더 긴 수준으로 인해 약간의 지연이 있습니다. 주주기 단계는 지연을 줄이기 위해 적절하게 연장 될 수 있습니다.

전략 최적화 방향

  1. 적응형 이동 평균 및 지그자그 리스크 평가 라인의 주요 사이클 매개 변수를 5 사이클과 20 사이클로 단축하여 단기 시장 역전 현상을 더 잘 파악합니다.

  2. 주요 사이클 매개 변수를 20 사이클과 50 사이클로 늘려 더 긴 평준 시장 드라이버의 지연을 줄이십시오.

  3. 거래 채널 매개 변수를 ATR 채널의 0.5배로 최적화하여 소음 거래의 가능성을 줄이십시오.

  4. 신호 신뢰성을 높이기 위해 MACD와 같은 결과 확인 지표를 추가합니다.

요약

이 전략은 다중주기 적응형 거래 결정 시스템을 구축하기 위해 적응형 이동 평균, 지그재그 위험 평가 및 볼륨 가격 분석과 같은 여러 기술적 지표를 포괄적으로 사용합니다. 매개 변수 최적화 및 조정을 통해 트렌드와 범위를 자동으로 식별하여 다양한 유형의 시장에 적용 할 수 있습니다. 전략 논리는 명확하고 파고 들어가기 가치가 있으며 권장되는 양적 방법입니다.


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

//@version=2
strategy("Best Rabbit Strategy", shorttitle="Rabbit God",overlay=true)
Length = input(10, minval=1)
xPrice = close
xvnoise = abs(xPrice - xPrice[1])
Fastend = input(2)
Slowend = input(30)
nfastend = 2/(Fastend + 1)
nslowend = 2/(Slowend + 1)
nsignal = abs(xPrice - xPrice[Length])
nnoise = sum(xvnoise, Length)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
nAMA = nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1]))

Length2 = input(10, minval=1)
xPrice2 = close
xvnoise2 = abs(xPrice2 - xPrice2[1])
Fastend2 = input(4)
Slowend2 = input(24)
nfastend2 = 2/(Fastend2 + 1)
nslowend2 = 2/(Slowend2 + 1)
nsignal2 = abs(xPrice2 - xPrice2[Length2])
nnoise2 = sum(xvnoise, Length2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
nAMA2 = nz(nAMA2[1]) + nsmooth2 * (xPrice2 - nz(nAMA2[1]))

price = input(hl2)
len = input(defval=7,minval=1)
FC = input(defval=4,minval=1)
SC = input(defval=300,minval=1)
len1 = len/2
w = log(2/(SC+1))
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2 = highest(high,len)[len1]
L2 = lowest(low,len)[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((SC-FC)*(oldN-1))/(SC-1))+FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_)
out = (1-alpha)*nz(out[1]) + alpha*price

price2 = input(hl2)
len2 = input(defval=31,minval=1)
FC2 = input(defval=40,minval=1)
SC2 = input(defval=300,minval=1)
len12 = len2/2
w2 = log(2/(SC2+1))
H12 = highest(high,len12)
L12 = lowest(low,len12)
N12 = (H1-L1)/len12
H22 = highest(high,len2)[len12]
L22 = lowest(low,len2)[len12]
N22 = (H22-L22)/len12
H32 = highest(high,len2)
L32 = lowest(low,len2)
N32 = (H32-L32)/len2
dimen12 = (log(N12+N22)-log(N32))/log(2)
dimen2 = iff(N12>0 and N22>0 and N32>0,dimen12,nz(dimen12[1]))
alpha12 = exp(w*(dimen2-1))
oldalpha2 = alpha12>1?1:(alpha12<0.01?0.01:alpha12)
oldN2 = (2-oldalpha2)/oldalpha2
N4 = (((SC2-FC2)*(oldN2-1))/(SC2-1))+FC2
alpha_2 = 2/(N4+1)
alpha2 = alpha_2<2/(SC2+1)?2/(SC2+1):(alpha_2>1?1:alpha_2)
out2 = (1-alpha2)*nz(out2[1]) + alpha2*price2

tf = input(title="Resolution",  defval = "current")
vamp = input(title="VolumeMA",  defval=6)
vam = sma(volume, vamp)

up = high[3]>high[4] and high[4]>high[5] and high[2]<high[3] and high[1]<high[2] and volume[3]>vam[3]
down = low[3]<low[4] and low[4]<low[5] and low[2]>low[3] and low[1]>low[2] and volume[3]>vam[3]
fractalup =  up ? high[3] : fractalup[1] 
fractaldown = down ? low[3] : fractaldown[1]

fuptf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractalup)
fdowntf = request.security(syminfo.tickerid,tf == "current" ? timeframe.period : tf, fractaldown)

plot(fuptf, "FractalUp", color=lime, linewidth=1, style=cross, transp=0, offset =-3, join=false)
plot(fdowntf, "FractalDown", color=red, linewidth=1, style=cross, transp=0, offset=-3, join=false)

buyEntry= nAMA[0]>nAMA2[0] and out[0]>out2[0]
sellEntry= nAMA[0]<nAMA2[0] and out[0]<out2[0]

if (buyEntry)
    strategy.entry("Buy", strategy.long, comment="Long Position Entry")


if (sellEntry)
    strategy.entry("Sell", strategy.short, comment="Short Position Entry")

더 많은