커뮤니티

수식 문의드립니다.

프로필 이미지
penfold
2025-02-10 15:19:52
401
글번호 187992
답변완료
안녕하세요, 해외선물 관련해 수식 문의드리고자합니다. 나스닥 선물 기준으로, 당일 아침 선물장 개장 이후부터 현물 본장 개장 전까지의 가격 움직임을 채널로 설정하고 본장 개장 이후 상하단채널 돌파시 매수매도 진입을 하는 내용입니다. 위 내용을 시뮬레이션하는 데에 2가지 정도 어려움이 있어서 수식 검토를 요청드릴려고 합니다. (1) 한국시간을 기준으로만 차트 시간을 표기해야하므로, 0시가 지나면 영업일이 바뀌게되면서 Time1,2 변수 및 HH, LL 변수를 재설정해야하는 것인지 헷갈립니다. 아래 수식을 적용해서 시뮬레이션하면 23시30분~00시 사이에는 진입이 발생하지 않고 날짜가 넘어간 이후에만 진입 신호가 나오는 것 같습니다.. (2) 시뮬레이션을 할 때, 서머타임에 의해 장 개장시간이 변동되는 기간이 존재함에 따라 혼선이 생기는데, 서머타임 여부에 따라 선물장 개장시간(Time1) 및 본장개장시간(Time2)이 자동으로 서머타임 시간에 맞게 변화 필요. (청산 시간 또한 마찬가지) 위 두 가지 부분을 수식 내에서 해결 부탁드리고자 합니다. 항상 감사드립니다. ===================================================================================== Input : Time1(080000),Time2(232900), loss(9999); var : HH(0), LL(0); if sTime > Time1 and sTime < Time2 Then // Time1(08시)~Time2(23시29분)라면 { HH = DayHigh; // 그때까지의 고가 대입해서 당일 매매 기준이 되는 상단채널 설정 LL = DayLow; // 그때까지의 저가 대입해서 당일 매매 기준이 되는 하단채널 설정 } # 진입 기준 설정 if (sTime >= Time2 or sTime < Time1) //오후 23시29분 이후거나 오전 00시~08시 사이라면 and CrossUp(c,HH) Then //상단채널 돌파 시 매수 Buy("Buy", AtMarket); if (sTime >= Time2 or sTime < Time1) and CrossDown(c,LL) Then Sell("Sell", AtMarket); # 당일 장마감 직전에 청산 SetStopEndofday(065500); # 로스컷 SetStopLoss(loss, PointStop);
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2025-02-11 13:13:52

