커뮤니티

참조데이터 사용시 오류

프로필 이미지
anyhelp
2010-09-11 10:22:12
1331
글번호 32308
답변완료

첨부 이미지

안녕하세요. 애니헬프 김용호 라고 합니다. 하이투자 예스트레이더를 사용하고 있씁니다. 어제 만기일 다음날 특정조건 수행에 관해 문의 드렸고, 답변을 잘 받았습니다. 저는 제가 만든 수식에 문제가 있나해서 문의 드린 건데 디버깅 확인 결과 예스트레이더 오류가 아닌가 생각되어 관련 디버깅 자료를 캡쳐해서 올립니다. 관련 답변부탁드립니다. 그럼 수고하십시요. ///////////////// 수식 ///////////////////////// // 만기일 다음날에는 참조데이터 사용해서 진입하라는 수식임 // 참조데이터 몇개 돌려봤는데 비슷합니다. // 그리고 참조데이터를 여러개 조합해서 수식만들면 헛바퀴도는 횟수가 // 증가하더라구요. // 사용한 참조데이터는 KSP 하락종목수 (1분Data2)입니다. // 기본챠트는 연결선물 1분봉이고, 만기일 다음날 조건수식입니다. //////////////////////////////////////////////////////////////////////////// var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } ////////////////////////////// 디버깅 로그 ////////////////////////// *** 아래 그림에서 보시는 것과 같이 만기일 다음날 첫봉인 09:00:00 에서 엉뚱한 루핑이 8회 돌면서 condition 값이 False로 초기화 되어 만기일 다음날 값 적용이 안되네요. 크... 참조데이터 갯수가 늘면 그만큼 오류 루핑횟수는 더 증가하더라구요. *** 물론 참조데이터를 빼고 돌리면 정상적으로 나옵니다. T.T *** 이 오류 때문에 어제 수익날께 손실로 마감했는데 어디다 하소연하나... 크... 첨부파일1은 참조데이터를 제외한 정상적인 디버깅 결과이고, 첨부파일2는 참조데이터 1개 추가시 오류 루핑이 도는 디버깅 결과입니다.
시스템
답변 6
프로필 이미지

캐빈이야

2010-09-11 09:23:21

먼저 오류가 왜 발생되는지에 대해 말씀드리겠습니다. 첫번째 문제 0900봉에서 여러번 로직이 실행되다 보니 condition1[1]의 값이 전날 마지막 봉의 값이 되어야 하는데, 그렇지 않게 되어서 문제가 된것입니다. 간단히 condition[1]을 사용하지 말고 condition1[50]을 사용하면 됩니다. 두번째 문제 당일 하락종목수인경우 주식이나 kospi200처럼 0900분 봉이 없습니다. 그래서 DATA2(Close) 값이 만기날 동시호가 봉이 보여지게 되고 생각이외의 오류가 생깁니다. DATA2(close) > 100인 곳에서 stime을 0901분 이후로 하시면 될듯합니다. 세번째 문제는 만기날이 휴일인경우 수요일이 만기날이 됩니다. 그런경우 다음날은 찾지 못할수 있습니다. 이건 복잡할수 있으니.... 예스스탁 전문가님께 질문해주세요.. 바빠서 간단한 것만 답변드립니다. 로직 수정부분은 두라인입니다. -------------------------------------------------------------------- var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[50]; //<===============수정부분 이부분을 이렇게 넣은 이유는 0900에 여러번에 계산과정에서 다른 값을 들어가는 것을 막기 위해서입니다. 전날1분봉(378개) 모두가 Condition1값이 TRUE 값을 가지니 이렇게 편법으로 했습니다. 그럼 휩소를 피할수 있습니다. } MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If stime >= 090100 and data2(Close) > 100 then{ //<====================수정부분 당일하락수로만 결정 Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } > anyhelp 님이 쓴 글입니다. > 제목 : 참조데이터 사용시 오류 > 안녕하세요. 애니헬프 김용호 라고 합니다. 하이투자 예스트레이더를 사용하고 있씁니다. 어제 만기일 다음날 특정조건 수행에 관해 문의 드렸고, 답변을 잘 받았습니다. 저는 제가 만든 수식에 문제가 있나해서 문의 드린 건데 디버깅 확인 결과 예스트레이더 오류가 아닌가 생각되어 관련 디버깅 자료를 캡쳐해서 올립니다. 관련 답변부탁드리고, 답변은 박상우씨께서 제 전화번호를 아실꺼 같으니 연락 부탁드립니다.(또는 하이투자 정문채 차장님께) 그럼 수고하십시요. ///////////////// 수식 ///////////////////////// // 만기일 다음날에는 참조데이터 사용해서 진입하라는 수식임 // 참조데이터 몇개 돌려봤는데 비슷합니다. // 그리고 참조데이터를 여러개 조합해서 수식만들면 헛바퀴도는 횟수가 // 증가하더라구요. // 사용한 참조데이터는 KSP 하락종목수 (1분Data2)입니다. // 기본챠트는 연결선물 1분봉이고, 만기일 다음날 조건수식입니다. //////////////////////////////////////////////////////////////////////////// var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } ////////////////////////////// 디버깅 로그 ////////////////////////// *** 아래 그림에서 보시는 것과 같이 만기일 다음날 첫봉인 09:00:00 에서 엉뚱한 루핑이 8회 돌면서 condition 값이 False로 초기화 되어 만기일 다음날 값 적용이 안되네요. 크... 참조데이터 갯수가 늘면 그만큼 오류 루핑횟수는 더 증가하더라구요. *** 물론 참조데이터를 빼고 돌리면 정상적으로 나옵니다. T.T *** 이 오류 때문에 어제 수익날께 손실로 마감했는데 어디다 하소연하나... 크... 첨부파일1은 참조데이터를 제외한 정상적인 디버깅 결과이고, 첨부파일2는 참조데이터 1개 추가시 오류 루핑이 도는 디버깅 결과입니다.
프로필 이미지

