답변완료
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;
2024-01-05
1025
글번호 175485
지표
답변완료
array
안녕하세요?
알려주신 수식을 아래처럼 평균값을 출력하면 '0' 입니다
PLOT1(mav, "O",Blue);
PLOT2(mav*1000, "O",red);
PLOT3(mav*10000, "O",Black);
고맙습니다~
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : array
>
안녕하세요
예스스탁입니다.
input : N(20);
input : StartTime(100000),EndTime(120000);
var : cnt(0),Op(0),HH(0),LL(0),Tcond(False);
var : sum(0),mav(0),SumSqrt(0),stdv(0);
Array : HLR[50](-1);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
{
Tcond = False;
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
Op = O;
HH = H;
LL = L;
For cnt = 49 DownTo 1
{
HLR[cnt] = HLR[cnt-1];
}
}
if Tcond == true Then
{
if HH > 0 and H > HH Then
HH = H;
if LL > 0 and L < LL Then
LL = L;
HLR[0] = (HH-LL)/Op;
}
if HLR[N] >= 0 Then
{
#평균
sum = 0;
for cnt = 1 to N
{
sum = sum + HLR[cnt];
}
mav = sum/N;
#표준편차
SumSqrt = 0;
For cnt = 1 To N
{
SumSqrt = SumSqrt + (HLR[cnt] - mav)^2;
}
Stdv = SquareRoot(SumSqrt / N);
}
즐거운 하루되세요
> 코퍼 님이 쓴 글입니다.
> 제목 : array
>
안녕하세요?
혼자 응용하려니 어렵습니다
1. 5분봉 차트에서 매일 10시~12 중 발생하는 값
Op : 10시 시가
H : 최고가
L : 최저가
HLR : (H - L)/Op
2. 오늘을 제외한 어제부터 과거로 20일간 어레이에 HLR을 저장하고 어레이를 이용해서 평균과 표준편차를 구하고 싶습니다.
새해 복 많이 받으시고 고맙습니다!
2024-01-05
855
글번호 175473
지표
답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
종목 : 해외선물
요청사항 : 아래식은 매수인 경우 가격이 하락 할때마다
추가 매수가 들어가는 로직입니다.
추가 매수가 들어갈 때마다 해당 매수가격을
수평라인으로 표시하고 싶습니다.
청산되면 매수 라인을 지우고 싶습니다.
시스템식 수정 부탁드립니다.
input : Pst(1); // 매수,매도
input : gap(10), pt(20), multi(0.7);
var : vol(0),v1(0),T(0);
value1 = gap/PointValue; //최초 진입간격
value2 = pt/PointValue;
if pst == 1 Then
{
if MarketPosition == 0 and TotalTrades == TotalTrades[1] Then
{
vol = 1;
Buy("b",OnClose,Def,vol);
}
if MarketPosition == 1 Then
{
if CurrentContracts > CurrentContracts[1] Then
{
v1 = CurrentContracts-CurrentContracts[1];
if MaxEntries == 1 Then
T = value1;
Else
T = T+Round(T*0.5,0);
MessageLog("%.2f",T);
}
vol = Round(v1+v1*multi,0);
Buy("bb",AtLimit,EntryPrice(0)-PriceScale*T,vol);
ExitLong("bp",AtLimit,AvgEntryPrice+PriceScale*Value2);
}
}
감사합니다.
2024-01-05
941
글번호 175462
시스템
답변완료
지표수식 부탁 드려봅니다
중최고가=최고값(고가,20);
중최저가=최저값(저가,20);
경계=(중최고가+중최저가)/2-(중최고가-중최저가)*배분1;
경계1=crossup(종가, 경계)&& 종가>시가*배분2;
경계2=crossdown(c, 경계);
기준봉=valuewhen(1, 경계1 or 경계2, 시가);
기준봉1=crossup(종가, 기준봉);
기준봉2=crossdown(종가, 기준봉);
결과기준=valuewhen(1, 기준봉1 or 기준봉2, 시가);
결과기준1=crossup(종가, 결과기준);
결과기준2=crossdown(종가, 결과기준);
valuewhen(1, 결과기준1 or 결과기준2, 시가)
조건
배분1 0.236
배분2 1.02
2024-01-05
706
글번호 175458
지표