커뮤니티

ADX, +DI 및 -DI 지표 문의 드립니다

프로필 이미지
아름다운사람들
2024-01-05 23:22:08
1026
글번호 175485
답변완료
안녕하세요. 항상 도움을 받고 있습니다. ADX, +DI 및 -DI 지표 관련해서 아래와 같은 예스랭귀지 수식을 찾았습니다. 이 수식을 바탕으로 자바스크립트로 변환해 보았습니다만, ADX가 잘 구현되었는지 궁금합니다. 시스템식에 ADX >30으로 해 놨는데, 신호가 발생 하는게 하나도 없네요. 자바스크립트 수식 검토 부탁합니다. ==============예스랭귀지=================== input : Period(14); var : PDI(0),MDI(0),ADXv(0); PDI = ema(iff(H-H[1]>0 && H-H[1]>L[1]-L,H-H[1],0),Period)/ ema(max(max(H-L,abs(C[1]-H)),abs(C[1]-L)),Period)*100; MDI = ema(iff(L[1]-L>0 && H-H[1]<L[1]-L,L[1]-L,0),Period)/ ema(max(max(H-L,abs(C[1]-H)),abs(C[1]-L)),Period)*100; ADXV = ema(abs(PDI-MDI)/(PDI+MDI),period)*100; plot1(ADXv); plot2(PDI); plot3(MDI); ==============자바스크립트=================== var DMplus, DMminus, TR, ATR, DMplus_avg, DMminus_avg, PDI, MDI, DX, ADX, PeriodADX, PeriodDI; // ADX(Average Directional Movement Index) var TR1 = []; var TR2 = []; var TR3 = []; var TR = []; var DMplus = []; var DMminus = []; var PeriodADX = 11; var PeriodDI = 28; var DMplusCnt = 0; var DMminusCnt = 0; for (var i = PeriodADX; i >= 0; i--) { TR1[i] = MKT.High(i+1) - MKT.Low(i+1); TR2[i] = Math.abs(MKT.Close(i+2) - MKT.High(i+1)); TR3[i] = Math.abs(MKT.Close(i+2) - MKT.Low(i+1)); TR[i] = Math.max(TR1[i], TR2[i], TR3[i]); if(((MKT.High(i+1) > MKT.High(i+2)) && (MKT.High(i+1) - MKT.High(i+2)) > (MKT.Low(i+2) - MKT.Low(i+1)))) { DMplus[i] = (MKT.High(i+1) - MKT.High(i+2)); } else DMplus[i] = 0; if(((MKT.Low(i+2) > MKT.Low(i+1)) && (MKT.High(i+1) - MKT.High(i+2)) < (MKT.Low(i+2) - MKT.Low(i+1)))) { DMminus[i] = (MKT.Low(i+2) - MKT.Low(i+1)); } else DMminus[i] = 0; } var ATR = 0; for (var i = 0; i < TR.length; i++) ATR += TR[i]; ATR = ATR/(TR.length); var DMplus_avg = 0; for (var i = 0; i < DMplus.length; i++) DMplus_avg += DMplus[i]; DMplus_avg = DMplus_avg/(DMplus.length); var DMminus_avg = 0; for (var i = 0; i < DMminus.length; i++) DMminus_avg += DMminus[i]; DMminus_avg = DMminus_avg/(DMminus.length); PDI = DMplus_avg / ATR * 100; MDI = DMminus_avg / ATR * 100; DX = Math.abs(PDI-MDI) / (PDI+MDI); ADX = DX / (PeriodADX+1) * 100;
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-01-08 11:49:44

안녕하세요 예스스탁입니다. 올리신 내용은 작성해 드리는데 시간이 많이 소모됩니다. 업무상 일정이상 요구되는 내용은 저희가 작성해 드리지 않습니다. 즐거운 하루되세요 > 아름다운사람들 님이 쓴 글입니다. > 제목 : ADX, +DI 및 -DI 지표 문의 드립니다 > 안녕하세요. 항상 도움을 받고 있습니다. ADX, +DI 및 -DI 지표 관련해서 아래와 같은 예스랭귀지 수식을 찾았습니다. 이 수식을 바탕으로 자바스크립트로 변환해 보았습니다만, ADX가 잘 구현되었는지 궁금합니다. 시스템식에 ADX >30으로 해 놨는데, 신호가 발생 하는게 하나도 없네요. 자바스크립트 수식 검토 부탁합니다. ==============예스랭귀지=================== input : Period(14); var : PDI(0),MDI(0),ADXv(0); PDI = ema(iff(H-H[1]>0 && H-H[1]>L[1]-L,H-H[1],0),Period)/ ema(max(max(H-L,abs(C[1]-H)),abs(C[1]-L)),Period)*100; MDI = ema(iff(L[1]-L>0 && H-H[1]<L[1]-L,L[1]-L,0),Period)/ ema(max(max(H-L,abs(C[1]-H)),abs(C[1]-L)),Period)*100; ADXV = ema(abs(PDI-MDI)/(PDI+MDI),period)*100; plot1(ADXv); plot2(PDI); plot3(MDI); ==============자바스크립트=================== var DMplus, DMminus, TR, ATR, DMplus_avg, DMminus_avg, PDI, MDI, DX, ADX, PeriodADX, PeriodDI; // ADX(Average Directional Movement Index) var TR1 = []; var TR2 = []; var TR3 = []; var TR = []; var DMplus = []; var DMminus = []; var PeriodADX = 11; var PeriodDI = 28; var DMplusCnt = 0; var DMminusCnt = 0; for (var i = PeriodADX; i >= 0; i--) { TR1[i] = MKT.High(i+1) - MKT.Low(i+1); TR2[i] = Math.abs(MKT.Close(i+2) - MKT.High(i+1)); TR3[i] = Math.abs(MKT.Close(i+2) - MKT.Low(i+1)); TR[i] = Math.max(TR1[i], TR2[i], TR3[i]); if(((MKT.High(i+1) > MKT.High(i+2)) && (MKT.High(i+1) - MKT.High(i+2)) > (MKT.Low(i+2) - MKT.Low(i+1)))) { DMplus[i] = (MKT.High(i+1) - MKT.High(i+2)); } else DMplus[i] = 0; if(((MKT.Low(i+2) > MKT.Low(i+1)) && (MKT.High(i+1) - MKT.High(i+2)) < (MKT.Low(i+2) - MKT.Low(i+1)))) { DMminus[i] = (MKT.Low(i+2) - MKT.Low(i+1)); } else DMminus[i] = 0; } var ATR = 0; for (var i = 0; i < TR.length; i++) ATR += TR[i]; ATR = ATR/(TR.length); var DMplus_avg = 0; for (var i = 0; i < DMplus.length; i++) DMplus_avg += DMplus[i]; DMplus_avg = DMplus_avg/(DMplus.length); var DMminus_avg = 0; for (var i = 0; i < DMminus.length; i++) DMminus_avg += DMminus[i]; DMminus_avg = DMminus_avg/(DMminus.length); PDI = DMplus_avg / ATR * 100; MDI = DMminus_avg / ATR * 100; DX = Math.abs(PDI-MDI) / (PDI+MDI); ADX = DX / (PeriodADX+1) * 100;