커뮤니티

안녕하세요

프로필 이미지
돈을잃자
2024-04-09 08:06:41
633
글번호 178405
답변완료
아래 답해주신 내용을 "사용자 함수"로 등록해서 간편하게 사용가능할까요? 그래서 시스템식에서 hadx[2]<40 이런식으로 사용할수 있을런지요 고맙습니다 ^^ Inputs : Period(14); Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0); var : PlusDM(0), MinusDM(0),DMIv(0); var : DP(0),DM(0),hd(0),ld(0); var : cnt(0),b(0); var : CummDMI(0),ADXV(0); Array : Hadx[10](0); if bdate != Bdate[1] Then { idx = 0; DP = 0; DM = 0; DMIV = 0; ADXV = 0; } else idx = idx+1; If idx == Period+1 Then { DP = 0; DM = 0; PlusDM14 = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Period - 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]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If idx > Period+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]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; If Period > 0 Then Begin TRange = TRange[1] - (TRange[1] / Period) + TrueRange; PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM; MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM; End; If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If DP + DM == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DP - DM) / (DP + DM); If DMIV > 0 Then { b = b+1; if b < Period Then { CummDMI = CummDMI + DMIV; ADXV = CummDMI / b; } Else ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period; } if Bdate != Bdate[1] Then { For cnt = 9 DownTo 1 { Hadx[cnt] = Hadx[cnt-1]; } Hadx[0] = ADXV; } if ADXV > Hadx[0] Then Hadx[0] = Adxv;
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-04-09 15:44:50

안녕하세요 예스스탁입니다. 1 사용자함수로 만드시면 ADX기간과 이전일 값을 지정해야 하므로 매개변수가 2개인 함수가 됩니다. 함수는 매개변수를 ()안에 지정하므로 수식에서는 HADX(14,0) 이나 HADX(14,2)과 같이 사용하셔야 합니다. 2 사용자함수명 : HADX 반환값형 : 숫자형 Inputs : Period(Numeric),N(Numeric); Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0); var : PlusDM(0), MinusDM(0),DMIv(0); var : DP(0),DM(0),hd(0),ld(0); var : cnt(0),b(0); var : CummDMI(0),ADXV(0); Array : HH[10](0); if bdate != Bdate[1] Then { idx = 0; DP = 0; DM = 0; DMIV = 0; ADXV = 0; } else idx = idx+1; If idx == Period+1 Then { DP = 0; DM = 0; PlusDM14 = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Period - 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]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If idx > Period+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]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; If Period > 0 Then Begin TRange = TRange[1] - (TRange[1] / Period) + TrueRange; PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM; MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM; End; If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If DP + DM == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DP - DM) / (DP + DM); If DMIV > 0 Then { b = b+1; if b < Period Then { CummDMI = CummDMI + DMIV; ADXV = CummDMI / b; } Else ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period; } if Bdate != Bdate[1] Then { For cnt = 9 DownTo 1 { HH[cnt] = HH[cnt-1]; } HH[0] = ADXV; } if ADXV > HH[0] Then HH[0] = Adxv; HADX = HH[n]; 즐거운 하루되세요 > 돈을잃자 님이 쓴 글입니다. > 제목 : 안녕하세요 > 아래 답해주신 내용을 "사용자 함수"로 등록해서 간편하게 사용가능할까요? 그래서 시스템식에서 hadx[2]<40 이런식으로 사용할수 있을런지요 고맙습니다 ^^ Inputs : Period(14); Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0); var : PlusDM(0), MinusDM(0),DMIv(0); var : DP(0),DM(0),hd(0),ld(0); var : cnt(0),b(0); var : CummDMI(0),ADXV(0); Array : Hadx[10](0); if bdate != Bdate[1] Then { idx = 0; DP = 0; DM = 0; DMIV = 0; ADXV = 0; } else idx = idx+1; If idx == Period+1 Then { DP = 0; DM = 0; PlusDM14 = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Period - 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]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If idx > Period+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]; var1 = PlusDM; Var2 = MinusDM; If Var2 >= var1 Then PlusDM = 0; If var1 >= Var2 Then MinusDM = 0; If Period > 0 Then Begin TRange = TRange[1] - (TRange[1] / Period) + TrueRange; PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM; MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM; End; If TRange <> 0 Then { DP = 100 * PlusDM14 / TRange; DM = 100 * MinusDM14 / TRange; } Else { DP = 0; DM = 0; } } If DP + DM == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DP - DM) / (DP + DM); If DMIV > 0 Then { b = b+1; if b < Period Then { CummDMI = CummDMI + DMIV; ADXV = CummDMI / b; } Else ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period; } if Bdate != Bdate[1] Then { For cnt = 9 DownTo 1 { Hadx[cnt] = Hadx[cnt-1]; } Hadx[0] = ADXV; } if ADXV > Hadx[0] Then Hadx[0] = Adxv;