anyhelp

2010-09-11 10:19:34

캐빈님 답변 감사합니다. ^^ 우선 응급처리용으로는 충분히 사용할 수 있을것 같습니다. ㅎㅎㅎ 그런데 우선은 090000에서 반복되는 원이이 해결이 안된 것 같고, 제가 사용하는 참조데이터가 여러개라서. 한개일경우 8번 반복이지만 참조데이터가 늘어나면 더 많아지더라구요. 로직을 조금 응용하면 캐빈님이 알려주신 방법으로 구현은 가능할꺼 같습니다. 감사합니다. ㅎㅎㅎ 예스 운영자분께서 글 보시면 왜 090000에서 참조데이터 사용시 반복이 생기는지와 해결 방법 추가 답변 부탁드립니다. ^^ ================================================================ > 캐빈이야 님이 쓴 글입니다. > 제목 : Re : 참조데이터 사용시 오류 > 먼저 오류가 왜 발생되는지에 대해 말씀드리겠습니다. 첫번째 문제 0900봉에서 여러번 로직이 실행되다 보니 condition1[1]의 값이 전날 마지막 봉의 값이 되어야 하는데, 그렇지 않게 되어서 문제가 된것입니다. 간단히 condition[1]을 사용하지 말고 condition1[50]을 사용하면 됩니다. 두번째 문제 당일 하락종목수인경우 주식이나 kospi200처럼 0900분 봉이 없습니다. 그래서 DATA2(Close) 값이 만기날 동시호가 봉이 보여지게 되고 생각이외의 오류가 생깁니다. DATA2(close) > 100인 곳에서 stime을 0901분 이후로 하시면 될듯합니다. 세번째 문제는 만기날이 휴일인경우 수요일이 만기날이 됩니다. 그런경우 다음날은 찾지 못할수 있습니다. 이건 복잡할수 있으니.... 예스스탁 전문가님께 질문해주세요.. 바빠서 간단한 것만 답변드립니다. 로직 수정부분은 두라인입니다. -------------------------------------------------------------------- var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[50]; //<===============수정부분 이부분을 이렇게 넣은 이유는 0900에 여러번에 계산과정에서 다른 값을 들어가는 것을 막기 위해서입니다. 전날1분봉(378개) 모두가 Condition1값이 TRUE 값을 가지니 이렇게 편법으로 했습니다. 그럼 휩소를 피할수 있습니다. } MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If stime >= 090100 and data2(Close) > 100 then{ //<====================수정부분 당일하락수로만 결정 Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } > anyhelp 님이 쓴 글입니다. > 제목 : 참조데이터 사용시 오류 > 안녕하세요. 애니헬프 김용호 라고 합니다. 하이투자 예스트레이더를 사용하고 있씁니다. 어제 만기일 다음날 특정조건 수행에 관해 문의 드렸고, 답변을 잘 받았습니다. 저는 제가 만든 수식에 문제가 있나해서 문의 드린 건데 디버깅 확인 결과 예스트레이더 오류가 아닌가 생각되어 관련 디버깅 자료를 캡쳐해서 올립니다. 관련 답변부탁드리고, 답변은 박상우씨께서 제 전화번호를 아실꺼 같으니 연락 부탁드립니다.(또는 하이투자 정문채 차장님께) 그럼 수고하십시요. ///////////////// 수식 ///////////////////////// // 만기일 다음날에는 참조데이터 사용해서 진입하라는 수식임 // 참조데이터 몇개 돌려봤는데 비슷합니다. // 그리고 참조데이터를 여러개 조합해서 수식만들면 헛바퀴도는 횟수가 // 증가하더라구요. // 사용한 참조데이터는 KSP 하락종목수 (1분Data2)입니다. // 기본챠트는 연결선물 1분봉이고, 만기일 다음날 조건수식입니다. //////////////////////////////////////////////////////////////////////////// var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } ////////////////////////////// 디버깅 로그 ////////////////////////// *** 아래 그림에서 보시는 것과 같이 만기일 다음날 첫봉인 09:00:00 에서 엉뚱한 루핑이 8회 돌면서 condition 값이 False로 초기화 되어 만기일 다음날 값 적용이 안되네요. 크... 참조데이터 갯수가 늘면 그만큼 오류 루핑횟수는 더 증가하더라구요. *** 물론 참조데이터를 빼고 돌리면 정상적으로 나옵니다. T.T *** 이 오류 때문에 어제 수익날께 손실로 마감했는데 어디다 하소연하나... 크... 첨부파일1은 참조데이터를 제외한 정상적인 디버깅 결과이고, 첨부파일2는 참조데이터 1개 추가시 오류 루핑이 도는 디버깅 결과입니다.
프로필 이미지

