커뮤니티

직접문과 for문 사용시 결과가 다릅니다.

프로필 이미지
패스
2004-08-05 16:25:32
932
글번호 4762
답변완료
다음 두 코드의 결과가 다르게 나오는 이유가 무엇인가요? 이해할수 없읍니다. 하나씩 따로 한것과 for문을 쓴것이 다르게 나오네요. 2004년 8월 4일 5분봉으로 테스트 했읍니다. 마지막 봉의 결과만 제시합니다. 5이평의 값을 알아보는 건데 실제 <코드1>처럼 한것은 정확한 결과를 주지만 for문을 사용한 <코드2>는 실제와 결과가 다릅니다. 제가 모르는 실수가 있는것 같은데, 알 수가 없군요. --------------------------------------------------------------------------- <코드1> var : P(0),ci(0); # 이평선주기 결정 P = 5; ci=0; # 현재봉기준 Print("debug.txt","현재봉번호 %.4f",ci); Print("debug.txt","2봉전 5ma %.4f",ma(c,P)[ci+2]); Print("debug.txt","1봉전 5ma %.4f",ma(c,P)[ci+1]); Print("debug.txt","0봉전 5ma %.4f",ma(c,P)[ci+0]); Print("debug.txt"," "); ci=1; #직전봉 기준 Print("debug.txt","현재봉번호 %.4f",ci); Print("debug.txt","2봉전 5ma %.4f",ma(c,P)[ci+2]); Print("debug.txt","1봉전 5ma %.4f",ma(c,P)[ci+1]); Print("debug.txt","0봉전 5ma %.4f",ma(c,P)[ci+0]); Print("debug.txt"," "); 2004-08-04 15:14:00 현재봉번호 0.0000 2004-08-04 15:14:00 2봉전 5ma 93.1500 2004-08-04 15:14:00 1봉전 5ma 93.2200 2004-08-04 15:14:00 0봉전 5ma 93.2700 2004-08-04 15:14:00 2004-08-04 15:14:00 현재봉번호 1.0000 2004-08-04 15:14:00 2봉전 5ma 93.0600 2004-08-04 15:14:00 1봉전 5ma 93.1500 2004-08-04 15:14:00 0봉전 5ma 93.2200 2004-08-04 15:14:00 2004-08-04 15:15:01 현재봉번호 0.0000 2004-08-04 15:15:01 2봉전 5ma 93.2200 2004-08-04 15:15:01 1봉전 5ma 93.2700 2004-08-04 15:15:01 0봉전 5ma 93.3100 2004-08-04 15:15:01 2004-08-04 15:15:01 현재봉번호 1.0000 2004-08-04 15:15:01 2봉전 5ma 93.1500 2004-08-04 15:15:01 1봉전 5ma 93.2200 2004-08-04 15:15:01 0봉전 5ma 93.2700 2004-08-04 15:15:01 -------------------------------------------------------------------------------- <코드2> var : P(0),ci(0); # 이평선주기 결정 P = 5; for ci = 0 to 1 { Print("debug.txt","현재봉번호 %.4f",ci); Print("debug.txt","2봉전 5ma %.4f",ma(c,P)[ci+2]); Print("debug.txt","1봉전 5ma %.4f",ma(c,P)[ci+1]); Print("debug.txt","0봉전 5ma %.4f",ma(c,P)[ci+0]); Print("debug.txt"," "); } 2004-08-04 15:14:00 현재봉번호 0.0000 2004-08-04 15:14:00 2봉전 5ma 93.2900 2004-08-04 15:14:00 1봉전 5ma 93.3300 2004-08-04 15:14:00 0봉전 5ma 93.3200 2004-08-04 15:14:00 2004-08-04 15:14:00 현재봉번호 1.0000 2004-08-04 15:14:00 2봉전 5ma 93.1700 2004-08-04 15:14:00 1봉전 5ma 93.2900 2004-08-04 15:14:00 0봉전 5ma 93.3300 2004-08-04 15:14:00 2004-08-04 15:15:01 현재봉번호 0.0000 2004-08-04 15:15:01 2봉전 5ma 93.3300 2004-08-04 15:15:01 1봉전 5ma 93.3100 2004-08-04 15:15:01 0봉전 5ma 93.2900 2004-08-04 15:15:01 2004-08-04 15:15:01 현재봉번호 1.0000 2004-08-04 15:15:01 2봉전 5ma 93.2900 2004-08-04 15:15:01 1봉전 5ma 93.3300 2004-08-04 15:15:01 0봉전 5ma 93.3100 2004-08-04 15:15:01
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2004-08-09 14:18:42

