커뮤니티

종목검색

프로필 이미지
sungdong
2020-04-23 10:34:30
1036
글번호 138270
답변완료
마켓 프로 파일에 대한 시스템 식으로 구동하니 잘 돼는데 검색식으로 변경해서 검색을하니 검색이 안되는데 일봉 과 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();
종목검색
답변 2
프로필 이미지

예스스탁 예스스탁 답변

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까지 교대로 넣어 &#48419;는데 아무것도 안나오네요 맨 마지막 두줄 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();