안녕하세요 예스스탁입니다. 당일청산함수가 지정한 시간이후 밤 0시까지 진입을 막게 됩니다. 해외선물에서는 아래와 같이 0시 당일청산을 설정하고 영업일이 변경되면 해제하게 작성하셔야 합니다. Input : xtime(065500),loss(9999); var : T(0),현물본장시작시간(0),당일청산시간(0),HH(0), LL(0); if T == 2 and sDate != sDate[1] Then SetStopEndofday(당일청산시간); #새로운 영업일 시작하면 IF Bdate != Bdate[1] Then { #T는 1 T = 1; #당일청산은 해제 SetStopEndofday(0); #썸머타임 여부에 따라 #현물본장 시작시간을 233000이나 223000으로 설정 #당일청산 시작시간을 065500이나 055500으로 설정 if sTime >= 80000 Then { 현물본장시작시간 = 233000; 당일청산시간 = xtime; } Else { 현물본장시작시간 = 223000; 당일청산시간 = xtime-10000;#055500 } } #현물본방시간이 되면 T는 2 if (sDate != sDate[1] and sTime >= 현물본장시작시간) or (sDate == sDate[1] and sTime >= 현물본장시작시간 and sTime[1] < 현물본장시작시간) Then T = 2; #당일청산시간이 되면 T는 3 if (sDate != sDate[1] and sTime >= xtime) or (sDate == sDate[1] and sTime >= xtime and sTime[1] < xtime) Then T = 3; #T가 1일때만 당일고가와 당일저가를 저장 if T == 1 Then { HH = DayHigh; LL = DayLow; } #현물본장 시작후 if T == 2 Then { # 진입 기준 설정 if CrossUp(c,HH) Then Buy("Buy", AtMarket); if CrossDown(c,LL) Then Sell("Sell", AtMarket); } # 로스컷 SetStopLoss(loss, PointStop); 즐거운 하루되세요 > penfold 님이 쓴 글입니다. > 제목 : 수식 문의드립니다. > 안녕하세요, 해외선물 관련해 수식 문의드리고자합니다. 나스닥 선물 기준으로, 당일 아침 선물장 개장 이후부터 현물 본장 개장 전까지의 가격 움직임을 채널로 설정하고 본장 개장 이후 상하단채널 돌파시 매수매도 진입을 하는 내용입니다. 위 내용을 시뮬레이션하는 데에 2가지 정도 어려움이 있어서 수식 검토를 요청드릴려고 합니다. (1) 한국시간을 기준으로만 차트 시간을 표기해야하므로, 0시가 지나면 영업일이 바뀌게되면서 Time1,2 변수 및 HH, LL 변수를 재설정해야하는 것인지 헷갈립니다. 아래 수식을 적용해서 시뮬레이션하면 23시30분~00시 사이에는 진입이 발생하지 않고 날짜가 넘어간 이후에만 진입 신호가 나오는 것 같습니다.. (2) 시뮬레이션을 할 때, 서머타임에 의해 장 개장시간이 변동되는 기간이 존재함에 따라 혼선이 생기는데, 서머타임 여부에 따라 선물장 개장시간(Time1) 및 본장개장시간(Time2)이 자동으로 서머타임 시간에 맞게 변화 필요. (청산 시간 또한 마찬가지) 위 두 가지 부분을 수식 내에서 해결 부탁드리고자 합니다. 항상 감사드립니다. ===================================================================================== Input : Time1(080000),Time2(232900), loss(9999); var : HH(0), LL(0); if sTime > Time1 and sTime < Time2 Then // Time1(08시)~Time2(23시29분)라면 { HH = DayHigh; // 그때까지의 고가 대입해서 당일 매매 기준이 되는 상단채널 설정 LL = DayLow; // 그때까지의 저가 대입해서 당일 매매 기준이 되는 하단채널 설정 } # 진입 기준 설정 if (sTime >= Time2 or sTime < Time1) //오후 23시29분 이후거나 오전 00시~08시 사이라면 and CrossUp(c,HH) Then //상단채널 돌파 시 매수 Buy("Buy", AtMarket); if (sTime >= Time2 or sTime < Time1) and CrossDown(c,LL) Then Sell("Sell", AtMarket); # 당일 장마감 직전에 청산 SetStopEndofday(065500); # 로스컷 SetStopLoss(loss, PointStop);
프로필 이미지

penfold

2025-02-11 15:00:56

