예스스탁
예스스탁 답변
2025-03-04 13:22:47
안녕하세요
예스스탁입니다.
1
Inputs : Length(14);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0),MinusDM14(0),MinusDM(0),PlusDM(0),EP(0);
var : DP(0),DM(0),DMIv(0);
EP = 1/(Length+1);
If CurrentBar == 1 Then
{
MyRange = Length;
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];
TRange = Range;
PlusDM14 = PlusDM;
MinusDM14 = MinusDM;
If TRange <> 0 Then
DP = 100 * PlusDM14 / TRange;
Else
DP = 0 ;;
If TRange <> 0 Then
DM = 100 * MinusDM14 / TRange;
Else
DM = 0;
}
Else If CurrentBar > 1 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];
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
If MyRange > 0 Then
Begin
TRange = TrueRange * EP + TRange[1] * (1-EP);
PlusDM14 = value1 * EP + PlusDM14[1] * (1-EP);
MinusDM14 = value2 * EP + MinusDM14[1] * (1-EP);
End;
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
Plot1(DMIV);
Plot2(DP);
Plot3(DM);
2
Inputs : Length(14);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0),MinusDM14(0),MinusDM(0),PlusDM(0),EP(0);
var : DP(0),DM(0),DMIv(0);
var : xClose(0),xOpen(0),xHigh(0),xLow(0),TH(0),TL(0),TR(0);
EP = 1/(Length+1);
if index == 0 then
{
xClose = (O+H+L+C)/4;
xOpen = open;
xHigh = MaxList( high, xOpen, xClose);
xLow = MinList( low, xOpen,xClose);
}
else
{
xClose = (O+H+L+C)/4;
xOpen = (xOpen [1] + xClose [1])/2 ;
xHigh = MaxList(High, xOpen, xClose) ;
xLow = MinList(Low, xOpen, xClose) ;
}
If xClose[1] > xHigh then
TH = xClose[1];
else
TH = xHigh;
If xClose[1] < xLow then
TL = xClose[1];
else
TL = xLow;
TR = TH-TL;
If CurrentBar == 1 Then
{
DP = 0;
PlusDM14 = 0;
DM = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To MyRange - 1
{
If xHigh[Counter] - xHigh[Counter+1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[Counter] - xHigh[Counter+1];
If xLow[Counter+1] - xLow[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[Counter+1] - xLow[Counter];
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
TRange = TRange + TR[Counter];
PlusDM14 = PlusDM14 + value1;
MinusDM14 = MinusDM14 + value2;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
Else If CurrentBar > 1 Then
{
If xHigh[0] - xHigh[1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[0] - xHigh[1];
If xLow [1] - xLow [0] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[1] - xLow[0];
If MinusDM >= PlusDM Then
PlusDM = 0;
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
If MyRange > 0 Then
{
TRange = TRange[1] - (TRange[1] / MyRange) + TR;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / MyRange) + value1;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / MyRange) + Value2;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
Plot1(DMIV);
Plot2(DP);
Plot3(DM);
3
Inputs : Length(14);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0),MinusDM14(0),MinusDM(0),PlusDM(0),EP(0);
var : DP(0),DM(0),DMIv(0);
var : xClose(0),xOpen(0),xHigh(0),xLow(0),TH(0),TL(0);
EP = 1/(Length+1);
if index == 0 then
{
xClose = (O+H+L+C)/4;
xOpen = open;
xHigh = MaxList( high, xOpen, xClose);
xLow = MinList( low, xOpen,xClose);
}
else
{
xClose = (O+H+L+C)/4;
xOpen = (xOpen [1] + xClose [1])/2 ;
xHigh = MaxList(High, xOpen, xClose) ;
xLow = MinList(Low, xOpen, xClose) ;
}
If CurrentBar == 1 Then
{
MyRange = Length;
If xHigh[0] - xHigh[1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[0] - High[1];
If xLow [1] - xLow [0] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[1] - xLow[0];
If xClose[1] > xHigh then
TH = xClose[1];
else
TH = xHigh;
If xClose[1] < xLow then
TL = xClose[1];
else
TL = xLow;
TRange = TH-TL;
PlusDM14 = PlusDM;
MinusDM14 = MinusDM;
If TRange <> 0 Then
DP = 100 * PlusDM14 / TRange;
Else
DP = 0 ;;
If TRange <> 0 Then
DM = 100 * MinusDM14 / TRange;
Else
DM = 0;
}
Else If CurrentBar > 1 Then
{
If xHigh[0] - xHigh[1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[0] - xHigh[1];
If xLow [1] - xLow [0] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[1] - Low[0];
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
If xClose[1] > xHigh then
TH = xClose[1];
else
TH = xHigh;
If xClose[1] < xLow then
TL = xClose[1];
else
TL = xLow;
If MyRange > 0 Then
Begin
TRange = (TH-TL) * EP + TRange[1] * (1-EP);
PlusDM14 = value1 * EP + PlusDM14[1] * (1-EP);
MinusDM14 = value2 * EP + MinusDM14[1] * (1-EP);
End;
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
Plot1(DMIV);
Plot2(DP);
Plot3(DM);
즐거운 하루되세요
> 촌동네선생 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> 선생님~일반적인 dmi 지표에서 + DI 와 - DI 값을 구할 때 아래의 공식을
사용하잖아요.
DMnPlus = (+DM)의 n일 이동평균값
DMnMinus = (-DM)의 n일 이동평균값
TRn = TR의 이동평균값
+DI = DMnPlus/TRn
-DI = DMnMinus/TRn
DMI = (DiPlus-DIMinus)의 절대값/(DiPlus+DIMinus)*100
제가 원하는건
1) 일반 캔들 기준으로하여
DMnPlus = (+DM)의 n일 지수이동평균값
DMnMinus = (-DM)의 n일 지수이동평균값
TRn = TR의 지수이동평균값
을 적용한 +DI 와 -DI와 DMI 값을 구할 수 있는 지표식
2) 하이킨 아시 캔들을 기준으로 하여 아래의 식을 적용한 +DI 와 -DI와 DMI 값을 구
할 수 있는 지표식
DMnPlus = (+DM)의 n일 이동평균값
DMnMinus = (-DM)의 n일 이동평균값
TRn = TR의 이동평균값
3) 하이킨 아시 캔들을 기준으로 하여 아래의 식을 적용한 +DI 와 -DI와 DMI 값을 구
할 수 있는 지표식
DMnPlus = (+DM)의 n일 지수이동평균값
DMnMinus = (-DM)의 n일 지수이동평균값
TRn = TR의 지수이동평균값
감사드리고 죄송합니다~꾸벅
촌동네선생
2025-03-04 21:42:06
감사합니다~~~
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의 드립니다.
> 안녕하세요
예스스탁입니다.
1
Inputs : Length(14);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0),MinusDM14(0),MinusDM(0),PlusDM(0),EP(0);
var : DP(0),DM(0),DMIv(0);
EP = 1/(Length+1);
If CurrentBar == 1 Then
{
MyRange = Length;
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];
TRange = Range;
PlusDM14 = PlusDM;
MinusDM14 = MinusDM;
If TRange <> 0 Then
DP = 100 * PlusDM14 / TRange;
Else
DP = 0 ;;
If TRange <> 0 Then
DM = 100 * MinusDM14 / TRange;
Else
DM = 0;
}
Else If CurrentBar > 1 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];
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
If MyRange > 0 Then
Begin
TRange = TrueRange * EP + TRange[1] * (1-EP);
PlusDM14 = value1 * EP + PlusDM14[1] * (1-EP);
MinusDM14 = value2 * EP + MinusDM14[1] * (1-EP);
End;
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
Plot1(DMIV);
Plot2(DP);
Plot3(DM);
2
Inputs : Length(14);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0),MinusDM14(0),MinusDM(0),PlusDM(0),EP(0);
var : DP(0),DM(0),DMIv(0);
var : xClose(0),xOpen(0),xHigh(0),xLow(0),TH(0),TL(0),TR(0);
EP = 1/(Length+1);
if index == 0 then
{
xClose = (O+H+L+C)/4;
xOpen = open;
xHigh = MaxList( high, xOpen, xClose);
xLow = MinList( low, xOpen,xClose);
}
else
{
xClose = (O+H+L+C)/4;
xOpen = (xOpen [1] + xClose [1])/2 ;
xHigh = MaxList(High, xOpen, xClose) ;
xLow = MinList(Low, xOpen, xClose) ;
}
If xClose[1] > xHigh then
TH = xClose[1];
else
TH = xHigh;
If xClose[1] < xLow then
TL = xClose[1];
else
TL = xLow;
TR = TH-TL;
If CurrentBar == 1 Then
{
DP = 0;
PlusDM14 = 0;
DM = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To MyRange - 1
{
If xHigh[Counter] - xHigh[Counter+1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[Counter] - xHigh[Counter+1];
If xLow[Counter+1] - xLow[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[Counter+1] - xLow[Counter];
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
TRange = TRange + TR[Counter];
PlusDM14 = PlusDM14 + value1;
MinusDM14 = MinusDM14 + value2;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
Else If CurrentBar > 1 Then
{
If xHigh[0] - xHigh[1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[0] - xHigh[1];
If xLow [1] - xLow [0] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[1] - xLow[0];
If MinusDM >= PlusDM Then
PlusDM = 0;
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
If MyRange > 0 Then
{
TRange = TRange[1] - (TRange[1] / MyRange) + TR;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / MyRange) + value1;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / MyRange) + Value2;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
Plot1(DMIV);
Plot2(DP);
Plot3(DM);
3
Inputs : Length(14);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0),MinusDM14(0),MinusDM(0),PlusDM(0),EP(0);
var : DP(0),DM(0),DMIv(0);
var : xClose(0),xOpen(0),xHigh(0),xLow(0),TH(0),TL(0);
EP = 1/(Length+1);
if index == 0 then
{
xClose = (O+H+L+C)/4;
xOpen = open;
xHigh = MaxList( high, xOpen, xClose);
xLow = MinList( low, xOpen,xClose);
}
else
{
xClose = (O+H+L+C)/4;
xOpen = (xOpen [1] + xClose [1])/2 ;
xHigh = MaxList(High, xOpen, xClose) ;
xLow = MinList(Low, xOpen, xClose) ;
}
If CurrentBar == 1 Then
{
MyRange = Length;
If xHigh[0] - xHigh[1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[0] - High[1];
If xLow [1] - xLow [0] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[1] - xLow[0];
If xClose[1] > xHigh then
TH = xClose[1];
else
TH = xHigh;
If xClose[1] < xLow then
TL = xClose[1];
else
TL = xLow;
TRange = TH-TL;
PlusDM14 = PlusDM;
MinusDM14 = MinusDM;
If TRange <> 0 Then
DP = 100 * PlusDM14 / TRange;
Else
DP = 0 ;;
If TRange <> 0 Then
DM = 100 * MinusDM14 / TRange;
Else
DM = 0;
}
Else If CurrentBar > 1 Then
{
If xHigh[0] - xHigh[1] < 0 Then
PlusDM = 0;
Else
PlusDM = xHigh[0] - xHigh[1];
If xLow [1] - xLow [0] < 0 Then
MinusDM = 0;
Else
MinusDM = xLow[1] - Low[0];
value1 = PlusDM;
value2 = MinusDM;
If MinusDM >= PlusDM Then
value1 = 0;
If PlusDM >= MinusDM Then
value2 = 0 ;
If xClose[1] > xHigh then
TH = xClose[1];
else
TH = xHigh;
If xClose[1] < xLow then
TL = xClose[1];
else
TL = xLow;
If MyRange > 0 Then
Begin
TRange = (TH-TL) * EP + TRange[1] * (1-EP);
PlusDM14 = value1 * EP + PlusDM14[1] * (1-EP);
MinusDM14 = value2 * EP + MinusDM14[1] * (1-EP);
End;
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0 ;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
Plot1(DMIV);
Plot2(DP);
Plot3(DM);
즐거운 하루되세요
> 촌동네선생 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> 선생님~일반적인 dmi 지표에서 + DI 와 - DI 값을 구할 때 아래의 공식을
사용하잖아요.
DMnPlus = (+DM)의 n일 이동평균값
DMnMinus = (-DM)의 n일 이동평균값
TRn = TR의 이동평균값
+DI = DMnPlus/TRn
-DI = DMnMinus/TRn
DMI = (DiPlus-DIMinus)의 절대값/(DiPlus+DIMinus)*100
제가 원하는건
1) 일반 캔들 기준으로하여
DMnPlus = (+DM)의 n일 지수이동평균값
DMnMinus = (-DM)의 n일 지수이동평균값
TRn = TR의 지수이동평균값
을 적용한 +DI 와 -DI와 DMI 값을 구할 수 있는 지표식
2) 하이킨 아시 캔들을 기준으로 하여 아래의 식을 적용한 +DI 와 -DI와 DMI 값을 구
할 수 있는 지표식
DMnPlus = (+DM)의 n일 이동평균값
DMnMinus = (-DM)의 n일 이동평균값
TRn = TR의 이동평균값
3) 하이킨 아시 캔들을 기준으로 하여 아래의 식을 적용한 +DI 와 -DI와 DMI 값을 구
할 수 있는 지표식
DMnPlus = (+DM)의 n일 지수이동평균값
DMnMinus = (-DM)의 n일 지수이동평균값
TRn = TR의 지수이동평균값
감사드리고 죄송합니다~꾸벅