예스스탁
예스스탁 답변
2022-02-17 09:58:08
안녕하세요
예스스탁입니다.
평균값저장이 최고차이발생봉까지만 대상으로 저장되게 되어 있었습니다.
1번식과 같은 경우는 관계없지만 2번과 3번과 같이 시종의 중간값을 저장할때
그이후시간의 종가가 반영되지 않았었습니다.
1~3번식 모두 수정해 드립니다.
1
input : 타주기분(30),n(10);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0);
var : ii(0),i1(0),i2(0),tempmax(0),tempi(0);
Array : R1[50](0),M1[50](0);
Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
for cnt = 1 to 49
{
R1[cnt] = R1[cnt-1][1];
M1[cnt] = M1[cnt-1][1];
}
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
HH = H;
LL = L;
Condition1 = False;
if Bdate != Bdate[1] Then
{
R1[0] = 0;
M1[0] = 0;
}
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
if HH-LL > R1[0] Then
{
R1[0] = HH-LL;
Condition1 =true;
}
if Condition1 == true Then
M1[0] = (HH+LL)/2;
if M1[n] > 0 Then
{
for ii = 0 to 49
{
tempR1[ii] = R1[ii];
tempM1[ii] = M1[ii];
}
For i1 = 1 to n
{
tempmax = -1;
For i2 = 1 to n
{
if (tempR1[i2] >= tempmax ) then
{
tempmax = tempR1[i2];
tempi = i2;
}
}
NTHVALUE[i1] = tempM1[tempi];
tempR1[tempi] = -1;
}
Plot1(NTHVALUE[1]);
Plot2(NTHVALUE[2]);
Plot3(NTHVALUE[3]);
}
}
2
input : 타주기분(30),n(10);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0),OO(0),CC(0);
var : ii(0),i1(0),i2(0),tempmax(0),tempi(0);
Array : R1[50](0),M1[50](0);
Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
for cnt = 1 to 49
{
R1[cnt] = R1[cnt-1][1];
M1[cnt] = M1[cnt-1][1];
}
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
HH = H;
LL = L;
OO = O;
Condition1 = False;
if Bdate != Bdate[1] Then
{
R1[0] = 0;
M1[0] = 0;
}
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
CC = C;
if HH-LL > R1[0] Then
{
R1[0] = HH-LL;
Condition1 = true;
}
if Condition1 == true Then
M1[0] = (OO+CC)/2;
if M1[n] > 0 Then
{
for ii = 0 to 49
{
tempR1[ii] = R1[ii];
tempM1[ii] = M1[ii];
}
For i1 = 1 to n
{
tempmax = -1;
For i2 = 1 to n
{
if (tempR1[i2] >= tempmax ) then
{
tempmax = tempR1[i2];
tempi = i2;
}
}
NTHVALUE[i1] = tempM1[tempi];
tempR1[tempi] = -1;
}
Plot1(NTHVALUE[1]);
Plot2(NTHVALUE[2]);
Plot3(NTHVALUE[3]);
}
}
3
input : 타주기분(30),n(10);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),CC(0);
var : ii(0),i1(0),i2(0),tempmax(0),tempi(0);
Array : R1[50](0),M1[50](0);
Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
for cnt = 1 to 49
{
R1[cnt] = R1[cnt-1][1];
M1[cnt] = M1[cnt-1][1];
}
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
OO = O;
CC = C;
Condition1 = False;
if Bdate != Bdate[1] Then
{
R1[0] = 0;
M1[0] = 0;
}
}
CC = C;
if abs(OO-CC) > R1[0] Then
{
R1[0] = abs(OO-CC);
Condition1 = true;
}
if Condition1 == true Then
M1[0] = (OO+CC)/2;
if M1[n] > 0 Then
{
for ii = 0 to 49
{
tempR1[ii] = R1[ii];
tempM1[ii] = M1[ii];
}
For i1 = 1 to n
{
tempmax = -1;
For i2 = 1 to n
{
if (tempR1[i2] >= tempmax ) then
{
tempmax = tempR1[i2];
tempi = i2;
}
}
NTHVALUE[i1] = tempM1[tempi];
tempR1[tempi] = -1;
}
Plot1(NTHVALUE[1]);
Plot2(NTHVALUE[2]);
Plot3(NTHVALUE[3]);
}
}
즐거운 하루되세요
> 원칙투자자 님이 쓴 글입니다.
> 제목 : 지표 수식(지표2와 지표3)의 검토 부탁드립니다
> 지난번 Q&A 75889번에서 작성해 주신 수식을 활용하면서 매매원칙을 연구하고 있습니다.
작성해 주신 지표수식을 연구하고 있는데,
아래 지표1의 경우에는 지표에서 산출된 값과 수기로 계산해 본 값이 정확하게 일치합니다.
그런데, 지표2와 지표3의 시스템 산출 결과는 제가 실제 데이터로 계산한 값과 차이가 납니다.
제가 아무리 수정해보려고 해도 해결할 수가 없어 도움 요청드립니다.
작성해주신 지표2와 지표3이 지난번 Q&A 75889번의 질의 내용과 다른 점이 무엇인지
검토해주시고 Q&A 75889번의 질의 내용과 같이 수정 부탁드립니다.
제가 수기 계산해 본 검증해 본 내용을 엑셀 파일로 첨부하였고
지표를 시뮬레이션 차트에서 실행한 내용(산출된 수치)을 화면 캡쳐하여
엑셀파일의 해당 sheet에 같이 첨부하였습니다.
검증내용 요약은 아래와 같습니다.
자세한 내용은 엑셀파일을 참조하시기 바랍니다.
--------------------------------------------------------------
2021.07.12을 당일(D)로 해서 실행해보면
<지표1 - 시스템> <지표1 - 수기계산> -> 정확하게 일치
425.68 425.68
437.70 437.70
435.68 435.68
<지표2 - 시스템> <지표2 - 수기계산> -> 차이 발생
425.77 425.73
437.77 437.88
435.75 435.80
<지표3 - 시스템> <지표3 - 수기계산> -> 차이 발생
425.73 425.73
438.65 438,75
435.75 435.80
cf. 위 사례 보다 차이가 훨씬 더 큰 경우도 많음.
-----------------------------------------------------------------------------
위와 같이 수정 부탁드립니다.
미리 감사드립니다.
(담당자님의 편의를 위하여
Q&A 75889번의 담당자님 답변내용과 제 질의 내용을
아래에 기재하였습니다.)
==============================================
==============================================
수식작성 Q&A 75889번
담당자님 답변(작성 수식) 및 질의 내용
==============================================
==============================================
작성자 : 예스스탁 작성일 : 2022-02-14 오전 9:35:15 조회수 : 9
지표 Re : 지표 수식(지표1, 지표2, 지표3) 작성 부탁드립니다.
안녕하세요
예스스탁입니다.
올림차순 또는 내림차순으로 지정해 드리기는 어렵습니다.
최근 n일 값을 계산해서 NTHVALUE에 오름차순으로 값이 저장됩니다.
10일 중 가장작은값 3개는 NTHVALUE[8],NTHVALUE[9],NTHVALUE[10]으로 지정해 출력하시면 됩니다.
1
input : 타주기분(30),n(10);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0);
var : ii(0),i1(0),i2(0),tempmax(0),tempi(0);
Array : R1[50](0),M1[50](0);
Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
for cnt = 1 to 49
{
R1[cnt] = R1[cnt-1][1];
M1[cnt] = M1[cnt-1][1];
}
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
HH = H;
LL = L;
if Bdate != Bdate[1] Then
{
R1[0] = HH-LL;
M1[0] = (HH+LL)/2;
}
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
if HH-LL > R1[0] Then
{
R1[0] = HH-LL;
M1[0] = (HH+LL)/2;
}
if M1[n] > 0 Then
{
for ii = 0 to 49
{
tempR1[ii] = R1[ii];
tempM1[ii] = M1[ii];
}
For i1 = 1 to n
{
tempmax = -1;
For i2 = 1 to n
{
if (tempR1[i2] >= tempmax ) then
{
tempmax = tempR1[i2];
tempi = i2;
}
}
NTHVALUE[i1] = tempM1[tempi];
tempR1[tempi] = -1;
}
Plot1(NTHVALUE[1]);
Plot2(NTHVALUE[2]);
Plot3(NTHVALUE[3]);
}
}
2
input : 타주기분(30),n(10);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0),OO(0),CC(0);
var : ii(0),i1(0),i2(0),tempmax(0),tempi(0);
Array : R1[50](0),M1[50](0);
Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
for cnt = 1 to 49
{
R1[cnt] = R1[cnt-1][1];
M1[cnt] = M1[cnt-1][1];
}
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
HH = H;
LL = L;
OO = O;
if Bdate != Bdate[1] Then
{
R1[0] = HH-LL;
M1[0] = (HH+LL)/2;
}
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
CC = C;
if HH-LL > R1[0] Then
{
R1[0] = HH-LL;
M1[0] = (OO+CC)/2;
}
if M1[n] > 0 Then
{
for ii = 0 to 49
{
tempR1[ii] = R1[ii];
tempM1[ii] = M1[ii];
}
For i1 = 1 to n
{
tempmax = -1;
For i2 = 1 to n
{
if (tempR1[i2] >= tempmax ) then
{
tempmax = tempR1[i2];
tempi = i2;
}
}
NTHVALUE[i1] = tempM1[tempi];
tempR1[tempi] = -1;
}
Plot1(NTHVALUE[1]);
Plot2(NTHVALUE[2]);
Plot3(NTHVALUE[3]);
}
}
3
input : 타주기분(30),n(10);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),CC(0);
var : ii(0),i1(0),i2(0),tempmax(0),tempi(0);
Array : R1[50](0),M1[50](0);
Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
for cnt = 1 to 49
{
R1[cnt] = R1[cnt-1][1];
M1[cnt] = M1[cnt-1][1];
}
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
OO = O;
CC = C;
if Bdate != Bdate[1] Then
{
R1[0] = abs(OO-CC);
M1[0] = (OO+CC)/2;
}
}
CC = C;
if abs(OO-CC) > R1[0] Then
{
R1[0] = abs(OO-CC);
M1[0] = (OO+CC)/2;
}
if M1[n] > 0 Then
{
for ii = 0 to 49
{
tempR1[ii] = R1[ii];
tempM1[ii] = M1[ii];
}
For i1 = 1 to n
{
tempmax = -1;
For i2 = 1 to n
{
if (tempR1[i2] >= tempmax ) then
{
tempmax = tempR1[i2];
tempi = i2;
}
}
NTHVALUE[i1] = tempM1[tempi];
tempR1[tempi] = -1;
}
Plot1(NTHVALUE[1]);
Plot2(NTHVALUE[2]);
Plot3(NTHVALUE[3]);
}
}
즐거운 하루되세요
> 원칙투자자 님이 쓴 글입니다.
> 제목 : 지표 수식(지표1, 지표2, 지표3) 작성 부탁드립니다.
> 담당자님, 안녕하세요.
작성해주신 지표 수식을 너무나 잘 활용하고 있습니다.
거듭 감사드립니다.
(KOSPI200 주가지수 선물) 분봉 차트에서, 예를 들면 3분봉 차트에서
적용하는 지표라고 가정하고 다음과 같은 지표1, 지표2, 지표3 수식의 작성을 부탁드립니다.
===========================================================
===========================================================
<지표 1>
(3분봉 차트에서 적용)
1) 매일의 30분봉(장시작~09:30, 09:30~10:00.....15:30~장마감의 30분 단위 구간)의 (고가-저가) 중에서
각 해당일의 30분 구간 (고가-저가)가 최대인 30분봉(30분 구간)을 각 일자별로 1개씩 선택
(즉, 각 일자별로 그날의 30분봉 중에서 고점과 저점 사이의 봉길이가 최대인 30분봉을 1개씩 선택함)
cf. 어떤 날에 (고가-저가)의 최대값이 같은 봉이 2개 이상이면(즉, 같은 수치의 최대봉이 2개 이상이면)
그 날 가장 먼저 발생한 봉을 선택 또는 담당자님이 정하는 원칙으로 각 일자에서는 1개씩만 선정함.
2) 위에서 계산된 각 일자별 (고가-저가)가 최대인 30분봉 중 (D-1)일 부터 소급하여
과거 n일(n=10) 기간 중 (고가-저가) 값이 큰 상위 3개의 30분봉(30분 구간)을 총 3개 선택
* 당일(D)의 수치(가격)는 계산에 반영(포함)되지 않으며
(D-1)일 부터 (D-10)일 까지의 10일간의 수치(가격)를 반영하여 산출함.
3) 위에서 선택된 상위 3개의 30분봉('고가-저가'의 값)으로 각각의 '(고가+저가)/2'를 계산하여
그 값을 각각 3개의 수평선 라인으로 표시 [=> 최종 결과값은 총 3개의 수평라인 산출]
* [중요] 위의 조건 충족한 당일(D)의 3개 수평라인은 '당일(D)의 장시작 ~ 장마감'의 기간에만 표시함.
(cf. 실시간 차트에서는 당일(D) 장시작 하면서(첫봉 만들어지면서) 바로 라인이 표시되며
그 이후 장중 분봉이 형성되면서 순차적으로 동일한 라인이 장마감까지 표시될 것으로 예상)
또한, 당일 보다 과거 기간에는 당일 조건에 의한 라인은 표시되지 않고 각 해당일의 조건에 의해 선정된
수평라인만 표시되므로 과거 각 일자에 해당하는 차트 구간에도 최대 3개 라인이 표시됨.
(추가 요건1) [중요] 최종 결과물인 수평라인 3개를 plot1, plot2, plot3로 산출할 때,
(최종 수치인 '(고가+저가)/2'를 sort, 정렬하여)
plot1, 2, 3가 최종수치인 '(고가+저가)/2'의 크기대로 올림차순 또는 내림차순이 되도록 배열
(cf. plot1, 2, 3가 [고가-저가]의 크기 순대로의 배열이 아님)
(추가 요건2) n일(n=10) 기간의 수치는 외부입력 변수로 하여 지표속성창에서 변경 입력이 가능 하도록 구현
===============================================================================
(예시)
D-10일 고가 저가 고가-저가 (고가+저가)/2
장시작~09:30 360.00 359.00 1.00
09:30 ~10:00 361.00 358.10 2.90 (=> 선택2) 359.55(-> 당일(D) 구간에 라인 표시)
.....
15:00~ 장마감 360.00 359.60 0.40
----------------------------------------------------------------------------------------
.................
D-7일 고가 저가 고가-저가 (고가+저가)/2
장시작~09:30 358.50 357.00 1.50 (=> 선택3) 357.75(-> 당일(D) 구간에 라인 표시)
09:30 ~10:00 359.20 358.00 1.20
.....
15:00~ 장마감 359.40 359.00 0.40
----------------------------------------------------------------------------------------
.................
D-5일 고가 저가 고가-저가 (고가+저가)/2
장시작~09:30 380.50 376.40 3.60 (=> 선택1) 378.45(-> 당일(D) 구간에 라인 표시)
09:30 ~10:00 378.00 375.00 3.00
.....
15:00~ 장마감 377.00 356.40 0.60
----------------------------------------------------------------------------------------
.................
D-2일 고가 저가 고가-저가 (고가+저가)/2
장시작~09:30 358.40 357.00 1.40 (=> 미선택) 357.70
(D-2일의 최대 30분봉 '고가-저가'값이 상위 3개에 미포함 되므로 1.40은 미선택됨)
09:30 ~10:00 359.10 358.00 1.10
.....
15:00~ 장마감 359.50 359.00 0.50
----------------------------------------------------------------------------------------
.................
D일(당일) 시가 : 361.00
------------------------------------------------------------
<최종 구현되는 결과(plot 1,2,3의 값을 올림차순 또는 내림차순 정렬)>
plot1 : 357.75 plot1 : 378.45
plot2 : 359.55 또는 plot2 : 359.55
plot3 : 378.45 plot3 : 357.75
(올림차순) (내림차순)
============================================================
위와 같이 지표1의 수식 작성을 부탁드립니다.
===========================================================
===========================================================
<지표 2>
(3분봉 차트에서 적용)
1) <지표1>과 동일
2) <지표1>과 동일
3) 위에서 선택된 '고가-저가'의 값이 큰 상위 3개의 30분봉에서 그 봉에 해당하는
각각의 '(종가+시가)/2'를 계산하여 그 값을 각각 수평선 라인으로 표시 [=> 총 3개의 수평라인 산출]
cf. <지표1>과의 차이는 '(고가+저가)/2'가 아니고 선택된 30분봉의 '(종가+시가)/2'를 적용하는 것임.
(추가 요건1) <지표1>과 동일
(추가 요건2) <지표1>과 동일
=============================================================
=============================================================
위와 같이 지표2의 수식 작성을 부탁드립니다.
===========================================================
===========================================================
<지표 3>
(3분봉 차트에서 적용)
1) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일
2) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일
3) (고가-저가)를 절대값(종가-시가)로, '(고가+저가)/2'를 '(종가+시가)/2'로 적용 이외에는 <지표1>과 동일
(추가 요건1) plot1, 2, 3가 최종수치인 '(종가+시가)/2'의 크기대로 올림차순 또는 내림차순이 되도록 배열
(추가 요건2) <지표1>과 동일
=============================================================
=============================================================
위와 같이 지표3의 수식 작성을 부탁드립니다.