안녕하세요? 예스스탁입니다. 우선 답변이 늦어져서 죄송합니다. ma(c,5)는 5개봉의 종가를 누적하여 평균을 구한 값입니다. 하지만 for문내에서 ma(c,5)를 호출하게 되면 호출될 때마다 해당봉의 종가가 누적되어 평균값을 구하게 되므로 사용자님께서 의도하시는 결과와 다른 결과가 나오게 됩니다. 그러므로 ma함수와 같은 누적함수를 for문안에 사용하실 때에는 이점 유의하시어 다른 방식으로 식을 변경하여 작성하셔야 합니다. 이용에 참고하시기 바랍니다. 감사합니다. > 패스 님이 쓴 글입니다. > 제목 : 직접문과 for문 사용시 결과가 다릅니다. > 다음 두 코드의 결과가 다르게 나오는 이유가 무엇인가요? 이해할수 없읍니다. 하나씩 따로 한것과 for문을 쓴것이 다르게 나오네요. 2004년 8월 4일 5분봉으로 테스트 했읍니다. 마지막 봉의 결과만 제시합니다. 5이평의 값을 알아보는 건데 실제 <코드1>처럼 한것은 정확한 결과를 주지만 for문을 사용한 <코드2>는 실제와 결과가 다릅니다. 제가 모르는 실수가 있는것 같은데, 알 수가 없군요. --------------------------------------------------------------------------- <코드1> var : P(0),ci(0); # 이평선주기 결정 P = 5; ci=0; # 현재봉기준 Print("debug.txt","현재봉번호 %.4f",ci); Print("debug.txt","2봉전 5ma %.4f",ma(c,P)[ci+2]); Print("debug.txt","1봉전 5ma %.4f",ma(c,P)[ci+1]); Print("debug.txt","0봉전 5ma %.4f",ma(c,P)[ci+0]); Print("debug.txt"," "); ci=1; #직전봉 기준 Print("debug.txt","현재봉번호 %.4f",ci); Print("debug.txt","2봉전 5ma %.4f",ma(c,P)[ci+2]); Print("debug.txt","1봉전 5ma %.4f",ma(c,P)[ci+1]); Print("debug.txt","0봉전 5ma %.4f",ma(c,P)[ci+0]); Print("debug.txt"," "); 2004-08-04 15:14:00 현재봉번호 0.0000 2004-08-04 15:14:00 2봉전 5ma 93.1500 2004-08-04 15:14:00 1봉전 5ma 93.2200 2004-08-04 15:14:00 0봉전 5ma 93.2700 2004-08-04 15:14:00 2004-08-04 15:14:00 현재봉번호 1.0000 2004-08-04 15:14:00 2봉전 5ma 93.0600 2004-08-04 15:14:00 1봉전 5ma 93.1500 2004-08-04 15:14:00 0봉전 5ma 93.2200 2004-08-04 15:14:00 2004-08-04 15:15:01 현재봉번호 0.0000 2004-08-04 15:15:01 2봉전 5ma 93.2200 2004-08-04 15:15:01 1봉전 5ma 93.2700 2004-08-04 15:15:01 0봉전 5ma 93.3100 2004-08-04 15:15:01 2004-08-04 15:15:01 현재봉번호 1.0000 2004-08-04 15:15:01 2봉전 5ma 93.1500 2004-08-04 15:15:01 1봉전 5ma 93.2200 2004-08-04 15:15:01 0봉전 5ma 93.2700 2004-08-04 15:15:01 -------------------------------------------------------------------------------- <코드2> var : P(0),ci(0); # 이평선주기 결정 P = 5; for ci = 0 to 1 { Print("debug.txt","현재봉번호 %.4f",ci); Print("debug.txt","2봉전 5ma %.4f",ma(c,P)[ci+2]); Print("debug.txt","1봉전 5ma %.4f",ma(c,P)[ci+1]); Print("debug.txt","0봉전 5ma %.4f",ma(c,P)[ci+0]); Print("debug.txt"," "); } 2004-08-04 15:14:00 현재봉번호 0.0000 2004-08-04 15:14:00 2봉전 5ma 93.2900 2004-08-04 15:14:00 1봉전 5ma 93.3300 2004-08-04 15:14:00 0봉전 5ma 93.3200 2004-08-04 15:14:00 2004-08-04 15:14:00 현재봉번호 1.0000 2004-08-04 15:14:00 2봉전 5ma 93.1700 2004-08-04 15:14:00 1봉전 5ma 93.2900 2004-08-04 15:14:00 0봉전 5ma 93.3300 2004-08-04 15:14:00 2004-08-04 15:15:01 현재봉번호 0.0000 2004-08-04 15:15:01 2봉전 5ma 93.3300 2004-08-04 15:15:01 1봉전 5ma 93.3100 2004-08-04 15:15:01 0봉전 5ma 93.2900 2004-08-04 15:15:01 2004-08-04 15:15:01 현재봉번호 1.0000 2004-08-04 15:15:01 2봉전 5ma 93.2900 2004-08-04 15:15:01 1봉전 5ma 93.3300 2004-08-04 15:15:01 0봉전 5ma 93.3100 2004-08-04 15:15:01