커뮤니티
수식 문의 드립니다.
2014-03-05 12:56:38
126
글번호 73206
계시번호 4296번 수식을 예스글로벌에 적용하고 싶습니다.
수정된 수식 부탁드립니다.
감사합니다.
답변 1
예스스탁 예스스탁 답변
2014-03-05 15:34:54
안녕하세요
예스스탁입니다.
종목별로 첫봉시간이 다르므로
차트 종목에 맞게 변경해 주셔야 합니다.
아래식은 7시로 되어 있습니다.
input:n(1),intervals(15);
var:arr(0),j(0),k(0),tick(0),chk_cnt(0),ttm(0),t_val(0),max_tpo(0),tot_tpo(0),
sum(0),acc(0),mdl_prc(0),mdl_arr(0),range_u(0),range_d(0),base(0),
cal_tpo(0),up_tpo(0),dn_tpo(0),up_tail_u(0),up_tail_d(0),dn_tail_u(0),dn_tail_d(0);
array:price_u[100](0),price_m[100](0),price_d[100](0),
status_u[100](0),status_m[100](0),status_d[100](0),
tpo_u[100](0),tpo_m[100](0),tpo_d[100](0);
tick = PriceScale;
if stime == 70000 or (stime > 70000 and stime[1] < 70000) then
var1 = 0;
var1 = var1+1;
//전일 데이터를 이용하는 로직이므로 과거참조가 들어가는데 dayindex()의 경우
//dayindex()[n]으로 사용할 수 없어 dayindex()값을 일반변수에 move하여 사용하여야 합니다.
//예전에도 이런 경험을 했었는데 기억력이 나쁘다보니 요번에도 여기서 좀 헤맸습니다.
if stime == 70000 or (stime > 70000 and stime[1] < 70000) then //당일 첫번째 봉에서만 계산
{
for arr = 0 to 99 {
price_u[arr] = 0;
price_m[arr] = 0;
price_d[arr] = 0;
status_u[arr] = 0;
status_m[arr] = 0;
status_d[arr] = 0;
tpo_u[arr] = 0;
tpo_m[arr] = 0;
tpo_d[arr] = 0;
}
max_tpo = 0;
tot_tpo = 0;
sum = 0;
acc = 0;
mdl_prc = 0;
mdl_arr = 0;
range_u = 0;
range_d = 0;
//n일 동안의 봉의 개수를 계산하여 계산할 첫번째 봉의 위치를 찾음
if n > 0 then
{
var2 = 0;
for j = 1 to index {
if var1[j] == 1 then var2 = var2 + 1; //dayindex()가 0 즉, 09시인 봉을 n번 찾음
if var2 == n then {
var3 = j;
j = index;
}
}
}
base = dayopen(n) + tick * 149; //n일전 시초가를 기준으로 가격대중 가장 상위의 가격 계산
price_u[0] = base; //지수 배열 상단
for arr = 1 to 99 {
price_u[arr] = price_u[arr-1] - tick;
}
price_m[0] = price_u[99] - tick; //지수 배열 중단
for arr = 1 to 99 {
price_m[arr] = price_m[arr-1] - tick;
}
price_d[0] = price_m[99] - tick; //지수 배열 하단
for arr = 1 to 99 {
price_d[arr] = price_d[arr-1] - tick;
}
for j = var3 downto 1 { //n일전 시초봉에서부터 현재봉 1봉 이전 봉까지 순차적으로 계산
//이후 내용은 당일 지표식과 동일하므로 윗글 참조
ttm = TimeToMinutes(stime[j]);
t_val = int((ttm-540)/intervals) + 1;
for arr = 0 to 99 {
if l[j] <= price_u[arr] and price_u[arr] <= h[j] then
{
if status_u[arr] < t_val then
{
status_u[arr] = t_val;
tpo_u[arr] = tpo_u[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_u[arr] then
{
max_tpo = tpo_u[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_u[arr] then
{
sum = sum + price_u[arr];
acc = acc + 1;
}
}
}
if l[j] <= price_m[arr] and price_m[arr] <= h[j] then
{
if status_m[arr] < t_val then
{
status_m[arr] = t_val;
tpo_m[arr] = tpo_m[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_m[arr] then
{
max_tpo = tpo_m[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_m[arr] then
{
sum = sum + price_m[arr];
acc = acc + 1;
}
}
}
if l[j] <= price_d[arr] and price_d[arr] <= h[j] then
{
if status_d[arr] < t_val then
{
status_d[arr] = t_val;
tpo_d[arr] = tpo_d[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_d[arr] then
{
max_tpo = tpo_d[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_d[arr] then
{
sum = sum + price_d[arr];
acc = acc + 1;
}
}
}
}
}
mdl_prc = round(sum/acc/tick,0)*tick;
mdl_arr = int((base-mdl_prc)/tick);
range_u = mdl_arr;
range_d = mdl_arr;
cal_tpo = iff(mdl_arr<100,tpo_u[mdl_arr],iff(mdl_arr<200,tpo_m[mdl_arr-100],tpo_d[mdl_arr-200]));
for k = 0 to 150 {
// range_u는 한단위씩 위로(-1), range_d는 한단위씩 아래로(+1)
// TPO가 많은 쪽의 TPO를 먼저 누적한다
var4 = iff(range_u-1<100,tpo_u[range_u-1],iff(range_u-1<200,tpo_m[range_u-1-100],tpo_d[range_u-1-200]));
var5 = iff(range_d+1<100,tpo_u[range_d+1],iff(range_d+1<200,tpo_m[range_d+1-100],tpo_d[range_d+1-200]));
if var4 > var5 then
{
cal_tpo = cal_tpo + var4;
range_u = range_u - 1;
}
else if var4 < var5 then
{
cal_tpo = cal_tpo + var5;
range_d = range_d + 1;
}
else if var4 == var5 and var4 > 0 and var5 > 0 then
{
cal_tpo = cal_tpo + var4;
range_u = range_u - 1;
}
if cal_tpo >= tot_tpo * 0.7 or var4 + var5 == 0 then
k = 150;
}
up_tpo = 0;
dn_tpo = 0;
if tpo_u[0] == 1 then up_tail_u = 0;
else up_tail_u = 299;
up_tail_d = 0;
dn_tail_u = 299;
if tpo_d[99] == 1 then dn_tail_d = 299;
else dn_tail_d = 0;
for arr = 0 to mdl_arr-1 {
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and
iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) == 1 then
up_tail_u = arr + 1;
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and
iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) > 1 and
up_tail_d == 0 then
up_tail_d = arr;
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) > 1 then
up_tpo = up_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200]));
}
for arr = 299 downto mdl_arr+1 {
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_u[arr-100],tpo_d[arr-200])) > 1 then
dn_tpo = dn_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200]));
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and
iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) > 1 and
dn_tail_u == 299 then
dn_tail_u = arr;
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and
iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) == 1 then
dn_tail_d = arr - 1;
}
}
plot1(mdl_prc,"중심가격");
plot2(base-(range_u*tick),"가치영역(상)");
plot3(base-(range_d*tick),"가치영역(하)");
if up_tail_u <= up_tail_d then
{
plot4(base-(up_tail_u*tick),"윗꼬리상단");
plot5(base-(up_tail_d*tick),"윗꼬리하단");
}
if dn_tail_u <= dn_tail_d then
{
plot6(base-(dn_tail_u*tick),"아랫꼬리상단");
plot7(base-(dn_tail_d*tick),"아랫꼬리하단");
}
즐거운 하루되세요
> 영업우먼 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
>
계시번호 4296번 수식을 예스글로벌에 적용하고 싶습니다.
수정된 수식 부탁드립니다.
감사합니다.
다음글
이전글