충전 옵션은 이동 평균 사이에 추가됩니다. (예정적으로 비활성화되어 있으며, 원하는 경우 구성에서 활성화됩니다.) 2개의 평균이 녹색이라면 채우는 녹색이 될 것이고, 2개의 평균이 빨간색이라면 채우는 빨간색이 될 것입니다. 이것은 당신이 빠른 평균과 느린 평균을 사용하는 경우 건강한 트렌드를 확인 할 것입니다. 빠른 평균 방향 변화가 보라색으로 채워질 경우 이것은 여러 가지를 나타낼 수 있습니다. 트렌드의 보정이 생성되고 있으며, 가격의 가능한 휴식, 측면의 가능한 시작, 트렌드의 가능한 변화, 색이 보라색일 때 거래자는 무슨 일이 일어날 수 있는지 정의 할 수있는 일반적인 맥락을 분석해야합니다.
다음과 같은 경보가 만들어졌습니다.
백테스트
//@version=3 study(shorttitle="MA_2X", title="2 Moving Average Color Direction Detection ", overlay=true) // === INPUTS ma_1 = input(true, title="1-MA") ma_type = input(defval="SMA", title="1-MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"]) ma_len = input(defval=20, title="1-MA Lenght", minval=1) ma_src = input(close, title="1-MA Source") reaction_ma_1 = input(defval=3, title="1-MA Reaction", minval=1) ma_2 = input(true, title="2-MA") ma_type_b = input(defval="SMA", title="2-MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"]) ma_len_b = input(defval=8, title="2-MA Lenght", minval=1) ma_src_b = input(close, title="2-MA Source") reaction_ma_2 = input(defval=3, title="2-MA Reaction", minval=1) filling = input(false, title="FILLING") // SuperSmoother filter // © 2013 John F. Ehlers variant_supersmoother(src,len) => a1 = exp(-1.414*3.14159 / len) b1 = 2*a1*cos(1.414*3.14159 / len) c2 = b1 c3 = (-a1)*a1 c1 = 1 - c2 - c3 v9 = 0.0 v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2]) v9 variant_smoothed(src,len) => v5 = 0.0 v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len v5 variant_zerolagema(src,len) => ema1 = ema(src, len) ema2 = ema(ema1, len) v10 = ema1+(ema1-ema2) v10 variant_doubleema(src,len) => v2 = ema(src, len) v6 = 2 * v2 - ema(v2, len) v6 variant_tripleema(src,len) => v2 = ema(src, len) v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) v7 variant(type, src, len) => type=="EMA" ? ema(src,len) : type=="WMA" ? wma(src,len): type=="VWMA" ? vwma(src,len) : type=="SMMA" ? variant_smoothed(src,len) : type=="DEMA" ? variant_doubleema(src,len): type=="TEMA" ? variant_tripleema(src,len): type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) : type=="SSMA" ? variant_supersmoother(src,len) : type=="ZEMA" ? variant_zerolagema(src,len) : type=="TMA" ? sma(sma(src,len),len) : sma(src,len) // === Moving Average ma_series = variant(ma_type,ma_src,ma_len) ma_series_b = variant(ma_type_b,ma_src_b,ma_len_b) direction = 0 direction := rising(ma_series,reaction_ma_1) ? 1 : falling(ma_series,reaction_ma_1) ? -1 : nz(direction[1]) change_direction= change(direction,1) direction_b = 0 direction_b := rising(ma_series_b,reaction_ma_2) ? 1 : falling(ma_series_b,reaction_ma_2) ? -1 : nz(direction_b[1]) change_direction_b= change(direction_b,1) // Plot MA series and color it according too direction pcol = direction>0 ? lime : direction<0 ? red : na a=plot( ma_1? ma_series :na, color=pcol,style=line,join=true,linewidth=3,transp=10,title="1-MA Plot") pcol_b = direction_b>0 ? lime : direction_b<0 ? red : na b=plot( ma_2? ma_series_b :na, color=pcol_b,style=line,join=true,linewidth=2,transp=10,title="2-MA Plot") fill(a,b,color=direction==1 and direction_b==1 and filling == true?lime:direction==-1 and direction_b==-1and filling == true?red:direction==1 and direction_b==-1and filling == true?purple:direction==-1 and direction_b==1and filling == true?purple:white,transp=80) /////// Alerts /////// alertcondition(change_direction,title="Change Direction 1-MA",message="Change Direction 1-MA") alertcondition(change_direction_b,title="Change Direction 2-MA",message="Change Direction 2-MA") alertcondition(crossunder(ma_series_b,ma_series),title="Cross Under 2-Ma/1-Ma",message="Cross Under 2-Ma/1-Ma") alertcondition(crossunder(ma_series,ma_series_b),title="Cross Under 1-Ma/2-Ma",message="Cross Under 1-Ma/2-Ma") alertcondition(crossover(ma_series_b,ma_series),title="Cross Over 2-Ma/1-Ma",message="Cross Over 2-Ma/1-Ma") alertcondition(crossover(ma_series,ma_series_b),title="Cross Over 1-Ma/2-Ma",message="Cross Over 1-Ma/2-Ma") alertcondition(cross(ma_series_b,ma_series),title="Cross 1-Ma/2-Ma",message="Cross 1-Ma/2-Ma") if crossunder(ma_series,ma_series_b) strategy.entry("Enter Long", strategy.long) else if crossunder(ma_series_b,ma_series) strategy.entry("Enter Short", strategy.short)