예스스탁
예스스탁 답변
2024-05-03 14:48:33
안녕하세요
예스스탁입니다.
1
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] );
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);
var : gap(0),sumgap(0),GO(0),GH(0),GL(0),GC(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
{
gap = Open-Close[1];
sumGap = sumGap+gap;
}
GO = O - sumGap;
GH = H - sumGap;
GL = L - sumGap;
GC = C - sumGap;
if bdate != bdate[1] Then
{
Dcnt = Dcnt+1;
HH[0] = GH;
LL[0] = GL;
CC[0] = GC;
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 GH > HH[0] Then
HH[0] = GH;
if GL < LL[0] Then
LL[0] = GL;
CC[0] = GC;
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] );
3
var1 = ma(C,5);
Var2 = ma(C,20);
Var3 = ma(C,60);
Condition1 = var1 > Var2 and Var2 > Var3;
Plot1(var1,"이평1",Blue,Def,IFf(Condition1==true,3,0));
4
차트 종목선택화면의 참조탭에 ATM연결옵션들이 제공됩니다.
연결옵션은 ATM기준으로 +-2단계까지만 연결한 데이터를 제공합니다.
즐거운 하루되세요
> 돈을잃자 님이 쓴 글입니다.
> 제목 : 안녕하세요
> 시스템에서 필터로 사용하려고 합니다.
아래의 1,2번이 특정 수치보다 높거나 또는 낮을때를 활용하려고요
1. 분봉이나 틱봉에서 일봉의 adx수치를 가져오기
2. 분봉이나 틱봉에서 일봉의 adx수치(갭을 뺀것) 가져오기
2개를 부탁드립니다
-----------------------------------------------------
3. 5/ 20 / 60 이평선이 정배열일때만
5일 이평선 두께가 굻어지는 지표 부탁드립니다.
4. 시뮬레이션차트에서 옵션 데이터를 검증하고 싶은데요 선물연결처럼
옵션도 예전꺼 연결해서 볼 수 있는 방법이 있을까요??
즐거운 주말 되십쇼 ^^