커뮤니티
오류 검증 부탁드립니다.
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("매도");
}
즐거운 하루되세요