커뮤니티
중심가격
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;
}
}
중심가격 = 가격대[중심행];
이전글