커뮤니티

중심가격

프로필 이미지
파문일기
2012-02-23 17:23:05
592
글번호 48130
답변완료
다음의 중심가격 지표식을 사용자함수로 만들어 사용하고 싶습니다 감사합니다 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:가격대[100](0),거래량[100](0),개수[100](0),프로파일[100](0), 가치영역상[10](0),가치영역하[10](0); 단위가격 = 2 * _TickValue(); if DayIndex()==0 then { //날짜 변경시점에 for j = 8 downto 0 { 중심가격[j+1] = 중심가격[j]; //전일 중심가격과 가치영역상[j+1] = 가치영역상[j]; //전일 가치영역 관리 가치영역하[j+1] = 가치영역하[j]; } for 행번호 = 0 to 99 { //0값으로 초기화 거래량[행번호] = 0; 개수[행번호] = 0; 프로파일[행번호] = 0; } 최대개수 = 0; 총개수 = 0; 시초범위상 = 0; //장 개시 후 1시간내의 가격범위 시초범위하 = 0; 가격대[0] = H + 단위가격 * 20; //20호가의 여유를 둠 for 행번호 = 0 to 98 { 가격대[행번호+1] = 가격대[행번호] - 단위가격; //가격대 배열에 가격 대입 } } if 가격대[0] <= H then { //고가가 가격대 배열 이상이 되면 추가행 = ceiling((H-가격대[0])/단위가격) + 5; //고가에 5호가 여유를 더 두어 재설정 for 행번호 = (99 - 추가행) 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 99 { if L <= 가격대[행번호] and 가격대[행번호] <= H then { //현재 봉 가격대가 몇가격대에 cnt = cnt + 1; //걸쳐져 있는지 계산 } } 추정거래량 = V/cnt; //가격대별 배분할 거래량 for 행번호 = 0 to 99 { if L <= 가격대[행번호] and 가격대[행번호] <= H then { 거래량[행번호] = 거래량[행번호] + 추정거래량; 개수[행번호] = 개수[행번호] + 1; 프로파일[행번호] = 알파벳; 총개수 = 총개수 + 1; if 최대개수 < 개수[행번호] then { //신규 최빈값 나왔을 때 최대개수 = 개수[행번호]; 중심행 = 행번호; } else if 최대개수 == 개수[행번호] then { //최빈값과 동일하다면 if 거래량[중심행] < 거래량[행번호] then //거래량 많은 가격대를 중심행 = 행번호; else if 거래량[중심행] == 거래량[행번호] and //거래량도 동일하면 abs(중앙가격-가격대[중심행]) > //전체가격폭 중앙에 abs(중앙가격-가격대[행번호]) then //가까운 가격으로 중심행 = 행번호; } } } //알파벳 개수가 가장 많은 가격 봉개수 = 0; //단봉, 쌍봉, 삼봉 등 패턴파악용 for 행번호 = 1 to 99 { 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; } } 중심가격 = 가격대[중심행];
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-02-23 17:41:25

안녕하세요 예스스탁입니다. 첨부된 파일을 yeslang 폴더안의 functions 폴더에 다운 하신 후 사용하시면 됩니다. 올려주신 수식내 중심가격이 배열변수입니다. 외부변수로 각배열의 값을 지정할 수 있게 작성했습니다. 아래와 같이 사용하시면 됩니다. plot1(중심가격(0)); plot2(중심가격(1)); plot3(중심가격(2)); 즐거운 하루되세요 > 파문일기 님이 쓴 글입니다. > 제목 : 중심가격 > 다음의 중심가격 지표식을 사용자함수로 만들어 사용하고 싶습니다 감사합니다 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:가격대[100](0),거래량[100](0),개수[100](0),프로파일[100](0), 가치영역상[10](0),가치영역하[10](0); 단위가격 = 2 * _TickValue(); if DayIndex()==0 then { //날짜 변경시점에 for j = 8 downto 0 { 중심가격[j+1] = 중심가격[j]; //전일 중심가격과 가치영역상[j+1] = 가치영역상[j]; //전일 가치영역 관리 가치영역하[j+1] = 가치영역하[j]; } for 행번호 = 0 to 99 { //0값으로 초기화 거래량[행번호] = 0; 개수[행번호] = 0; 프로파일[행번호] = 0; } 최대개수 = 0; 총개수 = 0; 시초범위상 = 0; //장 개시 후 1시간내의 가격범위 시초범위하 = 0; 가격대[0] = H + 단위가격 * 20; //20호가의 여유를 둠 for 행번호 = 0 to 98 { 가격대[행번호+1] = 가격대[행번호] - 단위가격; //가격대 배열에 가격 대입 } } if 가격대[0] <= H then { //고가가 가격대 배열 이상이 되면 추가행 = ceiling((H-가격대[0])/단위가격) + 5; //고가에 5호가 여유를 더 두어 재설정 for 행번호 = (99 - 추가행) 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 99 { if L <= 가격대[행번호] and 가격대[행번호] <= H then { //현재 봉 가격대가 몇가격대에 cnt = cnt + 1; //걸쳐져 있는지 계산 } } 추정거래량 = V/cnt; //가격대별 배분할 거래량 for 행번호 = 0 to 99 { if L <= 가격대[행번호] and 가격대[행번호] <= H then { 거래량[행번호] = 거래량[행번호] + 추정거래량; 개수[행번호] = 개수[행번호] + 1; 프로파일[행번호] = 알파벳; 총개수 = 총개수 + 1; if 최대개수 < 개수[행번호] then { //신규 최빈값 나왔을 때 최대개수 = 개수[행번호]; 중심행 = 행번호; } else if 최대개수 == 개수[행번호] then { //최빈값과 동일하다면 if 거래량[중심행] < 거래량[행번호] then //거래량 많은 가격대를 중심행 = 행번호; else if 거래량[중심행] == 거래량[행번호] and //거래량도 동일하면 abs(중앙가격-가격대[중심행]) > //전체가격폭 중앙에 abs(중앙가격-가격대[행번호]) then //가까운 가격으로 중심행 = 행번호; } } } //알파벳 개수가 가장 많은 가격 봉개수 = 0; //단봉, 쌍봉, 삼봉 등 패턴파악용 for 행번호 = 1 to 99 { 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; } } 중심가격 = 가격대[중심행];