커뮤니티

문의 (YST)

프로필 이미지
TRF
2013-10-30 10:16:54
187
글번호 69009
답변완료
1. 선물 3분봉에서 5일선을 적용하고 전일종가시 5일선값대비 금일시가시 5일선 값을 비교하는 것입니다. 아래식 검증부탁드립니다. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CLOSED MARKET DATA // VARS: M5D.CMD(0, DATA2), M13D.CMD(0, DATA2); VARS: M5D.UTrend(FALSE, DATA2), M13D.UTrend(FALSE, DATA2); //---------------------------------------------------------------------------------------------------------------------------------------------------------- if ( DATA2(stime == 151500) ) Then { M5D.CMD = M5D; M13D.CMD = M13D; } //---------------------------------------------------------------------------------------------------------------------------------------------------------- // INIT if ( DATA2(Date <> Date[1]) ) then { if ( M5D > M5D.CMD + PriceScale ) Then { M5D.UTrend = TRUE; } else { M5D.UTrend = FALSE; } if ( M13D > M13D.CMD - PriceScale ) Then { M13D.UTrend = TRUE; } else { M13D.UTrend = FALSE; } } 2. 그리고 위에서 PriceScale을 적용했을때 정확한 이해를 위해 질문드리는데, 이렇게 할 경우 3분봉이라 할지라도 틱 단위이기 때문에 선물기준으로 1틱(0.05pt)을 의미하는 것인가요? 3. 2째줄부터 라인별로 아래식 간단히 설명부탁드립니다.. ... var: va1(0),va2(0),va3(0); va1= int(date/100)-int(date/10000)*100; a2= date - int(date/100)*100; a3=DayOfWeek(date); if va1%1 == 0 and va2 >= 8 and va2 <= 14 and va3 == 4 Then SetStopEndofday(144000); Else SetStopEndofday(150000); 4. 덕분에 아래 코드를 사용하여참조데이타 분봉에서 일봉표시를 해결했습니다. 다시한번 감사드립니다. 관련 질문을 드리면 CLOSED를 사용할때보다 아래식을 사용할때 메모리나 속도면에서 더욱 이점이 있는 것을 확인했습니다. 내부적으로 상세한 질문이 될지 모르지만 이러한 차이가 발생하는 이유가 무엇인지 궁금합니다. 또한 코드상에서 저는 주로 ( )를 사용하고 주석이 코딩의 50%정도 되며 가독성을 높이고자 하는데 속도면에서 크게 문제가 되는지요? 그리고 주석도 컴파일시 포함되는지요? 주석포함 코딩 라인은 전체적으로 1만 라인 이하입니다. 5. yst 파일 크기가 1M를 넘는 경우도 종종있나요? 예스트레이더는 최대 어느정도 크기까지 허용범위에 있고, 리얼타임에서 컴파일된 시스템파일이 클 경우 디코딩 속도에 영향을 주어 신호발생에 문제를 일으키는 경우는 없는지요? 다소 질문이 많은데 미리 답변 감사드립니다. ... ... for cnt = 0 to P5-1{ if cnt < P1 and CC[P1-1] > 0 Then sum1 = sum1+CC[cnt]; if cnt < P2 and CC[P2-1] > 0 Then sum2 = sum2+CC[cnt]; if cnt < P3 and CC[P3-1] > 0 Then sum3 = sum3+CC[cnt]; if cnt < P4 and CC[P4-1] > 0 Then sum4 = sum4+CC[cnt]; if cnt < P5 and CC[P5-1] > 0 Then sum5 = sum5+CC[cnt]; } M5D = sum1/P1; M13D = sum2/P2; M20D = sum3/P3; M33D = sum4/P4; M60D = sum5/P5; 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-10-30 14:05:58