anyhelp

2010-09-11 19:30:47

anyhelp 님에 의해 삭제된 답변입니다.
프로필 이미지

anyhelp

2010-09-11 20:23:33

정확한 오류 원인을 찾았습니다. ㅎㅎㅎ 이제 임시 방편이 아닌 정확한 수식이 가능할 듯합니다. ===========오류원인============ 선물 만기일 처럼 기본차트가 먼저 종료되는 경우 기본차트가 종료된 된 후에도 참조차트는 계속 진행이되는데 이때, 참조차트의 날짜가 해당날짜가 아니고 다음날 첫봉 시가로 나타나네요. 이때문에 참조차트에서 진행된 봉 수만큼 루핑이 추가되고, 루핑되는 동안에는 동일 날짜로 인식되어 제 수식경우 값이 초기화하게 되네요. 에고... 그런데 이오류 시스템에서 수정하고 나면 참조데이터 사용하여서 시스템 구현하신분들은 잘못하면 기존것과 다른 신호가 나올수도 있겠네요.. 만약 오류 수정해주실꺼면 공지사항 크게 올려주셔야 할듯합니다. 안그러면 이번에 오류값 감안해서 새로 작성하는 수식이 다음에 다시 엉뚱한 신호가 나올테니까요. ^^ 다행히 원인을 찾았으니, 제 시스템은 수식으로 커버할 수 있을 듯한데, 어쨌든 시스템이 또 지저분해지겠네요. 크... 어제 아깝게 손실본 내돈... T.T 예스에서 이런 오류 없었으면... 손실 안봤을텐데.. T.T 너무 아쉬워요.. T.T ================================================================== > anyhelp 님이 쓴 글입니다. > 제목 : Re : Re : 참조데이터 사용시 오류 > 캐빈님 답변 감사합니다. ^^ 우선 응급처리용으로는 충분히 사용할 수 있을것 같습니다. ㅎㅎㅎ 그런데 우선은 090000에서 반복되는 원이이 해결이 안된 것 같고, 제가 사용하는 참조데이터가 여러개라서. 한개일경우 8번 반복이지만 참조데이터가 늘어나면 더 많아지더라구요. 로직을 조금 응용하면 캐빈님이 알려주신 방법으로 구현은 가능할꺼 같습니다. 감사합니다. ㅎㅎㅎ 예스 운영자분께서 글 보시면 왜 090000에서 참조데이터 사용시 반복이 생기는지와 해결 방법 추가 답변 부탁드립니다. ^^ ================================================================ > 캐빈이야 님이 쓴 글입니다. > 제목 : Re : 참조데이터 사용시 오류 > 먼저 오류가 왜 발생되는지에 대해 말씀드리겠습니다. 첫번째 문제 0900봉에서 여러번 로직이 실행되다 보니 condition1[1]의 값이 전날 마지막 봉의 값이 되어야 하는데, 그렇지 않게 되어서 문제가 된것입니다. 간단히 condition[1]을 사용하지 말고 condition1[50]을 사용하면 됩니다. 두번째 문제 당일 하락종목수인경우 주식이나 kospi200처럼 0900분 봉이 없습니다. 그래서 DATA2(Close) 값이 만기날 동시호가 봉이 보여지게 되고 생각이외의 오류가 생깁니다. DATA2(close) > 100인 곳에서 stime을 0901분 이후로 하시면 될듯합니다. 세번째 문제는 만기날이 휴일인경우 수요일이 만기날이 됩니다. 그런경우 다음날은 찾지 못할수 있습니다. 이건 복잡할수 있으니.... 예스스탁 전문가님께 질문해주세요.. 바빠서 간단한 것만 답변드립니다. 로직 수정부분은 두라인입니다. -------------------------------------------------------------------- var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[50]; //<===============수정부분 이부분을 이렇게 넣은 이유는 0900에 여러번에 계산과정에서 다른 값을 들어가는 것을 막기 위해서입니다. 전날1분봉(378개) 모두가 Condition1값이 TRUE 값을 가지니 이렇게 편법으로 했습니다. 그럼 휩소를 피할수 있습니다. } MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If stime >= 090100 and data2(Close) > 100 then{ //<====================수정부분 당일하락수로만 결정 Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } > anyhelp 님이 쓴 글입니다. > 제목 : 참조데이터 사용시 오류 > 안녕하세요. 애니헬프 김용호 라고 합니다. 하이투자 예스트레이더를 사용하고 있씁니다. 어제 만기일 다음날 특정조건 수행에 관해 문의 드렸고, 답변을 잘 받았습니다. 저는 제가 만든 수식에 문제가 있나해서 문의 드린 건데 디버깅 확인 결과 예스트레이더 오류가 아닌가 생각되어 관련 디버깅 자료를 캡쳐해서 올립니다. 관련 답변부탁드리고, 답변은 박상우씨께서 제 전화번호를 아실꺼 같으니 연락 부탁드립니다.(또는 하이투자 정문채 차장님께) 그럼 수고하십시요. ///////////////// 수식 ///////////////////////// // 만기일 다음날에는 참조데이터 사용해서 진입하라는 수식임 // 참조데이터 몇개 돌려봤는데 비슷합니다. // 그리고 참조데이터를 여러개 조합해서 수식만들면 헛바퀴도는 횟수가 // 증가하더라구요. // 사용한 참조데이터는 KSP 하락종목수 (1분Data2)입니다. // 기본챠트는 연결선물 1분봉이고, 만기일 다음날 조건수식입니다. //////////////////////////////////////////////////////////////////////////// var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } ////////////////////////////// 디버깅 로그 ////////////////////////// *** 아래 그림에서 보시는 것과 같이 만기일 다음날 첫봉인 09:00:00 에서 엉뚱한 루핑이 8회 돌면서 condition 값이 False로 초기화 되어 만기일 다음날 값 적용이 안되네요. 크... 참조데이터 갯수가 늘면 그만큼 오류 루핑횟수는 더 증가하더라구요. *** 물론 참조데이터를 빼고 돌리면 정상적으로 나옵니다. T.T *** 이 오류 때문에 어제 수익날께 손실로 마감했는데 어디다 하소연하나... 크... 첨부파일1은 참조데이터를 제외한 정상적인 디버깅 결과이고, 첨부파일2는 참조데이터 1개 추가시 오류 루핑이 도는 디버깅 결과입니다.
프로필 이미지