도움주셔서 감사합니다. 다만 수식을 적용 시 오류가 발생하는 부분이 있고, 이해되지않는 부분이 있어서 추가로 문의드립니다. (1) 여기서 썸머타임을 구분하는 기준이 if sTime >= 80000 Then ~ 수식으로 작성된 것으로 보이는데, 이는 일봉을 기준으로 봉 시작시간을 측정해 섬머타임을 구분하는 것인가요 ? 작성한 시스템은 사실상 일봉 시스템이 아니라 짧은 분 단위의 봉에서만 가능한 로직이므로 이 구분법을 수정해주실 수 있으실지요. (2) 현물본장시간, 청산시간을 정의하는 수식이 아래와 같이 #현물본장시간이 되면 T는 2 if (sDate != sDate[1] and sTime >= 현물본장시작시간) or (sDate == sDate[1] and sTime >= 현물본장시작시간 and sTime[1] < 현물본장시작시간) Then T = 2; #당일청산시간이 되면 T는 3 if (sDate != sDate[1] and sTime >= xtime) or (sDate == sDate[1] and sTime >= xtime and sTime[1] < xtime) Then T = 3; 이렇게 작성해주셨는데, 여기서 sDate != sDate[1] 이 "날짜가 바뀌면"의 의미로 보이는데 sTime이 현물본장시간보다 크거나같은(stime>=현물본장시작시간) 부분이 들어간게 의아합니다. 청산시간의 경우도 이런 부분이 있어 궁금합니다.. 검토 한번 부탁드리겠습니다. 감사합니다..! (+) 추가로, 시간 설정이 잘못된 까닭인지 모르겠으나 매수진입 매도진입의 채널이 제가 의도한 것과 다르게 설정되는 경우가 보이는데, 혹시 매수매도 진입의 기준이 되는 채널(HH,LL) 부분을 시각화 하여 차트에 표시하는 수식도 함께 부탁드리고자합니다 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 수식 문의드립니다. > 안녕하세요 예스스탁입니다. 당일청산함수가 지정한 시간이후 밤 0시까지 진입을 막게 됩니다. 해외선물에서는 아래와 같이 0시 당일청산을 설정하고 영업일이 변경되면 해제하게 작성하셔야 합니다. Input : xtime(065500),loss(9999); var : T(0),현물본장시작시간(0),당일청산시간(0),HH(0), LL(0); if T == 2 and sDate != sDate[1] Then SetStopEndofday(당일청산시간); #새로운 영업일 시작하면 IF Bdate != Bdate[1] Then { #T는 1 T = 1; #당일청산은 해제 SetStopEndofday(0); #썸머타임 여부에 따라 #현물본장 시작시간을 233000이나 223000으로 설정 #당일청산 시작시간을 065500이나 055500으로 설정 if sTime >= 80000 Then { 현물본장시작시간 = 233000; 당일청산시간 = xtime; } Else { 현물본장시작시간 = 223000; 당일청산시간 = xtime-10000;#055500 } } #현물본방시간이 되면 T는 2 if (sDate != sDate[1] and sTime >= 현물본장시작시간) or (sDate == sDate[1] and sTime >= 현물본장시작시간 and sTime[1] < 현물본장시작시간) Then T = 2; #당일청산시간이 되면 T는 3 if (sDate != sDate[1] and sTime >= xtime) or (sDate == sDate[1] and sTime >= xtime and sTime[1] < xtime) Then T = 3; #T가 1일때만 당일고가와 당일저가를 저장 if T == 1 Then { HH = DayHigh; LL = DayLow; } #현물본장 시작후 if T == 2 Then { # 진입 기준 설정 if CrossUp(c,HH) Then Buy("Buy", AtMarket); if CrossDown(c,LL) Then Sell("Sell", AtMarket); } # 로스컷 SetStopLoss(loss, PointStop); 즐거운 하루되세요 > penfold 님이 쓴 글입니다. > 제목 : 수식 문의드립니다. > 안녕하세요, 해외선물 관련해 수식 문의드리고자합니다. 나스닥 선물 기준으로, 당일 아침 선물장 개장 이후부터 현물 본장 개장 전까지의 가격 움직임을 채널로 설정하고 본장 개장 이후 상하단채널 돌파시 매수매도 진입을 하는 내용입니다. 위 내용을 시뮬레이션하는 데에 2가지 정도 어려움이 있어서 수식 검토를 요청드릴려고 합니다. (1) 한국시간을 기준으로만 차트 시간을 표기해야하므로, 0시가 지나면 영업일이 바뀌게되면서 Time1,2 변수 및 HH, LL 변수를 재설정해야하는 것인지 헷갈립니다. 아래 수식을 적용해서 시뮬레이션하면 23시30분~00시 사이에는 진입이 발생하지 않고 날짜가 넘어간 이후에만 진입 신호가 나오는 것 같습니다.. (2) 시뮬레이션을 할 때, 서머타임에 의해 장 개장시간이 변동되는 기간이 존재함에 따라 혼선이 생기는데, 서머타임 여부에 따라 선물장 개장시간(Time1) 및 본장개장시간(Time2)이 자동으로 서머타임 시간에 맞게 변화 필요. (청산 시간 또한 마찬가지) 위 두 가지 부분을 수식 내에서 해결 부탁드리고자 합니다. 항상 감사드립니다. ===================================================================================== Input : Time1(080000),Time2(232900), loss(9999); var : HH(0), LL(0); if sTime > Time1 and sTime < Time2 Then // Time1(08시)~Time2(23시29분)라면 { HH = DayHigh; // 그때까지의 고가 대입해서 당일 매매 기준이 되는 상단채널 설정 LL = DayLow; // 그때까지의 저가 대입해서 당일 매매 기준이 되는 하단채널 설정 } # 진입 기준 설정 if (sTime >= Time2 or sTime < Time1) //오후 23시29분 이후거나 오전 00시~08시 사이라면 and CrossUp(c,HH) Then //상단채널 돌파 시 매수 Buy("Buy", AtMarket); if (sTime >= Time2 or sTime < Time1) and CrossDown(c,LL) Then Sell("Sell", AtMarket); # 당일 장마감 직전에 청산 SetStopEndofday(065500); # 로스컷 SetStopLoss(loss, PointStop);