예스스탁
예스스탁 답변
2020-08-25 13:12:17
안녕하세요
예스스탁입니다.
아래식 참고하시기 바랍니다.
타주기 ADX,DMI,DiPlus,Diminu가 모두 포함된 식입니다.
각 값이 모두 배열변수(adxv,dmiv,dplus,dminus)에 저장되어 있습니다.
[0]이 현재봉, [1]이 전봉, [2]가 전전봉순서입니다.
1
input : Atime1(10),Length(14);
var : TL(0),TH(0),cnt(0),Dcnt(0),preTRange(0),prePlusDM14(0),MinusDM14(0),TRange1(0),preMinusDM14(0);
Var : TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0),preADX(0);
Var : CummDMI(0), Cummi(0);
var : S1(0),D1(0),TM(0),TF1(0),CB(0);
Array : HH[61](0),LL[61](0),CC[61](0),TR[61](0),DMIv[61](0),ADXv[61](0);
Array : DPlus[61](0),DMinus[61](0);
if bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%Atime1;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and Atime1 > 1 and TF1 < TF1[1]) or
(Bdate == Bdate[1] and Atime1 > 1 and TM >= TM[1]+Atime1) or
(Bdate == Bdate[1] and Atime1 == 1 and TM > TM[1]) Then
{
Dcnt = Dcnt+1;
if Dcnt >= Length+2 Then
CB = CB+1;
HH[0] = H;
LL[0] = L;
CC[0] = C;
preTRange = TRange[1];
prePlusDM14 = PlusDM14[1];
preMinusDM14 = MinusDM14[1];
for cnt = 1 to 60
{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
TR[cnt] = TR[cnt-1][1];
DMIv[cnt] = DMIv[cnt-1][1];
ADXv[cnt] = ADXv[cnt-1][1];
Dplus[cnt] = Dplus[cnt-1][1];
Dminus[cnt] = Dminus[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if CC[1] > 0 Then{
If CC[1] > HH[0] then
TH = CC[1];
else
TH = HH[0];
If CC[1] < LL[0] then
TL = CC[1];
else
TL = LL[0];
TR[0] = TH-TL;
}
If CB == 1 Then
{
MyRange = Length;
DPlus[0] = 0;
PlusDM14 = 0;
TRange = 0;
DMinus[0] = 0;
MinusDM14 = 0;
TRange1 = 0;
For cnt = 0 To MyRange - 1 {
If HH[cnt] - HH[cnt+1] < 0 Then
PlusDM = 0 ;
Else
PlusDM = HH[cnt] - HH[cnt+1];
If LL[cnt+1] - LL[cnt] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[cnt+1] - LL[cnt];
var1 = PlusDM;
var2 = MinusDM;
If var1 >= var2 Then
MinusDM = 0;
If var2 >= var1 Then
PlusDM = 0;
TRange = TRange + TR[cnt];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
DPlus[0] = 100 * PlusDM14 / TRange;
Else
DPlus[0] = 0 ;
If TRange <> 0 Then
DMinus[0] = 100 * MinusDM14 / TRange;
Else
DMinus[0] = 0;
If Dplus[0] + Dminus[0] == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]);
}
Else If CB > 1 Then {
If HH[0] - HH[1] < 0 Then
PlusDM = 0;
Else
PlusDM = HH[0] - HH[1];
If LL[1] - LL[0] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[1] - LL[0];
var1 = PlusDM;
var2 = MinusDM;
If var1 >= var2 Then
MinusDM = 0;
If var2 >= var1 Then
PlusDM = 0;
If MyRange > 0 Then {
TRange = preTRange - (preTRange / MyRange) + TR[0];
PlusDM14 = prePlusDM14 - (prePlusDM14 / MyRange) + PlusDM;
MinusDM14 = preMinusDM14 - (preMinusDM14 / MyRange) + MinusDM;
}
If TRange <> 0 Then
DPlus[0] = 100 * PlusDM14 / TRange;
Else
DPlus[0] = 0 ;
If TRange <> 0 Then
DMinus[0] = 100 * MinusDM14 / TRange;
Else
DMinus[0] = 0;
If Dplus[0] + Dminus[0] == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]);
}
If CB >= 1 AND Length > 0 Then
{
If CB < Length Then
{
CummDMI = 0;
for cnt = 0 To CB - 1
{
CummDMI = CummDMI + DMIV[cnt];
}
ADXv[0] = CummDMI / CB;
}
Else
ADXv[0] = (ADXv[1] * (Length - 1) + DMIv[0]) / Length;
}
plot1(adxV[0]);
plot2(DMIv[0]);
plot3(DPlus[0]);
plot4(DMinus[0] );
}
2
input : Length(14);
var : TL(0),TH(0),cnt(0),Dcnt(0),preTRange(0),prePlusDM14(0),MinusDM14(0),TRange1(0),preMinusDM14(0);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0),preADX(0);
Var : CummDMI(0), Return(0);
Array : HH[61](0),LL[61](0),CC[61](0),TR[61](0),DMIv[61](0),ADXv[61](0);
Array : DPlus[61](0),DMinus[61](0);
if bdate != bdate[1] Then
{
Dcnt = Dcnt+1;
HH[0] = H;
LL[0] = L;
CC[0] = C;
preTRange = TRange[1];
prePlusDM14 = PlusDM14[1];
preMinusDM14 = MinusDM14[1];
for cnt = 1 to 60{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
TR[cnt] = TR[cnt-1][1];
DMIv[cnt] = DMIv[cnt-1][1];
ADXv[cnt] = ADXv[cnt-1][1];
Dplus[cnt] = Dplus[cnt-1][1];
Dminus[cnt] = Dminus[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if CC[1] > 0 Then{
If CC[1] > HH[0] then
TH = CC[1];
else
TH = HH[0];
If CC[1] < LL[0] then
TL = CC[1];
else
TL = LL[0];
TR[0] = TH-TL;
}
If Dcnt == Length+1 Then {
MyRange = Length;
DPlus[0] = 0;
PlusDM14 = 0;
TRange = 0;
DMinus[0] = 0;
MinusDM14 = 0;
TRange1 = 0;
For Counter = 0 To MyRange - 1 {
If HH[Counter] - HH[Counter+1] < 0 Then
PlusDM = 0 ;
Else
PlusDM = HH[Counter] - HH[Counter+1];
If LL[Counter+1] - LL[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[Counter+1] - LL[Counter];
var1 = PlusDM;
var2 = MinusDM;
If var1 >= var2 Then
MinusDM = 0;
If var2 >= var1 Then
PlusDM = 0;
TRange = TRange + TR[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
DPlus[0] = 100 * PlusDM14 / TRange;
Else
DPlus[0] = 0 ;
If TRange <> 0 Then
DMinus[0] = 100 * MinusDM14 / TRange;
Else
DMinus[0] = 0;
If Dplus[0] + Dminus[0] == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]);
}
Else If Dcnt > Length+1 Then {
If HH[0] - HH[1] < 0 Then
PlusDM = 0;
Else
PlusDM = HH[0] - HH[1];
If LL[1] - LL[0] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[1] - LL[0];
var1 = PlusDM;
var2 = MinusDM;
If var1 >= var2 Then
MinusDM = 0;
If var2 >= var1 Then
PlusDM = 0;
If MyRange > 0 Then {
TRange = preTRange - (preTRange / MyRange) + TR[0];
PlusDM14 = prePlusDM14 - (prePlusDM14 / MyRange) + PlusDM;
MinusDM14 = preMinusDM14 - (preMinusDM14 / MyRange) + MinusDM;
}
If TRange <> 0 Then
DPlus[0] = 100 * PlusDM14 / TRange;
Else
DPlus[0] = 0 ;
If TRange <> 0 Then
DMinus[0] = 100 * MinusDM14 / TRange;
Else
DMinus[0] = 0;
If Dplus[0] + Dminus[0] == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(Dplus[0] - Dminus[0]) / (Dplus[0] + Dminus[0]);
}
If DMIV[Length] == 0 Then{
CummDMI = 0;
for Counter = 0 To Length-1 Begin
if DMiV[counter] > 0 Then
CummDMI = CummDMI + DMIV[Counter];
End;
ADXv[0] = CummDMI / CurrentBar;
}
Else
ADXv[0] = (ADXv[1] * (Length - 1) + DMIv[0]) / Length;
plot1(adxv[0]);
plot2(DMIv[0]);
plot3(DPlus[0]);
plot4(DMinus[0] );
즐거운 하루되세요
> 뮬리 님이 쓴 글입니다.
> 제목 : 부탁 드립니다.
> 도움에 깊이 감사 드립니다.
ADX지표에 사용되는 DIPLUS함수의
타주기 즉
1)분봉 차트에서 예를 들어 10분봉에서 60분봉지표
2)60분봉 차트에서 일봉 지표
장시간 번거로우시겠지만 부탁드리오며
미리 경배로 깊이 감사 드립니다.
Inputs: Length(NumericSimple) ;
Variables: Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0);
If CurrentBar == 1 Then Begin
MyRange = Length;
DIPlus = 0;
PlusDM14 = 0;
TRange = 0;
For Counter = 0 To MyRange - 1 Begin
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;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
End;
If TRange <> 0 Then
DIPlus = 100 * PlusDM14 / TRange;
Else
DIPlus = 0 ;
End
Else
If CurrentBar > 1 Then Begin
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 MyRange > 0 Then Begin
TRange = TRange[1] - (TRange[1] / MyRange) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / MyRange) + PlusDM;
End;
If TRange <> 0 Then
DIPlus = 100 * PlusDM14 / TRange;
Else
DIPlus = 0 ;
End ;
참조1)
TrueRange = TrueHigh - TrueLow;
참조2)
If C[1] > H then
TrueHigh = C[1];
else
TrueHigh = H;
참조3)
If C[1] < L then
TrueLow = C[1];
else
TrueLow = L;