안녕하세요 예스스탁입니다. 1. 작성하신 식 맞습니다. 아래와 같이 간단히 작성하셔도 됩니다. 전일 마지막봉 값 과 당일 첫번째 봉의 값을 비교합니다. if ( DATA2(Date <> Date[1]) ) then { if ( M5D > M5D[1] + PriceScale ) Then { M5D.UTrend = TRUE; } else { M5D.UTrend = FALSE; } if ( M13D > M13D[1] - PriceScale ) Then { M13D.UTrend = TRUE; } else { M13D.UTrend = FALSE; } } 2. 예 1틱입니다. 3. var: va1(0),va2(0),va3(0); #날짜에서 월단위를 계산 #예 20131030 #int(date/100) #--> 날짜에서 10단위(30)까지를 소숫점이하로 만들고 201310.30 #--> 정수만 취해서 201310 #--> 일을 제외하고 년과 월만 추출 #int(date/10000)*100 #--> 날짜에서 월이하(1030)까지를 수숫점 이하로 만들고 2013.1030 #--> 정수만 취해서 2013 #--> 년단위만 추출 후 100을 곱함 201300 #201310-201300 = 10 va1= int(date/100)-int(date/10000)*100; #날짜에서 일단위를 추출 #int(date/100)*100 #--> 날짜에서 10단위(30)까지를 소숫점이하로 만들고 201310.30 #--> 정수만 취해서 201310 #--> 일을 제외하고 년과 월만 추출 후 100을 곱함 20131000 #20131030-20131000 = 30 Va2= date - int(date/100)*100; #요일함수 - 월요일1, 화요일2, 수요일3, 목요일4, 금요일 5 Va3=DayOfWeek(date); # 월을 3으로 나누어 나머지가 0일 달 --> 3,6,8,12 울 계산 # 월간 두번째 목요일 계산 # 8일에서 14일사이의 목요일 if va1%3 == 0 and va2 >= 8 and va2 <= 14 and va3 == 4 Then SetStopEndofday(144000); Else SetStopEndofday(150000); 4. 작성해 드린식은 수식이 차트에 적용되면 과거부터 현재로 계산해 오는데 계산해 오면서 배열변수에 [0]번방에 당일의 종가를 저장하고 날짜가 변경되면 다음방으로 이전일의 값을 순차적으로 넘겨서 저장하고 for문으로 배열변수에서 필요한 값만 불러와 계산합니다. 하지만 이전에 작성하신 식에서는 CloseD함수가 많이 사용되면 해당 함수를 만날때마다 함수를 콜해서 지정하신 일자값을 계산해서 리턴하므로 속도차이가 많이 발생히고 사용하신 갯수만큰 각각 메모리가 잡히게 됩니다. 수식내 주석은 수식의 동작에는 영향을 주지는 않습니다. 5. 해당 부분은 전화주셔서 프로그램 담당자와 통화를 해보셔야 할것 같습니다. 해당 부분은 제가 정확히 모르겠습니다. 즐거운 하루되세요 > TRF 님이 쓴 글입니다. > 제목 : 문의 (YST) > 1. 선물 3분봉에서 5일선을 적용하고 전일종가시 5일선값대비 금일시가시 5일선 값을 비교하는 것입니다. 아래식 검증부탁드립니다. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CLOSED MARKET DATA // VARS: M5D.CMD(0, DATA2), M13D.CMD(0, DATA2); VARS: M5D.UTrend(FALSE, DATA2), M13D.UTrend(FALSE, DATA2); //---------------------------------------------------------------------------------------------------------------------------------------------------------- if ( DATA2(stime == 151500) ) Then { M5D.CMD = M5D; M13D.CMD = M13D; } //---------------------------------------------------------------------------------------------------------------------------------------------------------- // INIT if ( DATA2(Date <> Date[1]) ) then { if ( M5D > M5D.CMD + PriceScale ) Then { M5D.UTrend = TRUE; } else { M5D.UTrend = FALSE; } if ( M13D > M13D.CMD - PriceScale ) Then { M13D.UTrend = TRUE; } else { M13D.UTrend = FALSE; } } 2. 그리고 위에서 PriceScale을 적용했을때 정확한 이해를 위해 질문드리는데, 이렇게 할 경우 3분봉이라 할지라도 틱 단위이기 때문에 선물기준으로 1틱(0.05pt)을 의미하는 것인가요? 3. 2째줄부터 라인별로 아래식 간단히 설명부탁드립니다.. ... var: va1(0),va2(0),va3(0); va1= int(date/100)-int(date/10000)*100; a2= date - int(date/100)*100; a3=DayOfWeek(date); if va1%1 == 0 and va2 >= 8 and va2 <= 14 and va3 == 4 Then SetStopEndofday(144000); Else SetStopEndofday(150000); 4. 덕분에 아래 코드를 사용하여참조데이타 분봉에서 일봉표시를 해결했습니다. 다시한번 감사드립니다. 관련 질문을 드리면 CLOSED를 사용할때보다 아래식을 사용할때 메모리나 속도면에서 더욱 이점이 있는 것을 확인했습니다. 내부적으로 상세한 질문이 될지 모르지만 이러한 차이가 발생하는 이유가 무엇인지 궁금합니다. 또한 코드상에서 저는 주로 ( )를 사용하고 주석이 코딩의 50%정도 되며 가독성을 높이고자 하는데 속도면에서 크게 문제가 되는지요? 그리고 주석도 컴파일시 포함되는지요? 주석포함 코딩 라인은 전체적으로 1만 라인 이하입니다. 5. yst 파일 크기가 1M를 넘는 경우도 종종있나요? 예스트레이더는 최대 어느정도 크기까지 허용범위에 있고, 리얼타임에서 컴파일된 시스템파일이 클 경우 디코딩 속도에 영향을 주어 신호발생에 문제를 일으키는 경우는 없는지요? 다소 질문이 많은데 미리 답변 감사드립니다. ... ... for cnt = 0 to P5-1{ if cnt < P1 and CC[P1-1] > 0 Then sum1 = sum1+CC[cnt]; if cnt < P2 and CC[P2-1] > 0 Then sum2 = sum2+CC[cnt]; if cnt < P3 and CC[P3-1] > 0 Then sum3 = sum3+CC[cnt]; if cnt < P4 and CC[P4-1] > 0 Then sum4 = sum4+CC[cnt]; if cnt < P5 and CC[P5-1] > 0 Then sum5 = sum5+CC[cnt]; } M5D = sum1/P1; M13D = sum2/P2; M20D = sum3/P3; M33D = sum4/P4; M60D = sum5/P5; 감사합니다.