예스스탁 예스스탁 답변

2010-09-13 09:40:01

안녕하세요 예스스탁입니다. 수식에서 참조종목을 사용하시는 경우에는 변수를 선언할 때 다르게 해주셔야 합니다. 수식은 시세를 수신시 마다 읽어 들어가게 되는데 참조종목의 경우 서로 봉완성이 다르므로 여러번 수식을 읽어 들어갈 수 있습니다. var : va1(0,data1),va2(0,data1),va3(0,data1);#1 var : Condition1(false,data1),Condition2(false,data1);#2 va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if data1(date != date[1]) Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } 수식을 여러번 읽어들어가는 부분은 체계적인 문제라 변경될수 없는내용이므로 수식을 계산시에 각 변수가 할당되는 데이터를 명시하여 이전값 참조시에 해당 데이터주기를 따라 갈수 있도록 선언을 #1,#2와 같이 작성해 주셔야 합니다. 랭귀지 도움말에 해당 부분과 비슷한 내용이 있지만 설명이 많이 부족한 것 같습니다. 자세한 내용을 다시 정리해서 도움말을 보강하고 공지하도록 하겠습니다. 즐거운 하루되세요 > anyhelp 님이 쓴 글입니다. > 제목 : Re : Re : Re : 정확한 오류원인을 찾았습니다. 크... > 정확한 오류 원인을 찾았습니다. ㅎㅎㅎ 이제 임시 방편이 아닌 정확한 수식이 가능할 듯합니다. ===========오류원인============ 선물 만기일 처럼 기본차트가 먼저 종료되는 경우 기본차트가 종료된 된 후에도 참조차트는 계속 진행이되는데 이때, 참조차트의 날짜가 해당날짜가 아니고 다음날 첫봉 시가로 나타나네요. 이때문에 참조차트에서 진행된 봉 수만큼 루핑이 추가되고, 루핑되는 동안에는 동일 날짜로 인식되어 제 수식경우 값이 초기화하게 되네요. 에고... 그런데 이오류 시스템에서 수정하고 나면 참조데이터 사용하여서 시스템 구현하신분들은 잘못하면 기존것과 다른 신호가 나올수도 있겠네요.. 만약 오류 수정해주실꺼면 공지사항 크게 올려주셔야 할듯합니다. 안그러면 이번에 오류값 감안해서 새로 작성하는 수식이 다음에 다시 엉뚱한 신호가 나올테니까요. ^^ 다행히 원인을 찾았으니, 제 시스템은 수식으로 커버할 수 있을 듯한데, 어쨌든 시스템이 또 지저분해지겠네요. 크... 어제 아깝게 손실본 내돈... T.T 예스에서 이런 오류 없었으면... 손실 안봤을텐데.. T.T 너무 아쉬워요.. T.T ================================================================== > anyhelp 님이 쓴 글입니다. > 제목 : Re : Re : 참조데이터 사용시 오류 > 캐빈님 답변 감사합니다. ^^ 우선 응급처리용으로는 충분히 사용할 수 있을것 같습니다. ㅎㅎㅎ 그런데 우선은 090000에서 반복되는 원이이 해결이 안된 것 같고, 제가 사용하는 참조데이터가 여러개라서. 한개일경우 8번 반복이지만 참조데이터가 늘어나면 더 많아지더라구요. 로직을 조금 응용하면 캐빈님이 알려주신 방법으로 구현은 가능할꺼 같습니다. 감사합니다. ㅎㅎㅎ 예스 운영자분께서 글 보시면 왜 090000에서 참조데이터 사용시 반복이 생기는지와 해결 방법 추가 답변 부탁드립니다. ^^ ================================================================ > 캐빈이야 님이 쓴 글입니다. > 제목 : Re : 참조데이터 사용시 오류 > 먼저 오류가 왜 발생되는지에 대해 말씀드리겠습니다. 첫번째 문제 0900봉에서 여러번 로직이 실행되다 보니 condition1[1]의 값이 전날 마지막 봉의 값이 되어야 하는데, 그렇지 않게 되어서 문제가 된것입니다. 간단히 condition[1]을 사용하지 말고 condition1[50]을 사용하면 됩니다. 두번째 문제 당일 하락종목수인경우 주식이나 kospi200처럼 0900분 봉이 없습니다. 그래서 DATA2(Close) 값이 만기날 동시호가 봉이 보여지게 되고 생각이외의 오류가 생깁니다. DATA2(close) > 100인 곳에서 stime을 0901분 이후로 하시면 될듯합니다. 세번째 문제는 만기날이 휴일인경우 수요일이 만기날이 됩니다. 그런경우 다음날은 찾지 못할수 있습니다. 이건 복잡할수 있으니.... 예스스탁 전문가님께 질문해주세요.. 바빠서 간단한 것만 답변드립니다. 로직 수정부분은 두라인입니다. -------------------------------------------------------------------- var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[50]; //<===============수정부분 이부분을 이렇게 넣은 이유는 0900에 여러번에 계산과정에서 다른 값을 들어가는 것을 막기 위해서입니다. 전날1분봉(378개) 모두가 Condition1값이 TRUE 값을 가지니 이렇게 편법으로 했습니다. 그럼 휩소를 피할수 있습니다. } MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If stime >= 090100 and data2(Close) > 100 then{ //<====================수정부분 당일하락수로만 결정 Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } > anyhelp 님이 쓴 글입니다. > 제목 : 참조데이터 사용시 오류 > 안녕하세요. 애니헬프 김용호 라고 합니다. 하이투자 예스트레이더를 사용하고 있씁니다. 어제 만기일 다음날 특정조건 수행에 관해 문의 드렸고, 답변을 잘 받았습니다. 저는 제가 만든 수식에 문제가 있나해서 문의 드린 건데 디버깅 확인 결과 예스트레이더 오류가 아닌가 생각되어 관련 디버깅 자료를 캡쳐해서 올립니다. 관련 답변부탁드리고, 답변은 박상우씨께서 제 전화번호를 아실꺼 같으니 연락 부탁드립니다.(또는 하이투자 정문채 차장님께) 그럼 수고하십시요. ///////////////// 수식 ///////////////////////// // 만기일 다음날에는 참조데이터 사용해서 진입하라는 수식임 // 참조데이터 몇개 돌려봤는데 비슷합니다. // 그리고 참조데이터를 여러개 조합해서 수식만들면 헛바퀴도는 횟수가 // 증가하더라구요. // 사용한 참조데이터는 KSP 하락종목수 (1분Data2)입니다. // 기본챠트는 연결선물 1분봉이고, 만기일 다음날 조건수식입니다. //////////////////////////////////////////////////////////////////////////// var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } ////////////////////////////// 디버깅 로그 ////////////////////////// *** 아래 그림에서 보시는 것과 같이 만기일 다음날 첫봉인 09:00:00 에서 엉뚱한 루핑이 8회 돌면서 condition 값이 False로 초기화 되어 만기일 다음날 값 적용이 안되네요. 크... 참조데이터 갯수가 늘면 그만큼 오류 루핑횟수는 더 증가하더라구요. *** 물론 참조데이터를 빼고 돌리면 정상적으로 나옵니다. T.T *** 이 오류 때문에 어제 수익날께 손실로 마감했는데 어디다 하소연하나... 크... 첨부파일1은 참조데이터를 제외한 정상적인 디버깅 결과이고, 첨부파일2는 참조데이터 1개 추가시 오류 루핑이 도는 디버깅 결과입니다.
프로필 이미지

