아래 답해주신 내용을 "사용자 함수"로 등록해서 간편하게 사용가능할까요?
그래서 시스템식에서 hadx[2]<40 이런식으로 사용할수 있을런지요
고맙습니다 ^^
Inputs : Period(14);
Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0);
var : PlusDM(0), MinusDM(0),DMIv(0);
var : DP(0),DM(0),hd(0),ld(0);
var : cnt(0),b(0);
var : CummDMI(0),ADXV(0);
Array : Hadx[10](0);
if bdate != Bdate[1] Then
{
idx = 0;
DP = 0;
DM = 0;
DMIV = 0;
ADXV = 0;
}
else
idx = idx+1;
If idx == Period+1 Then
{
DP = 0;
DM = 0;
PlusDM14 = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To Period - 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];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If idx > Period+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];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
If Period > 0 Then Begin
TRange = TRange[1] - (TRange[1] / Period) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM;
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);
If DMIV > 0 Then
{
b = b+1;
if b < Period Then
{
CummDMI = CummDMI + DMIV;
ADXV = CummDMI / b;
}
Else
ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period;
}
if Bdate != Bdate[1] Then
{
For cnt = 9 DownTo 1
{
Hadx[cnt] = Hadx[cnt-1];
}
Hadx[0] = ADXV;
}
if ADXV > Hadx[0] Then
Hadx[0] = Adxv;
답변 1
예스스탁
예스스탁 답변
2024-04-09 15:44:50
안녕하세요
예스스탁입니다.
1
사용자함수로 만드시면
ADX기간과 이전일 값을 지정해야 하므로
매개변수가 2개인 함수가 됩니다.
함수는 매개변수를 ()안에 지정하므로
수식에서는 HADX(14,0) 이나 HADX(14,2)과 같이 사용하셔야 합니다.
2
사용자함수명 : HADX
반환값형 : 숫자형
Inputs : Period(Numeric),N(Numeric);
Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0);
var : PlusDM(0), MinusDM(0),DMIv(0);
var : DP(0),DM(0),hd(0),ld(0);
var : cnt(0),b(0);
var : CummDMI(0),ADXV(0);
Array : HH[10](0);
if bdate != Bdate[1] Then
{
idx = 0;
DP = 0;
DM = 0;
DMIV = 0;
ADXV = 0;
}
else
idx = idx+1;
If idx == Period+1 Then
{
DP = 0;
DM = 0;
PlusDM14 = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To Period - 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];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If idx > Period+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];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
If Period > 0 Then Begin
TRange = TRange[1] - (TRange[1] / Period) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM;
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);
If DMIV > 0 Then
{
b = b+1;
if b < Period Then
{
CummDMI = CummDMI + DMIV;
ADXV = CummDMI / b;
}
Else
ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period;
}
if Bdate != Bdate[1] Then
{
For cnt = 9 DownTo 1
{
HH[cnt] = HH[cnt-1];
}
HH[0] = ADXV;
}
if ADXV > HH[0] Then
HH[0] = Adxv;
HADX = HH[n];
즐거운 하루되세요
> 돈을잃자 님이 쓴 글입니다.
> 제목 : 안녕하세요
> 아래 답해주신 내용을 "사용자 함수"로 등록해서 간편하게 사용가능할까요?
그래서 시스템식에서 hadx[2]<40 이런식으로 사용할수 있을런지요
고맙습니다 ^^
Inputs : Period(14);
Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0);
var : PlusDM(0), MinusDM(0),DMIv(0);
var : DP(0),DM(0),hd(0),ld(0);
var : cnt(0),b(0);
var : CummDMI(0),ADXV(0);
Array : Hadx[10](0);
if bdate != Bdate[1] Then
{
idx = 0;
DP = 0;
DM = 0;
DMIV = 0;
ADXV = 0;
}
else
idx = idx+1;
If idx == Period+1 Then
{
DP = 0;
DM = 0;
PlusDM14 = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To Period - 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];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If idx > Period+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];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
If Period > 0 Then Begin
TRange = TRange[1] - (TRange[1] / Period) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM;
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);
If DMIV > 0 Then
{
b = b+1;
if b < Period Then
{
CummDMI = CummDMI + DMIV;
ADXV = CummDMI / b;
}
Else
ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period;
}
if Bdate != Bdate[1] Then
{
For cnt = 9 DownTo 1
{
Hadx[cnt] = Hadx[cnt-1];
}
Hadx[0] = ADXV;
}
if ADXV > Hadx[0] Then
Hadx[0] = Adxv;