커뮤니티

함수변환 요청

프로필 이미지
흰둥이아빠
2020-03-31 14:39:32
521
글번호 137396
답변완료
안녕하세요? 아래는 키움에서 사용했던 전략입니다. 예스에서 사용할 수 있도록 함수변환 요청드립니다. 아울러 스크립트에 각 주석도 좀 부탁드립니다. 감사합니다. Vars : st(0), et(0); V1 = Dayofweek((10000 * Year(D)) + (100 * 3) + 1); If V1 = 0 Then Value2 = 8 Else Value2 = 15 - V1; // 3월 두번째 일요일 날짜 V2 = Dayofweek((10000 * Year(D)) + (100 * 11) + 1); If V2 = 0 Then Value4 = 1 Else value4 = 8 - V2; // 11월 첫번째 일요일 날짜 If date > (10000 * Year(D)) + (100 * 3) + value2 And date < (10000 * Year(D)) + (100 * 11) + value4 Then Begin st = 070000; // 써머타임 적용 시, 장시작 시간 et = 060000; // 써머타임 적용 시, 장종료 시간 End Else Begin st = 080000; // 장 시작 시간 et = 070000; // 장 종료 시간 End; condition1 = (IntPortion(time/10000) > IntPortion(et/10000) And IntPortion(time[1]/10000) <= IntPortion(et/10000)) Or st <> st[1]; ///////////////////////////////////////////////////////////////// If condition1 Then v99 = 0; Vars : SP(0); SP = SignalPosition; If SP[1] <> SP And SP <> 0 Then v99 = v99 + 1; Vars : pDayClose(0), vDayOpen(0); pDayClose = DayClose(1); vDayOpen = DayOpen(0); If v99 = 0 Then Begin If pDayClose < vDayOpen Then Buy("B", atmarket) Else IF pDayClose > vDayOpen Then Sell("S", atmarket); End; SetExitOnClose;
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-04-01 16:11:40

안녕하세요 예스스탁입니다. Vars : Year(0),st(0), et(0),v1(0),v2(0),v99(0); Year = Floor(sdate/10000); #매해 3월 1일의 요일 V1 = Dayofweek((10000 * Year) + (100 * 3) + 1); #매해 3월 1일이 일요일이면 8일 #아니면 15에서 요일값을 빼서 3월 두번째 일요일 날짜를 구함 If V1 == 0 Then Value2 = 8; Else Value2 = 15 - V1; // 3월 두번째 일요일 날짜 #매해 11월 1일의 요일 V2 = Dayofweek((10000 * Year) + (100 * 11) + 1); #매해 11월 1일이 일요일이면 8일 #아니면 8에서 요일값을 빼서 11월 첫번째 일요일 날짜를 구함 If V2 = 0 Then Value4 = 1; Else value4 = 8 - V2; // 11월 첫번째 일요일 날짜 #3월 두번째 일요일에서 11월 두번째 일요일 사이이면 st는 11시 et는 6시 #아니면 st는 8시 et는 7시 If sdate > (10000 * Year) + (100 * 3) + value2 And sDate < (10000 * Year) + (100 * 11) + value4 Then Begin st = 070000; // 써머타임 적용 시, 장시작 시간 et = 060000; // 써머타임 적용 시, 장종료 시간 End Else Begin st = 080000; // 장 시작 시간 et = 070000; // 장 종료 시간 End; #st이후 첫봉 condition1 = (IntPortion(stime/10000) > IntPortion(et/10000) And IntPortion(stime[1]/10000) <= IntPortion(et/10000)) Or st <> st[1]; ///////////////////////////////////////////////////////////////// #첫봉이면 v99는 0으로 초기화 If condition1 Then v99 = 0; Vars : SP(0); #차트 포지션 SP = MarketPosition; #포지션이 변경될때마나 v99는 1씩 증가(진입횟수카운트) If SP[1] <> SP And SP <> 0 Then v99 = v99 + 1; Vars : pDayClose(0), vDayOpen(0); #전일종가 pDayClose = DayClose(1); #당일시가 vDayOpen = DayOpen(0); #당일 진입이 없고 If v99 == 0 Then Begin #당일사가가 전일종가보다 크면 매수 아니면 매도 If pDayClose < vDayOpen Then Buy("B", atmarket); Else IF pDayClose > vDayOpen Then Sell("S", atmarket); End; #et시간에 청산 if sdate != sdate[1] Then SetStopEndofday(et); if bdate != bdate[1] Then SetStopEndofday(0); 즐거운 하루되세요 > 흰둥이아빠 님이 쓴 글입니다. > 제목 : 함수변환 요청 > 안녕하세요? 아래는 키움에서 사용했던 전략입니다. 예스에서 사용할 수 있도록 함수변환 요청드립니다. 아울러 스크립트에 각 주석도 좀 부탁드립니다. 감사합니다. Vars : st(0), et(0); V1 = Dayofweek((10000 * Year(D)) + (100 * 3) + 1); If V1 = 0 Then Value2 = 8 Else Value2 = 15 - V1; // 3월 두번째 일요일 날짜 V2 = Dayofweek((10000 * Year(D)) + (100 * 11) + 1); If V2 = 0 Then Value4 = 1 Else value4 = 8 - V2; // 11월 첫번째 일요일 날짜 If date > (10000 * Year(D)) + (100 * 3) + value2 And date < (10000 * Year(D)) + (100 * 11) + value4 Then Begin st = 070000; // 써머타임 적용 시, 장시작 시간 et = 060000; // 써머타임 적용 시, 장종료 시간 End Else Begin st = 080000; // 장 시작 시간 et = 070000; // 장 종료 시간 End; condition1 = (IntPortion(time/10000) > IntPortion(et/10000) And IntPortion(time[1]/10000) <= IntPortion(et/10000)) Or st <> st[1]; ///////////////////////////////////////////////////////////////// If condition1 Then v99 = 0; Vars : SP(0); SP = SignalPosition; If SP[1] <> SP And SP <> 0 Then v99 = v99 + 1; Vars : pDayClose(0), vDayOpen(0); pDayClose = DayClose(1); vDayOpen = DayOpen(0); If v99 = 0 Then Begin If pDayClose < vDayOpen Then Buy("B", atmarket) Else IF pDayClose > vDayOpen Then Sell("S", atmarket); End; SetExitOnClose;