커뮤니티

오류 검증 부탁드립니다.

프로필 이미지
자아준
2011-02-06 22:55:28
881
글번호 35470
답변완료
수고하십니다. 밑의 수식을 선물에서 적용해보니 전혀 매수매도 신호가 없이 디버거를 몇개 넣어 검증 을 해봐도 잘 모르 겠네요 아마 제생각에는 "value = ema(MACD(12, 26),9);" 와 "지표기준고 = value;" 쪽에 수식을 보완해야 될 것 같은데,, 부탁드립니다. Input:전환율(7),지표전환(0.4),유효기간(50); Var:j(0),value(0),다이버전스(0),다이버전스Bar(0),상승(100),하락(-100), 상승률(0),하락률(0),추세선(0), 기준고(0),기준저(0),기준고Bar(0),기준저Bar(0), 추세(0),zz(0), 지표기준고(0),지표기준저(0),지표기준고Bar(0),지표기준저Bar(0), 지표추세(0),지표zz(0); Array:고[10](0),저[10](0),고Bar[10](0),저Bar[10](0), 지표고[10](0),지표저[10](0),지표고Bar[10](0),지표저Bar[10](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# value = ema(MACD(12, 26),9); // MACD signal 상승률 = 1 + (전환율/100); 하락률 = 1 - (전환율/100); for j = 1 to 9 { 저Bar[j] = 저Bar[j] + 1; 고Bar[j] = 고Bar[j] + 1; 지표저Bar[j] = 지표저Bar[j] + 1; 지표고Bar[j] = 지표고Bar[j] + 1; } 다이버전스Bar = 다이버전스Bar + 1; #=========================================================# # 주가 Zigzag 계산 #=========================================================# #---------------------------------------------------------# # 최근 고,저 갱신 #---------------------------------------------------------# if 기준고 <= H or 기준고 == 0 then { MessageLog("기준고 --> %.0f",기준고); 기준고 = H; 기준고Bar = 0; } else 기준고Bar = 기준고Bar + 1; if 기준저 >= L or 기준저 == 0 then { 기준저 = L; 기준저Bar = 0; } else 기준저Bar = 기준저Bar + 1; #---------------------------------------------------------# # 파동 계산 Main #---------------------------------------------------------# if 기준고 * 하락률 > H and 기준저 * 상승률 < L then { //기준점의 인사이드일 경우 if 추세[1] == 상승 and ZZ < 기준저 then 추세 = 하락; else if 추세[1] == 하락 and ZZ > 기준고 then 추세 = 상승; } else if 기준고 * 하락률 > H then 추세 = 하락; else if 기준저 * 상승률 < L then 추세 = 상승; if 추세[1] == 상승 and 추세 == 하락 then { for j = 8 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1] = 기준고; 고Bar[1] = 기준고Bar; ZZ = 기준고; 기준고 = H; 기준고Bar = 0; 기준저 = L; 기준저Bar = 0; } if 추세[1] == 하락 and 추세 == 하락 and 고[1] < 기준고 and 기준고 * 하락률 > H then { 고[1] = 기준고; 고Bar[1] = 기준고Bar; ZZ = 기준고; 기준고 = H; 기준고Bar = 0; 기준저 = L; 기준저Bar = 0; } if 추세[1] == 하락 and 추세 == 상승 then { for j = 8 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1] = 기준저; 저Bar[1] = 기준저Bar; ZZ = 기준저; 기준저 = L; 기준저Bar = 0; 기준고 = H; 기준고Bar = 0; } if 추세[1] == 상승 and 추세 == 상승 and 저[1] > 기준저 and 기준저 * 상승률 < L then { 저[1] = 기준저; 저Bar[1] = 기준저Bar; ZZ = 기준저; 기준저 = L; 기준저Bar = 0; 기준고 = H; 기준고Bar = 0; } #=========================================================# # 지표식 Zigzag 계산 #=========================================================# #---------------------------------------------------------# # 최근 고,저 갱신 #---------------------------------------------------------# if 지표기준고 <= value or 지표기준고 == 0 then { 지표기준고 = value; 지표기준고Bar = 0; } else 지표기준고Bar = 지표기준고Bar + 1; if 지표기준저 >= value or 지표기준저 == 0 then { 지표기준저 = value; 지표기준저Bar = 0; } else 지표기준저Bar = 지표기준저Bar + 1; #---------------------------------------------------------# # 파동 계산 Main #---------------------------------------------------------# if 지표기준고 - 지표전환 > value and 지표기준저 + 지표전환 < value then { //기준점의 인사이드일 경우 if 지표추세[1] == 상승 and 지표ZZ < 지표기준저 then 지표추세 = 하락; else if 지표추세[1] == 하락 and 지표ZZ > 지표기준고 then 지표추세 = 상승; } else if 지표기준고 - 지표전환 > value then 지표추세 = 하락; else if 지표기준저 + 지표전환 < value then 지표추세 = 상승; if 지표추세[1] == 상승 and 지표추세 == 하락 then { for j = 8 downto 1 { 지표고[j+1] = 지표고[j]; 지표고Bar[j+1] = 지표고Bar[j]; } 지표고[1] = 지표기준고; 지표고Bar[1] = 지표기준고Bar; 지표ZZ = 지표기준고; 지표기준고 = value; 지표기준고Bar = 0; 지표기준저 = value; 지표기준저Bar = 0; } if 지표추세[1] == 하락 and 지표추세 == 하락 and 지표고[1] < 지표기준고 and 지표기준고 - 지표전환 > value then { 지표고[1] = 지표기준고; 지표고Bar[1] = 지표기준고Bar; 지표ZZ = 지표기준고; 지표기준고 = value; 지표기준고Bar = 0; 지표기준저 = value; 지표기준저Bar = 0; } if 지표추세[1] == 하락 and 지표추세 == 상승 then { for j = 8 downto 1 { 지표저[j+1] = 지표저[j]; 지표저Bar[j+1] = 지표저Bar[j]; } 지표저[1] = 지표기준저; 지표저Bar[1] = 지표기준저Bar; 지표ZZ = 지표기준저; 지표기준저 = value; 지표기준저Bar = 0; 지표기준고 = value; 지표기준고Bar = 0; } if 지표추세[1] == 상승 and 지표추세 == 상승 and 지표저[1] > 지표기준저 and 지표기준저 + 지표전환 < value then { 지표저[1] = 지표기준저; 지표저Bar[1] = 지표기준저Bar; 지표ZZ = 지표기준저; 지표기준저 = value; 지표기준저Bar = 0; 지표기준고 = value; 지표기준고Bar = 0; } #=========================================================# # 다이버전스 계산 #=========================================================# if ZZ[1] != ZZ or 지표ZZ[1] != 지표ZZ then { if 고[2] < 고[1] and 지표고[2] > 지표고[1] then { 다이버전스 = 하락; 다이버전스Bar = 0; } else if 저[2] > 저[1] and 지표저[2] < 지표저[1] then { 다이버전스 = 상승; 다이버전스Bar = 0; } } if 다이버전스Bar > 유효기간 then 다이버전스 = 0; #=========================================================# # 추세선 계산 #=========================================================# if 다이버전스 == 상승 then { 추세선 = (고[1]-고[2])/(고Bar[2]-고Bar[1]) * 고Bar[2] + 고[2]; } if 다이버전스 == 하락 then { 추세선 = (저[1]-저[2])/(저Bar[2]-저Bar[1]) * 저Bar[2] + 저[2]; } if 다이버전스 == 0 then { 추세선 = 0; } #=========================================================# # 시스템 식 #=========================================================# if 다이버전스 == 상승 and C > ma(C,20) and CrossUp(C,추세선) then Buy("매수"); if 다이버전스 == 하락 and C < ma(C,20) and CrossDown(C,추세선) then Sell("매도");
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2011-02-07 11:01:40

안녕하세요 예스스탁입니다. value와 같은 계산식은 봉이 몇개 발생해야 특정값을 가지고 그전에는 N/A입니다. 이값을 받아 저장하는 다른 변수도 N/A를 저장하게 되어 이후에 계속 그 값을 가지게 됩니다. 모든 수식을 계산에 필요한 봉갯수 이후에 하도록 하였습니다. Input:전환율(7),지표전환(0.4),유효기간(50); Var:j(0),value(0),다이버전스(0),다이버전스Bar(0),상승(100),하락(-100), 상승률(0),하락률(0),추세선(0), 기준고(0),기준저(0),기준고Bar(0),기준저Bar(0), 추세(0),zz(0), 지표기준고(0),지표기준저(0),지표기준고Bar(0),지표기준저Bar(0), 지표추세(0),지표zz(0); Array:고[10](0),저[10](0),고Bar[10](0),저Bar[10](0), 지표고[10](0),지표저[10](0),지표고Bar[10](0),지표저Bar[10](0); #=========================================================# # 초기처리 (Initialize Routine) #=========================================================# value = ema(MACD(12, 26),9); // MACD signal if CurrentBar > 0 then{ 상승률 = 1 + (전환율/100); 하락률 = 1 - (전환율/100); for j = 1 to 9 { 저Bar[j] = 저Bar[j] + 1; 고Bar[j] = 고Bar[j] + 1; 지표저Bar[j] = 지표저Bar[j] + 1; 지표고Bar[j] = 지표고Bar[j] + 1; } 다이버전스Bar = 다이버전스Bar + 1; #=========================================================# # 주가 Zigzag 계산 #=========================================================# #---------------------------------------------------------# # 최근 고,저 갱신 #---------------------------------------------------------# if 기준고 <= H or 기준고 == 0 then { 기준고 = H; 기준고Bar = 0; } else 기준고Bar = 기준고Bar + 1; if 기준저 >= L or 기준저 == 0 then { 기준저 = L; 기준저Bar = 0; } else 기준저Bar = 기준저Bar + 1; #---------------------------------------------------------# # 파동 계산 Main #---------------------------------------------------------# if 기준고 * 하락률 > H and 기준저 * 상승률 < L then { //기준점의 인사이드일 경우 if 추세[1] == 상승 and ZZ < 기준저 then 추세 = 하락; else if 추세[1] == 하락 and ZZ > 기준고 then 추세 = 상승; } else if 기준고 * 하락률 > H then 추세 = 하락; else if 기준저 * 상승률 < L then 추세 = 상승; if 추세[1] == 상승 and 추세 == 하락 then { for j = 8 downto 1 { 고[j+1] = 고[j]; 고Bar[j+1] = 고Bar[j]; } 고[1] = 기준고; 고Bar[1] = 기준고Bar; ZZ = 기준고; 기준고 = H; 기준고Bar = 0; 기준저 = L; 기준저Bar = 0; } if 추세[1] == 하락 and 추세 == 하락 and 고[1] < 기준고 and 기준고 * 하락률 > H then { 고[1] = 기준고; 고Bar[1] = 기준고Bar; ZZ = 기준고; 기준고 = H; 기준고Bar = 0; 기준저 = L; 기준저Bar = 0; } if 추세[1] == 하락 and 추세 == 상승 then { for j = 8 downto 1 { 저[j+1] = 저[j]; 저Bar[j+1] = 저Bar[j]; } 저[1] = 기준저; 저Bar[1] = 기준저Bar; ZZ = 기준저; 기준저 = L; 기준저Bar = 0; 기준고 = H; 기준고Bar = 0; } if 추세[1] == 상승 and 추세 == 상승 and 저[1] > 기준저 and 기준저 * 상승률 < L then { 저[1] = 기준저; 저Bar[1] = 기준저Bar; ZZ = 기준저; 기준저 = L; 기준저Bar = 0; 기준고 = H; 기준고Bar = 0; } #=========================================================# # 지표식 Zigzag 계산 #=========================================================# #---------------------------------------------------------# # 최근 고,저 갱신 #---------------------------------------------------------# if 지표기준고 <= value or 지표기준고 == 0 then { 지표기준고 = value; 지표기준고Bar = 0; } else 지표기준고Bar = 지표기준고Bar + 1; if 지표기준저 >= value or 지표기준저 == 0 then { 지표기준저 = value; 지표기준저Bar = 0; } else 지표기준저Bar = 지표기준저Bar + 1; #---------------------------------------------------------# # 파동 계산 Main #---------------------------------------------------------# if 지표기준고 - 지표전환 > value and 지표기준저 + 지표전환 < value then { //기준점의 인사이드일 경우 if 지표추세[1] == 상승 and 지표ZZ < 지표기준저 then 지표추세 = 하락; else if 지표추세[1] == 하락 and 지표ZZ > 지표기준고 then 지표추세 = 상승; } else if 지표기준고 - 지표전환 > value then 지표추세 = 하락; else if 지표기준저 + 지표전환 < value then 지표추세 = 상승; if 지표추세[1] == 상승 and 지표추세 == 하락 then { for j = 8 downto 1 { 지표고[j+1] = 지표고[j]; 지표고Bar[j+1] = 지표고Bar[j]; } 지표고[1] = 지표기준고; 지표고Bar[1] = 지표기준고Bar; 지표ZZ = 지표기준고; 지표기준고 = value; 지표기준고Bar = 0; 지표기준저 = value; 지표기준저Bar = 0; } if 지표추세[1] == 하락 and 지표추세 == 하락 and 지표고[1] < 지표기준고 and 지표기준고 - 지표전환 > value then { 지표고[1] = 지표기준고; 지표고Bar[1] = 지표기준고Bar; 지표ZZ = 지표기준고; 지표기준고 = value; 지표기준고Bar = 0; 지표기준저 = value; 지표기준저Bar = 0; } if 지표추세[1] == 하락 and 지표추세 == 상승 then { for j = 8 downto 1 { 지표저[j+1] = 지표저[j]; 지표저Bar[j+1] = 지표저Bar[j]; } 지표저[1] = 지표기준저; 지표저Bar[1] = 지표기준저Bar; 지표ZZ = 지표기준저; 지표기준저 = value; 지표기준저Bar = 0; 지표기준고 = value; 지표기준고Bar = 0; } if 지표추세[1] == 상승 and 지표추세 == 상승 and 지표저[1] > 지표기준저 and 지표기준저 + 지표전환 < value then { 지표저[1] = 지표기준저; 지표저Bar[1] = 지표기준저Bar; 지표ZZ = 지표기준저; 지표기준저 = value; 지표기준저Bar = 0; 지표기준고 = value; 지표기준고Bar = 0; } #=========================================================# # 다이버전스 계산 #=========================================================# if ZZ[1] != ZZ or 지표ZZ[1] != 지표ZZ then { if 고[2] < 고[1] and 지표고[2] > 지표고[1] then { 다이버전스 = 하락; 다이버전스Bar = 0; } else if 저[2] > 저[1] and 지표저[2] < 지표저[1] then { 다이버전스 = 상승; 다이버전스Bar = 0; } } if 다이버전스Bar > 유효기간 then 다이버전스 = 0; #=========================================================# # 추세선 계산 #=========================================================# if 다이버전스 == 상승 then { 추세선 = (고[1]-고[2])/(고Bar[2]-고Bar[1]) * 고Bar[2] + 고[2]; } if 다이버전스 == 하락 then { 추세선 = (저[1]-저[2])/(저Bar[2]-저Bar[1]) * 저Bar[2] + 저[2]; } if 다이버전스 == 0 then { 추세선 = 0; } #=========================================================# # 시스템 식 #=========================================================# if 다이버전스 == 상승 and C > ma(C,20) and CrossUp(C,추세선) then Buy("매수"); if 다이버전스 == 하락 and C < ma(C,20) and CrossDown(C,추세선) then Sell("매도"); } 즐거운 하루되세요