커뮤니티
지표문의
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);
다음글
이전글