Search

ADX

함수설명

ADX(Average Directional Movement Index ) 지표함수

작성방법

ADX(기간)
C
복사

매개변수 설명

"기간": Numeric, 최근 N개봉 기간값을 입력
계산
PDM = (당일고가-전일고가 > 0) 이고 (당일고가-전일고가 > 전일저가-당일저가) 이면, (당일고가-전일고가) 이고, 아니면 0. MDM = (전일저가-당일저가 > 0) 이고 (당일고가-전일고가 < 전일저가-당일저가) 이면, (전일저가-당일저가) 이고, 아니면 0. PDMMA = (+DM)의 Period 일 이동평균 MDMMA = (-DM)의 Period 일 이동평균 DX = PDMMA-MDMMA의 절대값 / (PDMMA + MDMMA) ×100 ADX = DX의 Period 일 이동평균

활용예시

//인라인함수(수식안에서 만들어 사용하는 함수) //DIPlus 함수식 Function Infx_DIPlus Numeric { Input : Length(NumericSimple) ; Var : Counter(0), TRange(0), MyRange(Length); var : PlusDM14(0), PlusDM(0), MinusDM(0); If CurrentBar == 1 Then { MyRange = Length; Infx_DIPlus = 0; PlusDM14 = 0; TRange = 0; For Counter = 0 To MyRange - 1 { If High[Counter] - High[Counter+1] < 0 Then PlusDM = 0; Else PlusDM = High[Counter] - High[Counter+1]; If Low[Counter+1] - Low[Counter] < 0 Then MinusDM = 0; Else MinusDM = Low[Counter+1] - Low[Counter]; If MinusDM >= PlusDM Then PlusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; } If TRange <> 0 Then Infx_DIPlus = 100 * PlusDM14 / TRange; Else Infx_DIPlus = 0 ; } Else If CurrentBar > 1 Then { If High[0] - High[1] < 0 Then PlusDM = 0; Else PlusDM = High[0] - High[1]; If Low [1] - Low [0] < 0 Then MinusDM = 0; Else MinusDM = Low[1] - Low[0]; If MinusDM >= PlusDM Then PlusDM = 0; If MyRange > 0 Then Begin TRange = TRange[1] - (TRange[1] / MyRange) + TrueRange; PlusDM14 = PlusDM14[1] - (PlusDM14[1] / MyRange) + PlusDM; End; If TRange <> 0 Then Infx_DIPlus = 100 * PlusDM14 / TRange; Else Infx_DIPlus = 0 ; } } EndFunction //DIMinus 함수식 Function Infx_DIMinus Numeric { Input : Length(NumericSimple); Var : Counter(0), TRange(0), MyRange(Length); var : MinusDM14(0), MinusDM(0), PlusDM(0); If CurrentBar == 1 Then { MyRange = Length; Infx_DIMinus = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To MyRange-1 { If High[Counter] - High[Counter+1] < 0 Then PlusDM = 0 ; Else PlusDM = High[Counter] - High[Counter + 1]; If Low[Counter + 1] - Low[Counter] < 0 Then MinusDM = 0; Else MinusDM = Low[Counter + 1] - Low[Counter]; If PlusDM >= MinusDM Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then Infx_DIMinus = 100 * MinusDM14 / TRange; Else Infx_DIMinus = 0; } Else If CurrentBar > 1 Then { If High[0] - High[1] < 0 Then PlusDM = 0; Else PlusDM = High[0] - High[1]; If Low[1] - Low [0] < 0 Then MinusDM = 0 ; Else MinusDM = Low[1] - Low[0] ; If PlusDM >= MinusDM Then MinusDM = 0 ; If MyRange > 0 Then { TRange = TRange[1] - (TRange[1] / MyRange) + TrueRange; MinusDM14 = MinusDM14[1] - (MinusDM14[1] / MyRange) + MinusDM; } If TRange <> 0 Then Infx_DIMinus = 100 * MinusDM14 / TRange; Else Infx_DIMinus = 0; } } EndFunction //DMI 함수식 Function Infx_DMI Numeric { Inputs: Length(NumericSimple); Variables: DP(0), DM(0); DP = Infx_DIPlus(Length); DM = InFx_DIMinus(Length); If DP + DM == 0 Then Infx_DMI = 0; Else Infx_DMI = 100 * AbsValue(DP - DM) / (DP + DM); } EndFunction //ADX 함수식 Function infx_ADXV Numeric { Inputs: Length(Numeric); Variables: Counter(0), CummDMI(0), Return(0), DMIV(0); Return = 0; DMIV = Infx_DMI(Length); If CurrentBar >= 1 AND Length > 0 Then { If CurrentBar < Length Then { CummDMI = 0; for Counter = 0 To CurrentBar - 1 { CummDMI = CummDMI + DMIV[Counter]; } Return = CummDMI / CurrentBar; } Else Return = (infx_ADXV[1] * (Length - 1) + DMIV) / Length; } infx_ADXV = Return; } EndFunction input : Period(14); var : ADXV(0); ADXV = infx_ADXV(14); Plot1(ADXV);
C
복사
뒤로가기는 좌측상단의 목차 버튼을 눌러주세요.