커뮤니티

구동시간 질문, 특정 시각 기준 일별 가격

프로필 이미지
쭈꾸미제엔장
2017-04-04 09:36:00
179
글번호 108459
답변완료
안녕하세요. 시스템 관련 2가지 질문이 있어 문의드립니다. 전부 S&P 500 E-mini 선물 관련 내용입니다. 1) 밤 11시부터 새벽 5시 사이에만 돌리고 싶습니다. sTime >= 230000 or sTime < 50000 으로 짜면 될 줄 알았는데, 시뮬레이션을 돌려보면, 한국 시각 기준 아침 8시에도 시그널이 trigger 됩니다. 어떻게 해야 하는가요? 2) 새벽 5시 기준으로, 과거 21일의 closing price 를 알 수 있는 방법이 있는가요? 예) 4/3 5시 가격, 3/31 5시 가격, 3/30 5시 가격... 이유: DayClose 를 활용하면, 전자장 종료 시각 기준으로 가격을 불러오는데, 실제 본장의 종료 시각과 제법 차이가 있습니다. 해당 가격들을 Array 에 집어 넣어서, 일간 수익률 기준 변동성을 계산키 위함입니다. 아래는 코드 전문 입니다. 감사합니다. Input : std_mult(1), loss_mult(1.5), start_t(230000), end_t(50000); Var: std20d(0.05), Done(0), daysum(0), dayma(0), daysumsqrt(0), daycnt(0), daycnter(0); Done =0; # 20일 평균수익률 daysum = 0; for daycnt=1 to 20 { daysum = daysum + data2(DayClose(daycnt)) / data2(DayClose(daycnt+1)) -1; } dayma = daysum / 20; daysumsqrt= 0; # 수익률 기준, 표준편차 계산 for daycnter=1 to 20 { daysumsqrt = daysumsqrt + (data2(DayClose(daycnter)) / data2(DayClose(daycnter+1)) -1 - dayma)^2; } std20d = SquareRoot(daysumsqrt / 20 ) * data2(DayClose(1)); // 전일 종가 기준으로 가격 치환 if stime == end_t then { ExitShort(); # time stop Done = 0; } If MarketPosition < 0 and CrossUp(C ,Lowest(Low, BarsSinceEntry) + loss_mult * std20d) then { ExitShort("ExS",OnClose, Lowest(Low,BarsSinceEntry) + loss_mult * std20d ); # trailing stop } if (sTime >= start_t and sTime <= 240000 ) or (sTime < end_t and sTime >= 0)then { If MarketPosition == 0 and CrossDown(C, data2(DayClose(1)) - std_mult * std20d) and Done == 0 Then { Sell("Short",OnClose); Done = -1; } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2017-04-05 17:01:11

안녕하세요 예스스탁입니다. 1. sTime >= 230000 or sTime < 50000 위 조건일때 일반적인 onclose타입의 신호라면 8시봉에 신호가 발생할수 없습니다. 진입이 atstop이나 atlimit타입이면 해당 타입들이 봉완성시 조건이 만족하면 가격조건을 셋팅하고 다음봉의 시세와 비교해 즉시 신호가 발생하는 타입입니다. 이 경우에는 따로 제어가 되지 않습니다 8시봉의 직전봉이 5시 이전봉이고 해당 봉에서 조건이 만족해 값이 셋팅되면 8시봉에 신호가 발생할수 있습니다. 2 var : cnt(0),sum(0),mav(0); Array : CC[50](0); if stime == 050000 or (stime > 050000 and stime[1] < 050000) Then{ #지정한 시간의 종가를 배열변수에 저장 CC[0] = C; for cnt = 1 to 49{ CC[cnt] = CC[cnt-1][1]; } #20개 값이 할당된 이후에 if CC[20] > 0 then{ #평균계산 sum = 0; for cnt = 1 to 20{ sum = sum + CC[cnt]; } mav = sum/20; } } 3 data2(DayClose(1)) 위 내용은 잘못된 수식입니다. data2(CloseD(1))로 사용하셔야 합니다. DayClose/dayhigh/daylow/dayoepn은 data1의 값만 리턴하는 함수입니다. 참조데이터는 closeD,highD,lowD,openD함수 이용해셔야 합니다. 즐거운 하루되세요 > 쭈꾸미제엔장 님이 쓴 글입니다. > 제목 : 구동시간 질문, 특정 시각 기준 일별 가격 > 안녕하세요. 시스템 관련 2가지 질문이 있어 문의드립니다. 전부 S&P 500 E-mini 선물 관련 내용입니다. 1) 밤 11시부터 새벽 5시 사이에만 돌리고 싶습니다. sTime >= 230000 or sTime < 50000 으로 짜면 될 줄 알았는데, 시뮬레이션을 돌려보면, 한국 시각 기준 아침 8시에도 시그널이 trigger 됩니다. 어떻게 해야 하는가요? 2) 새벽 5시 기준으로, 과거 21일의 closing price 를 알 수 있는 방법이 있는가요? 예) 4/3 5시 가격, 3/31 5시 가격, 3/30 5시 가격... 이유: DayClose 를 활용하면, 전자장 종료 시각 기준으로 가격을 불러오는데, 실제 본장의 종료 시각과 제법 차이가 있습니다. 해당 가격들을 Array 에 집어 넣어서, 일간 수익률 기준 변동성을 계산키 위함입니다. 아래는 코드 전문 입니다. 감사합니다. Input : std_mult(1), loss_mult(1.5), start_t(230000), end_t(50000); Var: std20d(0.05), Done(0), daysum(0), dayma(0), daysumsqrt(0), daycnt(0), daycnter(0); Done =0; # 20일 평균수익률 daysum = 0; for daycnt=1 to 20 { daysum = daysum + data2(DayClose(daycnt)) / data2(DayClose(daycnt+1)) -1; } dayma = daysum / 20; daysumsqrt= 0; # 수익률 기준, 표준편차 계산 for daycnter=1 to 20 { daysumsqrt = daysumsqrt + (data2(DayClose(daycnter)) / data2(DayClose(daycnter+1)) -1 - dayma)^2; } std20d = SquareRoot(daysumsqrt / 20 ) * data2(DayClose(1)); // 전일 종가 기준으로 가격 치환 if stime == end_t then { ExitShort(); # time stop Done = 0; } If MarketPosition < 0 and CrossUp(C ,Lowest(Low, BarsSinceEntry) + loss_mult * std20d) then { ExitShort("ExS",OnClose, Lowest(Low,BarsSinceEntry) + loss_mult * std20d ); # trailing stop } if (sTime >= start_t and sTime <= 240000 ) or (sTime < end_t and sTime >= 0)then { If MarketPosition == 0 and CrossDown(C, data2(DayClose(1)) - std_mult * std20d) and Done == 0 Then { Sell("Short",OnClose); Done = -1; } }