예스스탁
예스스탁 답변
2020-04-23 16:58:50
안녕하세요
예스스탁입니다.
1
해당수식은 별도로 수정해 드릴 부분이 없습니다.
종목검색과 시스템식에 실행함수 외에 다른 부분이 있지는 않습니다.
2
해당 지정한 N번째 봉에서만 신호가 발생하는 내용입니다.
n번째 봉에서 조건만족한 종목을 이후에 모두 찾고자 하시면
아래와 같이 변경하셔야 합니다.
Var:j(0),행번호(0),단위가격(0),추가행(0),알파벳(0),최대개수(0),총개수(0),봉개수(0),
추정거래량(0),cnt(0),중앙가격(0),최대행(0),중심행(0),상위개수(0),
하위개수(0),시초범위상(0),시초범위하(0),가치영역상한(0),가치영역하한(0),누적개수(0),
위꼬리상한(0),위꼬리하한(0),아래꼬리상한(0),아래꼬리하한(0);
Array:가격대[500](0),거래량[500](0),개수[500](0),프로파일[500](0),
중심가격[50](0),가치영역상[50](0),가치영역하[50](0);
단위가격 = PriceScale;
if DayIndex()==0 then //날짜 변경시점에
{
for j = 48 downto 0
{
중심가격[j+1] = 중심가격[j]; //전일 중심가격과
가치영역상[j+1] = 가치영역상[j]; //전일 가치영역 관리
가치영역하[j+1] = 가치영역하[j];
}
for 행번호 = 0 to 499 //0값으로 초기화
{
거래량[행번호] = 0;
개수[행번호] = 0;
프로파일[행번호] = 0;
}
최대개수 = 0;
총개수 = 0;
시초범위상 = 0; //장 개시 후 1시간내의 가격범위
시초범위하 = 0;
가격대[0] = H + 단위가격 * 100; //100호가의 여유를 둠
for 행번호 = 0 to 498
{
가격대[행번호+1] = 가격대[행번호] - 단위가격; //가격대 배열에 가격 대입
}
}
if 가격대[0] <= H then //고가가 가격대 배열 이상이 되면
{
추가행 = ceiling((H-가격대[0])/단위가격) + 20; //고가에 20호가 여유를 더 두어 재설정
for 행번호 = (499 - 추가행) downto 0
{
가격대[행번호+추가행] = 가격대[행번호]; //추가행만큼 뒤로 옮긴다
거래량[행번호+추가행] = 거래량[행번호];
개수[행번호+추가행] = 개수[행번호];
프로파일[행번호+추가행] = 프로파일[행번호];
}
가격대[0] = 가격대[0] + 단위가격 * 추가행; //추가된 행에 가격 재설정
for 행번호 = 0 to (추가행-1)
{
가격대[행번호+1] = 가격대[행번호] - 단위가격;
}
for 행번호 = 0 to 추가행 //추가된 행의 나머지 항목은
{
거래량[행번호] = 0; //0값으로 초기화
개수[행번호] = 0;
프로파일[행번호] = 0;
}
중심행 = 중심행 + 추가행; //중심가격의 행번호도 뒤로 밀린다
}
알파벳 = DayIndex() + 1; //알파벳 대신 숫자 사용
중앙가격 = (DayHigh()+Daylow())/2; //전체가격폭의 중앙
if DayIndex() == 60/BarInterval-1 then //장 개시 후 1시간내의 가격범위
{
시초범위상 = DayHigh();
시초범위하 = DayLow();
}
cnt = 0;
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then //현재 봉 가격대가 몇가격대
cnt = cnt + 1; //걸쳐져 있는지 계산
}
추정거래량 = V/cnt; //가격대별 배분할 거래량
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then
{
거래량[행번호] = 거래량[행번호] + 추정거래량;
개수[행번호] = 개수[행번호] + 1;
프로파일[행번호] = 알파벳;
총개수 = 총개수 + 1;
if 최대개수 < 개수[행번호] then //신규 최빈값 나왔을 때
{
최대개수 = 개수[행번호];
중심행 = 행번호;
}
else if 최대개수 == 개수[행번호] then //최빈값과 동일하다면
{
if 거래량[중심행] < 거래량[행번호] then //거래량 많은 가격대를
중심행 = 행번호;
else if 거래량[중심행] == 거래량[행번호] and //거래량도 동일하면
abs(중앙가격-가격대[중심행]) > //전체가격폭 중앙에
abs(중앙가격-가격대[행번호]) then //가까운 가격으로
중심행 = 행번호;
}
}
}
중심가격[0] = 가격대[중심행]; //알파벳 개수가 가장 많은 가격
가치영역상한 = 중심행; //중심가격을 중심으로 위, 아래 70% 해당하는
가치영역하한 = 중심행; //행을 찾기 위해 시작 행을 중심행으로 함
누적개수 = 개수[중심행]; //가치영역을 찾기 위해 알파벳 개수 누적
for j = 0 to 499
{
var2 = 개수[가치영역상한-1]; //가치영역상한선은 1행씩 위로(-1)
var3 = 개수[가치영역하한+1]; //가치영역하한선은 1행씩 아래로(+1)
if var2 > var3 then //개수가 많은 쪽의 개수를 먼저 누적한다
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
else if var2 < var3 then
{
누적개수 = 누적개수 + var3;
가치영역하한 = 가치영역하한 + 1;
}
else if var2 == var3 and var2 > 0 and var3 > 0 then
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
if 누적개수 >= 총개수 * 0.7 or var2 + var3 == 0 then
j = 499;
}
가치영역상[0] = 가격대[가치영역상한];
가치영역하[0] = 가격대[가치영역하한];
상위개수 = 0; 하위개수 = 0; 위꼬리상한 = 499; 위꼬리하한 = 0; 아래꼬리상한 = 499;
if 개수[499] == 1 then 아래꼬리하한 = 499;
else 아래꼬리하한 = 0;
for 행번호 = 0 to 중심행-1
{
if 개수[행번호] > 1 then
상위개수 = 상위개수 + 개수[행번호];
if 개수[행번호] == 0 and 개수[행번호+1] == 1 then
위꼬리상한 = 행번호 + 1;
if 개수[행번호] == 1 and 개수[행번호+1] > 1 and 위꼬리하한 == 0 then
위꼬리하한 = 행번호;
}
for 행번호 = 499 downto 중심행+1
{
if 개수[행번호] > 1 then
하위개수 = 하위개수 + 개수[행번호];
if 개수[행번호] == 1 and 개수[행번호-1] > 1 and 아래꼬리상한 == 499 then
아래꼬리상한 = 행번호;
if 개수[행번호] == 0 and 개수[행번호-1] == 1 then
아래꼬리하한 = 행번호 - 1;
}
봉개수 = 0; //단봉, 쌍봉, 삼봉 등 패턴파악용
for 행번호 = 1 to 499
{
if 개수[행번호-1] < 개수[행번호] then //개수가 올라가면
{
if 봉개수 == 0 then 봉개수 = 0.3; //x.3
else if 봉개수 == 1 then 봉개수 = 1.3;
else if 봉개수 == 2 then 봉개수 = 2.3;
else if 봉개수 == 3 then 봉개수 = 3.3;
else if 봉개수 == 4 then 봉개수 = 4.3;
}
if 최대개수 * 0.8 < 개수[행번호] then //꼭지에 도달하면
{
if 봉개수 == 0.3 then 봉개수 = 0.7; //x.7
else if 봉개수 == 1.3 then 봉개수 = 1.7; //낮은 봉은 배제하려고
else if 봉개수 == 2.3 then 봉개수 = 2.7; //최대개수의 80% 수준으로 설정
else if 봉개수 == 3.3 then 봉개수 = 3.7;
else if 봉개수 == 4.3 then 봉개수 = 4.7;
}
if 개수[행번호-1] > 개수[행번호] then //개수가 떨어지는데
{
if 봉개수 == 0.7 then 봉개수 = 1; //꼭지 찍고 내려오는 것은
else if 봉개수 == 1.7 then 봉개수 = 2; //1.0
else if 봉개수 == 2.7 then 봉개수 = 3;
else if 봉개수 == 3.7 then 봉개수 = 4;
else if 봉개수 == 4.7 then 봉개수 = 5;
else if 봉개수 == 0.3 then 봉개수 = 0; //꼭지 못찍고 내려오면
else if 봉개수 == 1.3 then 봉개수 = 1; //원위치
else if 봉개수 == 2.3 then 봉개수 = 2;
else if 봉개수 == 3.3 then 봉개수 = 3;
else if 봉개수 == 4.3 then 봉개수 = 4;
}
}
if DayIndex() == 60/BarInterval - 1 then
{
if 중심가격[0] < C and 최대개수 <= 4 and
시초범위상 - 3*단위가격 < C and
봉개수 == 1 then
Condition1 = true;
Else
Condition1 = false;
}
if Condition1 == Then
find(1);
3
종목검색은 최대 봉수가 500봉만 제공됩니다.
종목검색 속성에서 검색에 제공되는 최소기간에 500으로 지정하고 검색하셔야 합니다.
해당 봉수
즐거운 하루되세요
> sungdong 님이 쓴 글입니다.
> 제목 : 종목검색
> 마켓 프로 파일에 대한 시스템 식으로 구동하니 잘 돼는데 검색식으로 변경해서 검색을하니 검색이 안되는데 일봉 과 30분봉에서 검색 가능하도록 부탁합니다. 좋은 하루되세요
<오래전에 수식지왕이라는 분이 만든겁니다>
Var:j(0),행번호(0),단위가격(0),추가행(0),알파벳(0),최대개수(0),총개수(0),봉개수(0),
추정거래량(0),cnt(0),중앙가격(0),최대행(0),중심행(0),상위개수(0),
하위개수(0),시초범위상(0),시초범위하(0),가치영역상한(0),가치영역하한(0),누적개수(0),
위꼬리상한(0),위꼬리하한(0),아래꼬리상한(0),아래꼬리하한(0);
Array:가격대[500](0),거래량[500](0),개수[500](0),프로파일[500](0),
중심가격[50](0),가치영역상[50](0),가치영역하[50](0);
단위가격 = PriceScale;
if DayIndex()==0 then //날짜 변경시점에
{
for j = 48 downto 0
{
중심가격[j+1] = 중심가격[j]; //전일 중심가격과
가치영역상[j+1] = 가치영역상[j]; //전일 가치영역 관리
가치영역하[j+1] = 가치영역하[j];
}
for 행번호 = 0 to 499 //0값으로 초기화
{
거래량[행번호] = 0;
개수[행번호] = 0;
프로파일[행번호] = 0;
}
최대개수 = 0;
총개수 = 0;
시초범위상 = 0; //장 개시 후 1시간내의 가격범위
시초범위하 = 0;
가격대[0] = H + 단위가격 * 100; //100호가의 여유를 둠
for 행번호 = 0 to 498
{
가격대[행번호+1] = 가격대[행번호] - 단위가격; //가격대 배열에 가격 대입
}
}
if 가격대[0] <= H then //고가가 가격대 배열 이상이 되면
{
추가행 = ceiling((H-가격대[0])/단위가격) + 20; //고가에 20호가 여유를 더 두어 재설정
for 행번호 = (499 - 추가행) downto 0
{
가격대[행번호+추가행] = 가격대[행번호]; //추가행만큼 뒤로 옮긴다
거래량[행번호+추가행] = 거래량[행번호];
개수[행번호+추가행] = 개수[행번호];
프로파일[행번호+추가행] = 프로파일[행번호];
}
가격대[0] = 가격대[0] + 단위가격 * 추가행; //추가된 행에 가격 재설정
for 행번호 = 0 to (추가행-1)
{
가격대[행번호+1] = 가격대[행번호] - 단위가격;
}
for 행번호 = 0 to 추가행 //추가된 행의 나머지 항목은
{
거래량[행번호] = 0; //0값으로 초기화
개수[행번호] = 0;
프로파일[행번호] = 0;
}
중심행 = 중심행 + 추가행; //중심가격의 행번호도 뒤로 밀린다
}
알파벳 = DayIndex() + 1; //알파벳 대신 숫자 사용
중앙가격 = (DayHigh()+Daylow())/2; //전체가격폭의 중앙
if DayIndex() == 60/BarInterval-1 then //장 개시 후 1시간내의 가격범위
{
시초범위상 = DayHigh();
시초범위하 = DayLow();
}
cnt = 0;
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then //현재 봉 가격대가 몇가격대
cnt = cnt + 1; //걸쳐져 있는지 계산
}
추정거래량 = V/cnt; //가격대별 배분할 거래량
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then
{
거래량[행번호] = 거래량[행번호] + 추정거래량;
개수[행번호] = 개수[행번호] + 1;
프로파일[행번호] = 알파벳;
총개수 = 총개수 + 1;
if 최대개수 < 개수[행번호] then //신규 최빈값 나왔을 때
{
최대개수 = 개수[행번호];
중심행 = 행번호;
}
else if 최대개수 == 개수[행번호] then //최빈값과 동일하다면
{
if 거래량[중심행] < 거래량[행번호] then //거래량 많은 가격대를
중심행 = 행번호;
else if 거래량[중심행] == 거래량[행번호] and //거래량도 동일하면
abs(중앙가격-가격대[중심행]) > //전체가격폭 중앙에
abs(중앙가격-가격대[행번호]) then //가까운 가격으로
중심행 = 행번호;
}
}
}
중심가격[0] = 가격대[중심행]; //알파벳 개수가 가장 많은 가격
가치영역상한 = 중심행; //중심가격을 중심으로 위, 아래 70% 해당하는
가치영역하한 = 중심행; //행을 찾기 위해 시작 행을 중심행으로 함
누적개수 = 개수[중심행]; //가치영역을 찾기 위해 알파벳 개수 누적
for j = 0 to 499
{
var2 = 개수[가치영역상한-1]; //가치영역상한선은 1행씩 위로(-1)
var3 = 개수[가치영역하한+1]; //가치영역하한선은 1행씩 아래로(+1)
if var2 > var3 then //개수가 많은 쪽의 개수를 먼저 누적한다
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
else if var2 < var3 then
{
누적개수 = 누적개수 + var3;
가치영역하한 = 가치영역하한 + 1;
}
else if var2 == var3 and var2 > 0 and var3 > 0 then
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
if 누적개수 >= 총개수 * 0.7 or var2 + var3 == 0 then
j = 499;
}
가치영역상[0] = 가격대[가치영역상한];
가치영역하[0] = 가격대[가치영역하한];
상위개수 = 0; 하위개수 = 0; 위꼬리상한 = 499; 위꼬리하한 = 0; 아래꼬리상한 = 499;
if 개수[499] == 1 then 아래꼬리하한 = 499;
else 아래꼬리하한 = 0;
for 행번호 = 0 to 중심행-1
{
if 개수[행번호] > 1 then
상위개수 = 상위개수 + 개수[행번호];
if 개수[행번호] == 0 and 개수[행번호+1] == 1 then
위꼬리상한 = 행번호 + 1;
if 개수[행번호] == 1 and 개수[행번호+1] > 1 and 위꼬리하한 == 0 then
위꼬리하한 = 행번호;
}
for 행번호 = 499 downto 중심행+1
{
if 개수[행번호] > 1 then
하위개수 = 하위개수 + 개수[행번호];
if 개수[행번호] == 1 and 개수[행번호-1] > 1 and 아래꼬리상한 == 499 then
아래꼬리상한 = 행번호;
if 개수[행번호] == 0 and 개수[행번호-1] == 1 then
아래꼬리하한 = 행번호 - 1;
}
봉개수 = 0; //단봉, 쌍봉, 삼봉 등 패턴파악용
for 행번호 = 1 to 499
{
if 개수[행번호-1] < 개수[행번호] then //개수가 올라가면
{
if 봉개수 == 0 then 봉개수 = 0.3; //x.3
else if 봉개수 == 1 then 봉개수 = 1.3;
else if 봉개수 == 2 then 봉개수 = 2.3;
else if 봉개수 == 3 then 봉개수 = 3.3;
else if 봉개수 == 4 then 봉개수 = 4.3;
}
if 최대개수 * 0.8 < 개수[행번호] then //꼭지에 도달하면
{
if 봉개수 == 0.3 then 봉개수 = 0.7; //x.7
else if 봉개수 == 1.3 then 봉개수 = 1.7; //낮은 봉은 배제하려고
else if 봉개수 == 2.3 then 봉개수 = 2.7; //최대개수의 80% 수준으로 설정
else if 봉개수 == 3.3 then 봉개수 = 3.7;
else if 봉개수 == 4.3 then 봉개수 = 4.7;
}
if 개수[행번호-1] > 개수[행번호] then //개수가 떨어지는데
{
if 봉개수 == 0.7 then 봉개수 = 1; //꼭지 찍고 내려오는 것은
else if 봉개수 == 1.7 then 봉개수 = 2; //1.0
else if 봉개수 == 2.7 then 봉개수 = 3;
else if 봉개수 == 3.7 then 봉개수 = 4;
else if 봉개수 == 4.7 then 봉개수 = 5;
else if 봉개수 == 0.3 then 봉개수 = 0; //꼭지 못찍고 내려오면
else if 봉개수 == 1.3 then 봉개수 = 1; //원위치
else if 봉개수 == 2.3 then 봉개수 = 2;
else if 봉개수 == 3.3 then 봉개수 = 3;
else if 봉개수 == 4.3 then 봉개수 = 4;
}
}
if DayIndex() == 60/BarInterval - 1 then
if 중심가격[0] < C and 최대개수 <= 4 and
시초범위상 - 3*단위가격 < C and
봉개수 == 1 then
Buy();
if C[1] >= 중심가격[0] and 중심가격[0] > C then
ExitLong();
sungdong
2020-04-23 22:23:57
"해당 지정한 N번째 봉에서만 신호가 발생하는 내용입니다.
n번째 봉에서 조건만족한 종목을 이후에 모두 찾고자 하시면
아래와 같이 변경하셔야 합니다."
위 내용은 10시에만 나온다는 이야기로 이해되는데 현재 예스스탁이 제공한 식은 안 맞는것 같네요. 가준봉을 30분봉에서 10.11.12.13.14까지 교대로 넣어 봣는데 아무것도 안나오네요
맨 마지막 두줄
if Condition1 == ????? Then
find(1);
에서 CONDITION1은 제가 조건을 넣어야하는지 ????
검증 후에 나온 것은 문법 에러가 나오네요.
물론 컴퓨터를 잘 몰라서 답답하네요..
예로 4월23일 대유, 동양피스톤 두개가 시스템을 돌려보다보니 나오네요
수고하세요.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 종목검색
> 안녕하세요
예스스탁입니다.
1
해당수식은 별도로 수정해 드릴 부분이 없습니다.
종목검색과 시스템식에 실행함수 외에 다른 부분이 있지는 않습니다.
2
해당 지정한 N번째 봉에서만 신호가 발생하는 내용입니다.
n번째 봉에서 조건만족한 종목을 이후에 모두 찾고자 하시면
아래와 같이 변경하셔야 합니다.
Var:j(0),행번호(0),단위가격(0),추가행(0),알파벳(0),최대개수(0),총개수(0),봉개수(0),
추정거래량(0),cnt(0),중앙가격(0),최대행(0),중심행(0),상위개수(0),
하위개수(0),시초범위상(0),시초범위하(0),가치영역상한(0),가치영역하한(0),누적개수(0),
위꼬리상한(0),위꼬리하한(0),아래꼬리상한(0),아래꼬리하한(0);
Array:가격대[500](0),거래량[500](0),개수[500](0),프로파일[500](0),
중심가격[50](0),가치영역상[50](0),가치영역하[50](0);
단위가격 = PriceScale;
if DayIndex()==0 then //날짜 변경시점에
{
for j = 48 downto 0
{
중심가격[j+1] = 중심가격[j]; //전일 중심가격과
가치영역상[j+1] = 가치영역상[j]; //전일 가치영역 관리
가치영역하[j+1] = 가치영역하[j];
}
for 행번호 = 0 to 499 //0값으로 초기화
{
거래량[행번호] = 0;
개수[행번호] = 0;
프로파일[행번호] = 0;
}
최대개수 = 0;
총개수 = 0;
시초범위상 = 0; //장 개시 후 1시간내의 가격범위
시초범위하 = 0;
가격대[0] = H + 단위가격 * 100; //100호가의 여유를 둠
for 행번호 = 0 to 498
{
가격대[행번호+1] = 가격대[행번호] - 단위가격; //가격대 배열에 가격 대입
}
}
if 가격대[0] <= H then //고가가 가격대 배열 이상이 되면
{
추가행 = ceiling((H-가격대[0])/단위가격) + 20; //고가에 20호가 여유를 더 두어 재설정
for 행번호 = (499 - 추가행) downto 0
{
가격대[행번호+추가행] = 가격대[행번호]; //추가행만큼 뒤로 옮긴다
거래량[행번호+추가행] = 거래량[행번호];
개수[행번호+추가행] = 개수[행번호];
프로파일[행번호+추가행] = 프로파일[행번호];
}
가격대[0] = 가격대[0] + 단위가격 * 추가행; //추가된 행에 가격 재설정
for 행번호 = 0 to (추가행-1)
{
가격대[행번호+1] = 가격대[행번호] - 단위가격;
}
for 행번호 = 0 to 추가행 //추가된 행의 나머지 항목은
{
거래량[행번호] = 0; //0값으로 초기화
개수[행번호] = 0;
프로파일[행번호] = 0;
}
중심행 = 중심행 + 추가행; //중심가격의 행번호도 뒤로 밀린다
}
알파벳 = DayIndex() + 1; //알파벳 대신 숫자 사용
중앙가격 = (DayHigh()+Daylow())/2; //전체가격폭의 중앙
if DayIndex() == 60/BarInterval-1 then //장 개시 후 1시간내의 가격범위
{
시초범위상 = DayHigh();
시초범위하 = DayLow();
}
cnt = 0;
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then //현재 봉 가격대가 몇가격대
cnt = cnt + 1; //걸쳐져 있는지 계산
}
추정거래량 = V/cnt; //가격대별 배분할 거래량
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then
{
거래량[행번호] = 거래량[행번호] + 추정거래량;
개수[행번호] = 개수[행번호] + 1;
프로파일[행번호] = 알파벳;
총개수 = 총개수 + 1;
if 최대개수 < 개수[행번호] then //신규 최빈값 나왔을 때
{
최대개수 = 개수[행번호];
중심행 = 행번호;
}
else if 최대개수 == 개수[행번호] then //최빈값과 동일하다면
{
if 거래량[중심행] < 거래량[행번호] then //거래량 많은 가격대를
중심행 = 행번호;
else if 거래량[중심행] == 거래량[행번호] and //거래량도 동일하면
abs(중앙가격-가격대[중심행]) > //전체가격폭 중앙에
abs(중앙가격-가격대[행번호]) then //가까운 가격으로
중심행 = 행번호;
}
}
}
중심가격[0] = 가격대[중심행]; //알파벳 개수가 가장 많은 가격
가치영역상한 = 중심행; //중심가격을 중심으로 위, 아래 70% 해당하는
가치영역하한 = 중심행; //행을 찾기 위해 시작 행을 중심행으로 함
누적개수 = 개수[중심행]; //가치영역을 찾기 위해 알파벳 개수 누적
for j = 0 to 499
{
var2 = 개수[가치영역상한-1]; //가치영역상한선은 1행씩 위로(-1)
var3 = 개수[가치영역하한+1]; //가치영역하한선은 1행씩 아래로(+1)
if var2 > var3 then //개수가 많은 쪽의 개수를 먼저 누적한다
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
else if var2 < var3 then
{
누적개수 = 누적개수 + var3;
가치영역하한 = 가치영역하한 + 1;
}
else if var2 == var3 and var2 > 0 and var3 > 0 then
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
if 누적개수 >= 총개수 * 0.7 or var2 + var3 == 0 then
j = 499;
}
가치영역상[0] = 가격대[가치영역상한];
가치영역하[0] = 가격대[가치영역하한];
상위개수 = 0; 하위개수 = 0; 위꼬리상한 = 499; 위꼬리하한 = 0; 아래꼬리상한 = 499;
if 개수[499] == 1 then 아래꼬리하한 = 499;
else 아래꼬리하한 = 0;
for 행번호 = 0 to 중심행-1
{
if 개수[행번호] > 1 then
상위개수 = 상위개수 + 개수[행번호];
if 개수[행번호] == 0 and 개수[행번호+1] == 1 then
위꼬리상한 = 행번호 + 1;
if 개수[행번호] == 1 and 개수[행번호+1] > 1 and 위꼬리하한 == 0 then
위꼬리하한 = 행번호;
}
for 행번호 = 499 downto 중심행+1
{
if 개수[행번호] > 1 then
하위개수 = 하위개수 + 개수[행번호];
if 개수[행번호] == 1 and 개수[행번호-1] > 1 and 아래꼬리상한 == 499 then
아래꼬리상한 = 행번호;
if 개수[행번호] == 0 and 개수[행번호-1] == 1 then
아래꼬리하한 = 행번호 - 1;
}
봉개수 = 0; //단봉, 쌍봉, 삼봉 등 패턴파악용
for 행번호 = 1 to 499
{
if 개수[행번호-1] < 개수[행번호] then //개수가 올라가면
{
if 봉개수 == 0 then 봉개수 = 0.3; //x.3
else if 봉개수 == 1 then 봉개수 = 1.3;
else if 봉개수 == 2 then 봉개수 = 2.3;
else if 봉개수 == 3 then 봉개수 = 3.3;
else if 봉개수 == 4 then 봉개수 = 4.3;
}
if 최대개수 * 0.8 < 개수[행번호] then //꼭지에 도달하면
{
if 봉개수 == 0.3 then 봉개수 = 0.7; //x.7
else if 봉개수 == 1.3 then 봉개수 = 1.7; //낮은 봉은 배제하려고
else if 봉개수 == 2.3 then 봉개수 = 2.7; //최대개수의 80% 수준으로 설정
else if 봉개수 == 3.3 then 봉개수 = 3.7;
else if 봉개수 == 4.3 then 봉개수 = 4.7;
}
if 개수[행번호-1] > 개수[행번호] then //개수가 떨어지는데
{
if 봉개수 == 0.7 then 봉개수 = 1; //꼭지 찍고 내려오는 것은
else if 봉개수 == 1.7 then 봉개수 = 2; //1.0
else if 봉개수 == 2.7 then 봉개수 = 3;
else if 봉개수 == 3.7 then 봉개수 = 4;
else if 봉개수 == 4.7 then 봉개수 = 5;
else if 봉개수 == 0.3 then 봉개수 = 0; //꼭지 못찍고 내려오면
else if 봉개수 == 1.3 then 봉개수 = 1; //원위치
else if 봉개수 == 2.3 then 봉개수 = 2;
else if 봉개수 == 3.3 then 봉개수 = 3;
else if 봉개수 == 4.3 then 봉개수 = 4;
}
}
if DayIndex() == 60/BarInterval - 1 then
{
if 중심가격[0] < C and 최대개수 <= 4 and
시초범위상 - 3*단위가격 < C and
봉개수 == 1 then
Condition1 = true;
Else
Condition1 = false;
}
if Condition1 == Then
find(1);
3
종목검색은 최대 봉수가 500봉만 제공됩니다.
종목검색 속성에서 검색에 제공되는 최소기간에 500으로 지정하고 검색하셔야 합니다.
해당 봉수
즐거운 하루되세요
> sungdong 님이 쓴 글입니다.
> 제목 : 종목검색
> 마켓 프로 파일에 대한 시스템 식으로 구동하니 잘 돼는데 검색식으로 변경해서 검색을하니 검색이 안되는데 일봉 과 30분봉에서 검색 가능하도록 부탁합니다. 좋은 하루되세요
<오래전에 수식지왕이라는 분이 만든겁니다>
Var:j(0),행번호(0),단위가격(0),추가행(0),알파벳(0),최대개수(0),총개수(0),봉개수(0),
추정거래량(0),cnt(0),중앙가격(0),최대행(0),중심행(0),상위개수(0),
하위개수(0),시초범위상(0),시초범위하(0),가치영역상한(0),가치영역하한(0),누적개수(0),
위꼬리상한(0),위꼬리하한(0),아래꼬리상한(0),아래꼬리하한(0);
Array:가격대[500](0),거래량[500](0),개수[500](0),프로파일[500](0),
중심가격[50](0),가치영역상[50](0),가치영역하[50](0);
단위가격 = PriceScale;
if DayIndex()==0 then //날짜 변경시점에
{
for j = 48 downto 0
{
중심가격[j+1] = 중심가격[j]; //전일 중심가격과
가치영역상[j+1] = 가치영역상[j]; //전일 가치영역 관리
가치영역하[j+1] = 가치영역하[j];
}
for 행번호 = 0 to 499 //0값으로 초기화
{
거래량[행번호] = 0;
개수[행번호] = 0;
프로파일[행번호] = 0;
}
최대개수 = 0;
총개수 = 0;
시초범위상 = 0; //장 개시 후 1시간내의 가격범위
시초범위하 = 0;
가격대[0] = H + 단위가격 * 100; //100호가의 여유를 둠
for 행번호 = 0 to 498
{
가격대[행번호+1] = 가격대[행번호] - 단위가격; //가격대 배열에 가격 대입
}
}
if 가격대[0] <= H then //고가가 가격대 배열 이상이 되면
{
추가행 = ceiling((H-가격대[0])/단위가격) + 20; //고가에 20호가 여유를 더 두어 재설정
for 행번호 = (499 - 추가행) downto 0
{
가격대[행번호+추가행] = 가격대[행번호]; //추가행만큼 뒤로 옮긴다
거래량[행번호+추가행] = 거래량[행번호];
개수[행번호+추가행] = 개수[행번호];
프로파일[행번호+추가행] = 프로파일[행번호];
}
가격대[0] = 가격대[0] + 단위가격 * 추가행; //추가된 행에 가격 재설정
for 행번호 = 0 to (추가행-1)
{
가격대[행번호+1] = 가격대[행번호] - 단위가격;
}
for 행번호 = 0 to 추가행 //추가된 행의 나머지 항목은
{
거래량[행번호] = 0; //0값으로 초기화
개수[행번호] = 0;
프로파일[행번호] = 0;
}
중심행 = 중심행 + 추가행; //중심가격의 행번호도 뒤로 밀린다
}
알파벳 = DayIndex() + 1; //알파벳 대신 숫자 사용
중앙가격 = (DayHigh()+Daylow())/2; //전체가격폭의 중앙
if DayIndex() == 60/BarInterval-1 then //장 개시 후 1시간내의 가격범위
{
시초범위상 = DayHigh();
시초범위하 = DayLow();
}
cnt = 0;
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then //현재 봉 가격대가 몇가격대
cnt = cnt + 1; //걸쳐져 있는지 계산
}
추정거래량 = V/cnt; //가격대별 배분할 거래량
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then
{
거래량[행번호] = 거래량[행번호] + 추정거래량;
개수[행번호] = 개수[행번호] + 1;
프로파일[행번호] = 알파벳;
총개수 = 총개수 + 1;
if 최대개수 < 개수[행번호] then //신규 최빈값 나왔을 때
{
최대개수 = 개수[행번호];
중심행 = 행번호;
}
else if 최대개수 == 개수[행번호] then //최빈값과 동일하다면
{
if 거래량[중심행] < 거래량[행번호] then //거래량 많은 가격대를
중심행 = 행번호;
else if 거래량[중심행] == 거래량[행번호] and //거래량도 동일하면
abs(중앙가격-가격대[중심행]) > //전체가격폭 중앙에
abs(중앙가격-가격대[행번호]) then //가까운 가격으로
중심행 = 행번호;
}
}
}
중심가격[0] = 가격대[중심행]; //알파벳 개수가 가장 많은 가격
가치영역상한 = 중심행; //중심가격을 중심으로 위, 아래 70% 해당하는
가치영역하한 = 중심행; //행을 찾기 위해 시작 행을 중심행으로 함
누적개수 = 개수[중심행]; //가치영역을 찾기 위해 알파벳 개수 누적
for j = 0 to 499
{
var2 = 개수[가치영역상한-1]; //가치영역상한선은 1행씩 위로(-1)
var3 = 개수[가치영역하한+1]; //가치영역하한선은 1행씩 아래로(+1)
if var2 > var3 then //개수가 많은 쪽의 개수를 먼저 누적한다
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
else if var2 < var3 then
{
누적개수 = 누적개수 + var3;
가치영역하한 = 가치영역하한 + 1;
}
else if var2 == var3 and var2 > 0 and var3 > 0 then
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
if 누적개수 >= 총개수 * 0.7 or var2 + var3 == 0 then
j = 499;
}
가치영역상[0] = 가격대[가치영역상한];
가치영역하[0] = 가격대[가치영역하한];
상위개수 = 0; 하위개수 = 0; 위꼬리상한 = 499; 위꼬리하한 = 0; 아래꼬리상한 = 499;
if 개수[499] == 1 then 아래꼬리하한 = 499;
else 아래꼬리하한 = 0;
for 행번호 = 0 to 중심행-1
{
if 개수[행번호] > 1 then
상위개수 = 상위개수 + 개수[행번호];
if 개수[행번호] == 0 and 개수[행번호+1] == 1 then
위꼬리상한 = 행번호 + 1;
if 개수[행번호] == 1 and 개수[행번호+1] > 1 and 위꼬리하한 == 0 then
위꼬리하한 = 행번호;
}
for 행번호 = 499 downto 중심행+1
{
if 개수[행번호] > 1 then
하위개수 = 하위개수 + 개수[행번호];
if 개수[행번호] == 1 and 개수[행번호-1] > 1 and 아래꼬리상한 == 499 then
아래꼬리상한 = 행번호;
if 개수[행번호] == 0 and 개수[행번호-1] == 1 then
아래꼬리하한 = 행번호 - 1;
}
봉개수 = 0; //단봉, 쌍봉, 삼봉 등 패턴파악용
for 행번호 = 1 to 499
{
if 개수[행번호-1] < 개수[행번호] then //개수가 올라가면
{
if 봉개수 == 0 then 봉개수 = 0.3; //x.3
else if 봉개수 == 1 then 봉개수 = 1.3;
else if 봉개수 == 2 then 봉개수 = 2.3;
else if 봉개수 == 3 then 봉개수 = 3.3;
else if 봉개수 == 4 then 봉개수 = 4.3;
}
if 최대개수 * 0.8 < 개수[행번호] then //꼭지에 도달하면
{
if 봉개수 == 0.3 then 봉개수 = 0.7; //x.7
else if 봉개수 == 1.3 then 봉개수 = 1.7; //낮은 봉은 배제하려고
else if 봉개수 == 2.3 then 봉개수 = 2.7; //최대개수의 80% 수준으로 설정
else if 봉개수 == 3.3 then 봉개수 = 3.7;
else if 봉개수 == 4.3 then 봉개수 = 4.7;
}
if 개수[행번호-1] > 개수[행번호] then //개수가 떨어지는데
{
if 봉개수 == 0.7 then 봉개수 = 1; //꼭지 찍고 내려오는 것은
else if 봉개수 == 1.7 then 봉개수 = 2; //1.0
else if 봉개수 == 2.7 then 봉개수 = 3;
else if 봉개수 == 3.7 then 봉개수 = 4;
else if 봉개수 == 4.7 then 봉개수 = 5;
else if 봉개수 == 0.3 then 봉개수 = 0; //꼭지 못찍고 내려오면
else if 봉개수 == 1.3 then 봉개수 = 1; //원위치
else if 봉개수 == 2.3 then 봉개수 = 2;
else if 봉개수 == 3.3 then 봉개수 = 3;
else if 봉개수 == 4.3 then 봉개수 = 4;
}
}
if DayIndex() == 60/BarInterval - 1 then
if 중심가격[0] < C and 최대개수 <= 4 and
시초범위상 - 3*단위가격 < C and
봉개수 == 1 then
Buy();
if C[1] >= 중심가격[0] and 중심가격[0] > C then
ExitLong();