커뮤니티

지표문의

프로필 이미지
한글나라
2016-05-12 19:12:15
152
글번호 98012
답변완료
전에 ADX 풀이식을 요청하였습니다. 예를 들어 macd를 값으로 집어넣어서 그것의 adx를 출력하고자 하면.. 이 식을 어떻게 고쳐야 할지요? 실력이 너무 없어서 죄송합니다. Inputs: Length(14); Var : Counter(0), CummDMI(0), Return(0),ADXV(0); Var : DMIP(0), DMIM(0),DMIV(0),CB(0); Var : TRange(0),PlusDM14(0), PlusDM(0), MinusDM(0),DIPlusv(0),DIMinusv(0),MinusDM14(0); CB = CurrentBar; If CB == 1 Then { DIPlusv = 0; PlusDM14 = 0; DIMinusv = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Length - 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; If PlusDM >= MinusDM Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then DIPlusv = 100 * PlusDM14 / TRange; Else DIPlusv = 0 ; If TRange <> 0 Then DIMinusv = 100 * MinusDM14 / TRange; Else DIMinusv = 0; } Else If index+1 > Length 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 PlusDM >= MinusDM Then MinusDM = 0 ; If Length > 0 Then { TRange = TRange - (TRange / Length) + TrueRange; PlusDM14 = PlusDM14 - (PlusDM14 / Length) + PlusDM; MinusDM14 = MinusDM14 - (MinusDM14 / Length) + MinusDM; } If TRange <> 0 Then { DIPlusv = 100 * PlusDM14 / TRange; DIMinusv = 100 * MinusDM14 / TRange; } Else { DIPlusv = 0 ; DIMinusv = 0; } } If DIPlusv + DIMinusv == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DIPlusv - DIMinusv) / (DIPlusv + DIMinusv); Return = 0; DMIV = DMI(Length); If CB >= 1 AND Length > 0 Then Begin If CurrentBar < Length Then begin CummDMI = 0; for Counter = 0 To CB - 1 Begin CummDMI = CummDMI + DMIV[Counter]; End; Return = CummDMI / CB; End Else Return = (ADXv * (Length - 1) + DMIv) / Length; End; ADXv = Return; plot1(ADXv);
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-05-13 15:13:50

안녕하세요 예스스탁입니다. Inputs: Length(14),short(12),long(26); Var : Counter(0), CummDMI(0), Return(0),ADXV(0); Var : DMIP(0), DMIM(0),DMIV(0),CB(0),지표값(0); Var : TRange(0),PlusDM14(0), PlusDM(0), MinusDM(0),DIPlusv(0),DIMinusv(0),MinusDM14(0); var : TH(0),TL(0),TR(0); 지표값 = MACD(short,long); CB = CurrentBar; If 지표값[1] > 지표값 then TH = 지표값[1]; else TH = 지표값; If 지표값[1] < 지표값 then TL = 지표값[1]; else TL = 지표값; TR = TH-TL; If CB == 2 Then { DIPlusv = 0; PlusDM14 = 0; DIMinusv = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Length - 1 { If 지표값[Counter] - 지표값[Counter+1] < 0 Then PlusDM = 0; Else PlusDM = 지표값[Counter] - 지표값[Counter+1]; If 지표값[Counter+1] - 지표값[Counter] < 0 Then MinusDM = 0; Else MinusDM = 지표값[Counter+1] - 지표값[Counter]; If MinusDM >= PlusDM Then PlusDM = 0; If PlusDM >= MinusDM Then MinusDM = 0; TRange = TRange + TR[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then DIPlusv = 100 * PlusDM14 / TRange; Else DIPlusv = 0 ; If TRange <> 0 Then DIMinusv = 100 * MinusDM14 / TRange; Else DIMinusv = 0; } Else If CB > 2 Then { If 지표값[0] - 지표값[1] < 0 Then PlusDM = 0; Else PlusDM = 지표값[0] - 지표값[1]; If 지표값[1] - 지표값[0] < 0 Then MinusDM = 0; Else MinusDM = 지표값[1] - 지표값[0]; If MinusDM >= PlusDM Then PlusDM = 0; If PlusDM >= MinusDM Then MinusDM = 0 ; If Length > 0 Then { TRange = TRange - (TRange / Length) + TR; PlusDM14 = PlusDM14 - (PlusDM14 / Length) + PlusDM; MinusDM14 = MinusDM14 - (MinusDM14 / Length) + MinusDM; } If TRange <> 0 Then { DIPlusv = 100 * PlusDM14 / TRange; DIMinusv = 100 * MinusDM14 / TRange; } Else { DIPlusv = 0 ; DIMinusv = 0; } } If DIPlusv + DIMinusv == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DIPlusv - DIMinusv) / (DIPlusv + DIMinusv); Return = 0; If CB >= 1 AND Length > 0 Then Begin If CurrentBar < Length Then begin CummDMI = 0; for Counter = 0 To CB - 1 Begin CummDMI = CummDMI + DMIV[Counter]; End; Return = CummDMI / CB; End Else Return = (ADXv * (Length - 1) + DMIv) / Length; End; ADXv = Return; plot1(ADXV); 즐거운 하루되세요 > 한글나라 님이 쓴 글입니다. > 제목 : 지표문의 > 전에 ADX 풀이식을 요청하였습니다. 예를 들어 macd를 값으로 집어넣어서 그것의 adx를 출력하고자 하면.. 이 식을 어떻게 고쳐야 할지요? 실력이 너무 없어서 죄송합니다. Inputs: Length(14); Var : Counter(0), CummDMI(0), Return(0),ADXV(0); Var : DMIP(0), DMIM(0),DMIV(0),CB(0); Var : TRange(0),PlusDM14(0), PlusDM(0), MinusDM(0),DIPlusv(0),DIMinusv(0),MinusDM14(0); CB = CurrentBar; If CB == 1 Then { DIPlusv = 0; PlusDM14 = 0; DIMinusv = 0; MinusDM14 = 0; TRange = 0; For Counter = 0 To Length - 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; If PlusDM >= MinusDM Then MinusDM = 0; TRange = TRange + TrueRange[Counter]; PlusDM14 = PlusDM14 + PlusDM; MinusDM14 = MinusDM14 + MinusDM; } If TRange <> 0 Then DIPlusv = 100 * PlusDM14 / TRange; Else DIPlusv = 0 ; If TRange <> 0 Then DIMinusv = 100 * MinusDM14 / TRange; Else DIMinusv = 0; } Else If index+1 > Length 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 PlusDM >= MinusDM Then MinusDM = 0 ; If Length > 0 Then { TRange = TRange - (TRange / Length) + TrueRange; PlusDM14 = PlusDM14 - (PlusDM14 / Length) + PlusDM; MinusDM14 = MinusDM14 - (MinusDM14 / Length) + MinusDM; } If TRange <> 0 Then { DIPlusv = 100 * PlusDM14 / TRange; DIMinusv = 100 * MinusDM14 / TRange; } Else { DIPlusv = 0 ; DIMinusv = 0; } } If DIPlusv + DIMinusv == 0 Then DMIv = 0; Else DMIv = 100 * AbsValue(DIPlusv - DIMinusv) / (DIPlusv + DIMinusv); Return = 0; DMIV = DMI(Length); If CB >= 1 AND Length > 0 Then Begin If CurrentBar < Length Then begin CummDMI = 0; for Counter = 0 To CB - 1 Begin CummDMI = CummDMI + DMIV[Counter]; End; Return = CummDMI / CB; End Else Return = (ADXv * (Length - 1) + DMIv) / Length; End; ADXv = Return; plot1(ADXv);