anyhelp

2010-09-13 12:34:44

ㅎㅎㅎ 좀더 깊은 이야기인데... ^^ 어쨌든 저는 해결했습니다. ^^ 다시 힌트드리자면.. 참조데이터 챠트가 기준차트 종료후 지속될때 참조데이터 날짜는 기준데이터의 다음날 시가로 표시된다는데 문제가 있는거더라구요. ^^ 그러면서.. 읽어들이는 close 값은 초기화 됩니다. ^^ 그게 문제입니다. ㅎㅎㅎ 아래 답변은 기초적인 답이구요.. ^^ 어쨌든 저는 수식완전히 분해해서 다시 만들어 해결했습니다. ^^ > 예스스탁 님이 쓴 글입니다. > 제목 : Re : Re : Re : Re : 정확한 오류원인을 찾았습니다. 크... > 안녕하세요 예스스탁입니다. 수식에서 참조종목을 사용하시는 경우에는 변수를 선언할 때 다르게 해주셔야 합니다. 수식은 시세를 수신시 마다 읽어 들어가게 되는데 참조종목의 경우 서로 봉완성이 다르므로 여러번 수식을 읽어 들어갈 수 있습니다. var : va1(0,data1),va2(0,data1),va3(0,data1);#1 var : Condition1(false,data1),Condition2(false,data1);#2 va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if data1(date != date[1]) Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } 수식을 여러번 읽어들어가는 부분은 체계적인 문제라 변경될수 없는내용이므로 수식을 계산시에 각 변수가 할당되는 데이터를 명시하여 이전값 참조시에 해당 데이터주기를 따라 갈수 있도록 선언을 #1,#2와 같이 작성해 주셔야 합니다. 랭귀지 도움말에 해당 부분과 비슷한 내용이 있지만 설명이 많이 부족한 것 같습니다. 자세한 내용을 다시 정리해서 도움말을 보강하고 공지하도록 하겠습니다. 즐거운 하루되세요 > anyhelp 님이 쓴 글입니다. > 제목 : Re : Re : Re : 정확한 오류원인을 찾았습니다. 크... > 정확한 오류 원인을 찾았습니다. ㅎㅎㅎ 이제 임시 방편이 아닌 정확한 수식이 가능할 듯합니다. ===========오류원인============ 선물 만기일 처럼 기본차트가 먼저 종료되는 경우 기본차트가 종료된 된 후에도 참조차트는 계속 진행이되는데 이때, 참조차트의 날짜가 해당날짜가 아니고 다음날 첫봉 시가로 나타나네요. 이때문에 참조차트에서 진행된 봉 수만큼 루핑이 추가되고, 루핑되는 동안에는 동일 날짜로 인식되어 제 수식경우 값이 초기화하게 되네요. 에고... 그런데 이오류 시스템에서 수정하고 나면 참조데이터 사용하여서 시스템 구현하신분들은 잘못하면 기존것과 다른 신호가 나올수도 있겠네요.. 만약 오류 수정해주실꺼면 공지사항 크게 올려주셔야 할듯합니다. 안그러면 이번에 오류값 감안해서 새로 작성하는 수식이 다음에 다시 엉뚱한 신호가 나올테니까요. ^^ 다행히 원인을 찾았으니, 제 시스템은 수식으로 커버할 수 있을 듯한데, 어쨌든 시스템이 또 지저분해지겠네요. 크... 어제 아깝게 손실본 내돈... T.T 예스에서 이런 오류 없었으면... 손실 안봤을텐데.. T.T 너무 아쉬워요.. T.T ================================================================== > anyhelp 님이 쓴 글입니다. > 제목 : Re : Re : 참조데이터 사용시 오류 > 캐빈님 답변 감사합니다. ^^ 우선 응급처리용으로는 충분히 사용할 수 있을것 같습니다. ㅎㅎㅎ 그런데 우선은 090000에서 반복되는 원이이 해결이 안된 것 같고, 제가 사용하는 참조데이터가 여러개라서. 한개일경우 8번 반복이지만 참조데이터가 늘어나면 더 많아지더라구요. 로직을 조금 응용하면 캐빈님이 알려주신 방법으로 구현은 가능할꺼 같습니다. 감사합니다. ㅎㅎㅎ 예스 운영자분께서 글 보시면 왜 090000에서 참조데이터 사용시 반복이 생기는지와 해결 방법 추가 답변 부탁드립니다. ^^ ================================================================ > 캐빈이야 님이 쓴 글입니다. > 제목 : Re : 참조데이터 사용시 오류 > 먼저 오류가 왜 발생되는지에 대해 말씀드리겠습니다. 첫번째 문제 0900봉에서 여러번 로직이 실행되다 보니 condition1[1]의 값이 전날 마지막 봉의 값이 되어야 하는데, 그렇지 않게 되어서 문제가 된것입니다. 간단히 condition[1]을 사용하지 말고 condition1[50]을 사용하면 됩니다. 두번째 문제 당일 하락종목수인경우 주식이나 kospi200처럼 0900분 봉이 없습니다. 그래서 DATA2(Close) 값이 만기날 동시호가 봉이 보여지게 되고 생각이외의 오류가 생깁니다. DATA2(close) > 100인 곳에서 stime을 0901분 이후로 하시면 될듯합니다. 세번째 문제는 만기날이 휴일인경우 수요일이 만기날이 됩니다. 그런경우 다음날은 찾지 못할수 있습니다. 이건 복잡할수 있으니.... 예스스탁 전문가님께 질문해주세요.. 바빠서 간단한 것만 답변드립니다. 로직 수정부분은 두라인입니다. -------------------------------------------------------------------- var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[50]; //<===============수정부분 이부분을 이렇게 넣은 이유는 0900에 여러번에 계산과정에서 다른 값을 들어가는 것을 막기 위해서입니다. 전날1분봉(378개) 모두가 Condition1값이 TRUE 값을 가지니 이렇게 편법으로 했습니다. 그럼 휩소를 피할수 있습니다. } MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If stime >= 090100 and data2(Close) > 100 then{ //<====================수정부분 당일하락수로만 결정 Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } > anyhelp 님이 쓴 글입니다. > 제목 : 참조데이터 사용시 오류 > 안녕하세요. 애니헬프 김용호 라고 합니다. 하이투자 예스트레이더를 사용하고 있씁니다. 어제 만기일 다음날 특정조건 수행에 관해 문의 드렸고, 답변을 잘 받았습니다. 저는 제가 만든 수식에 문제가 있나해서 문의 드린 건데 디버깅 확인 결과 예스트레이더 오류가 아닌가 생각되어 관련 디버깅 자료를 캡쳐해서 올립니다. 관련 답변부탁드리고, 답변은 박상우씨께서 제 전화번호를 아실꺼 같으니 연락 부탁드립니다.(또는 하이투자 정문채 차장님께) 그럼 수고하십시요. ///////////////// 수식 ///////////////////////// // 만기일 다음날에는 참조데이터 사용해서 진입하라는 수식임 // 참조데이터 몇개 돌려봤는데 비슷합니다. // 그리고 참조데이터를 여러개 조합해서 수식만들면 헛바퀴도는 횟수가 // 증가하더라구요. // 사용한 참조데이터는 KSP 하락종목수 (1분Data2)입니다. // 기본챠트는 연결선물 1분봉이고, 만기일 다음날 조건수식입니다. //////////////////////////////////////////////////////////////////////////// var : va1(0),va2(0),va3(0); va1 = int(date/100)-int(date/10000)*100; //월 va2 = date - int(date/100)*100; //일 va3 = DayOfWeek(date); //요일 if va1%3 == 0 and // 3,6,9,12월이고(옵션이면 해당내용 삭제) va2 >= 8 and va2 <= 14 and // 8일에서 14일 사이이고 va3 == 4 Then // 목요일 Condition1 = true; Else Condition1 = false; if date != date[1] Then Condition2 = Condition1[1]; MessageLog("11111.Condition2 = %6s",Condition2); if Condition2 == true Then{ MessageLog("22222.Condition2 = %6s",Condition2); If data2(Close) > 100 then{ Buy("매수",AtMarket); MessageLog("3333.Condition2 = %6s",Condition2); } } ////////////////////////////// 디버깅 로그 ////////////////////////// *** 아래 그림에서 보시는 것과 같이 만기일 다음날 첫봉인 09:00:00 에서 엉뚱한 루핑이 8회 돌면서 condition 값이 False로 초기화 되어 만기일 다음날 값 적용이 안되네요. 크... 참조데이터 갯수가 늘면 그만큼 오류 루핑횟수는 더 증가하더라구요. *** 물론 참조데이터를 빼고 돌리면 정상적으로 나옵니다. T.T *** 이 오류 때문에 어제 수익날께 손실로 마감했는데 어디다 하소연하나... 크... 첨부파일1은 참조데이터를 제외한 정상적인 디버깅 결과이고, 첨부파일2는 참조데이터 1개 추가시 오류 루핑이 도는 디버깅 결과입니다.