커뮤니티

(2차질문)해외선물 정규장 초기 15분 또는 30분간의 최고저

프로필 이미지
알이랑
2025-08-12 13:31:22
122
글번호 193192
답변완료
안녕하세요. 추가 질문이 있습니다. 작성해 주신 코드를 제가 해독하는 능력이 떨어지다보니, 잘 이해가 안됩니다. CME 선물의 거래시간에 대해서 다시 정의해 드리오니, 앞서 작성해 주신 코드가 이 거래시간 흐름에 적합 할까요? - [오버나잇세션] 시카고시간 17:00 ~ 다음날 8:30 (한국시간 8:00~23:30, 서머타임시 7:00~22:30) Business Day가 현지시간 17:00에 변경됨 - [정규장+연장] 시카고시간 8:30 ~ 16:00 (한국시간 23:30~다음날7:00, 서머타임시 22:30~다음날 6:00) - [휴장] 시카고시간 16:00~17:00 (한국시간 7:00~8:00, 서머타임시 6:00~7:00) 위 시간 흐름 중에서 장 초기 15분~30분(N분) 채널을 삼고 싶은 시간은 정규장 시작 시간, 즉, 현지시간 8:30부터 (한국시간 22:30 또는 서머타임 23:30) 부터입니다. 그리고 SetStopEndofday()로 청산을 하는 것은 휴장시간 직전 즉, 현지시간 15:30 (한국시간 6:30 또는 서머타임 7:30)입니다. 감사합니다. ----------------------------------------------------------------------- // 먼저 작성해 주신 코드 안녕하세요 예스스탁입니다. 당일청산함수는 지정한 시간이후에 밤 0시까지 진입을 막게 됩니다. 08시 청산이면 그날 밤 0시까지 진입이 없게 되므로 적절한 시점에 당일청산 해제를 해주셔야 합니다. input : N(15),Endtime(80000); var : ST(0),S1(0),D1(0),T(0),TM(0),TM1(0); var : HH(0),LL(0); if sdate != sDate[1] Then SetStopEndofday(Endtime); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; if sTime < 80000 Then ST = 223000; Else ST = 233000; T = 0; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if ST > 0 and ((sDate != sDate[1] and sTime >= Endtime) or (sDate == sDate[1] and sTime >= Endtime and sTime[1] < Endtime)) Then { T = 2; } if ST > 0 and ((sDate != sDate[1] and sTime >= ST) or (sDate == sDate[1] and sTime >= ST and sTime[1] < ST)) Then { T = 1; TM1 = TM; SetStopEndofday(0); #해제 HH = H; LL = L; } if T == 1 Then { if TM < TM1+N Then { if H > HH Then HH = H; if L < LL Then LL = L; } if TM >= TM1+N Then { if crossup(c,HH) Then Buy("b"); if CrossDown(c,LL) Then Sell("s"); } } } 즐거운 하루되세요 > 알이랑 님이 쓴 글입니다. > 제목 : 해외선물 정규장 초기 15분 또는 30분간의 최고, 최저 구하고, 다음날 청산 방법 > CME 해외선물의 정규장 초기 구간(10분 또는 30분)을 채널 기준으로 삼고자 합니다. 한국시간으로 대략 22:30 (서머타임시) 또는 23:30 부터 시작입니다. 1분봉, 5분봉, 30분봉 등의 차트에서 22:30 부터 15분간의 최고, 최저 가격을 각각 HH, LL 변수에 할당하는 방법이 궁금합니다. 또한 그 다음날 아침 8:00 에 SetStopEndofday() 하는 방법도 궁금합니다. 아래 시스템식은 수식작성 예제의 "30MBO 전략"을 참조한 것입니다. [시스템식] var : HH(0),LL(0); if stime >= 223000 and stime < 2245000 Then{ HH ?? LL ?? } if stime >= 224500 and stime < 74500 and crossup(c,HH) then buy(); if stime >= 224500 and stime < 74500 and CrossDown(c,LL) then sell(); SetStopEndofday(80000); 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-08-12 17:11:38

안녕하세요 예스스탁입니다. 1. 수정한 시스템식입니다. input : N(30); var : ST(0),S1(0),D1(0),T(0),TM(0),TM1(0); var : HH(0),LL(0),ET(0); if sdate != sDate[1] Then SetStopEndofday(ET); if Bdate != Bdate[1] Then { SetStopEndofday(0); S1 = TimeToMinutes(stime); D1 = sdate; if sTime < 80000 Then { ST = 223000; ET = 53000; } Else { ST = 233000; ET = 63000; } T = 0; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if ST > 0 and ((sDate != sDate[1] and sTime >= ET) or (sDate == sDate[1] and sTime >= ET and sTime[1] < ET)) Then { T = 2; } if ST > 0 and ((sDate != sDate[1] and sTime >= ST) or (sDate == sDate[1] and sTime >= ST and sTime[1] < ST)) Then { T = 1; TM1 = TM; HH = H; LL = L; } if T == 1 Then { if TM < TM1+N Then { if H > HH Then HH = H; if L < LL Then LL = L; } if TM >= TM1+N Then { if crossup(c,HH) Then Buy("b"); if CrossDown(c,LL) Then Sell("s"); } } } 2. 지표식 input : N(30); var : ST(0),S1(0),D1(0),T(0),TM(0),TM1(0); var : HH(0),LL(0),ET(0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; if sTime < 80000 Then { ST = 223000; ET = 53000; } Else { ST = 233000; ET = 63000; } T = 0; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if ST > 0 and ((sDate != sDate[1] and sTime >= ET) or (sDate == sDate[1] and sTime >= ET and sTime[1] < ET)) Then { T = 2; } if ST > 0 and ((sDate != sDate[1] and sTime >= ST) or (sDate == sDate[1] and sTime >= ST and sTime[1] < ST)) Then { T = 1; TM1 = TM; HH = H; LL = L; } if T == 1 Then { if TM < TM1+N Then { if H > HH Then HH = H; if L < LL Then LL = L; } } Plot1(HH); plot2(LL); } 즐거운 하루되세요 > 알이랑 님이 쓴 글입니다. > 제목 : (2차질문)해외선물 정규장 초기 15분 또는 30분간의 최고저 > 안녕하세요. 추가 질문이 있습니다. 작성해 주신 코드를 제가 해독하는 능력이 떨어지다보니, 잘 이해가 안됩니다. CME 선물의 거래시간에 대해서 다시 정의해 드리오니, 앞서 작성해 주신 코드가 이 거래시간 흐름에 적합 할까요? - [오버나잇세션] 시카고시간 17:00 ~ 다음날 8:30 (한국시간 8:00~23:30, 서머타임시 7:00~22:30) Business Day가 현지시간 17:00에 변경됨 - [정규장+연장] 시카고시간 8:30 ~ 16:00 (한국시간 23:30~다음날7:00, 서머타임시 22:30~다음날 6:00) - [휴장] 시카고시간 16:00~17:00 (한국시간 7:00~8:00, 서머타임시 6:00~7:00) 위 시간 흐름 중에서 장 초기 15분~30분(N분) 채널을 삼고 싶은 시간은 정규장 시작 시간, 즉, 현지시간 8:30부터 (한국시간 22:30 또는 서머타임 23:30) 부터입니다. 그리고 SetStopEndofday()로 청산을 하는 것은 휴장시간 직전 즉, 현지시간 15:30 (한국시간 6:30 또는 서머타임 7:30)입니다. 감사합니다. ----------------------------------------------------------------------- // 먼저 작성해 주신 코드 안녕하세요 예스스탁입니다. 당일청산함수는 지정한 시간이후에 밤 0시까지 진입을 막게 됩니다. 08시 청산이면 그날 밤 0시까지 진입이 없게 되므로 적절한 시점에 당일청산 해제를 해주셔야 합니다. input : N(15),Endtime(80000); var : ST(0),S1(0),D1(0),T(0),TM(0),TM1(0); var : HH(0),LL(0); if sdate != sDate[1] Then SetStopEndofday(Endtime); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; if sTime < 80000 Then ST = 223000; Else ST = 233000; T = 0; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if ST > 0 and ((sDate != sDate[1] and sTime >= Endtime) or (sDate == sDate[1] and sTime >= Endtime and sTime[1] < Endtime)) Then { T = 2; } if ST > 0 and ((sDate != sDate[1] and sTime >= ST) or (sDate == sDate[1] and sTime >= ST and sTime[1] < ST)) Then { T = 1; TM1 = TM; SetStopEndofday(0); #해제 HH = H; LL = L; } if T == 1 Then { if TM < TM1+N Then { if H > HH Then HH = H; if L < LL Then LL = L; } if TM >= TM1+N Then { if crossup(c,HH) Then Buy("b"); if CrossDown(c,LL) Then Sell("s"); } } } 즐거운 하루되세요 > 알이랑 님이 쓴 글입니다. > 제목 : 해외선물 정규장 초기 15분 또는 30분간의 최고, 최저 구하고, 다음날 청산 방법 > CME 해외선물의 정규장 초기 구간(10분 또는 30분)을 채널 기준으로 삼고자 합니다. 한국시간으로 대략 22:30 (서머타임시) 또는 23:30 부터 시작입니다. 1분봉, 5분봉, 30분봉 등의 차트에서 22:30 부터 15분간의 최고, 최저 가격을 각각 HH, LL 변수에 할당하는 방법이 궁금합니다. 또한 그 다음날 아침 8:00 에 SetStopEndofday() 하는 방법도 궁금합니다. 아래 시스템식은 수식작성 예제의 "30MBO 전략"을 참조한 것입니다. [시스템식] var : HH(0),LL(0); if stime >= 223000 and stime < 2245000 Then{ HH ?? LL ?? } if stime >= 224500 and stime < 74500 and crossup(c,HH) then buy(); if stime >= 224500 and stime < 74500 and CrossDown(c,LL) then sell(); SetStopEndofday(80000); 감사합니다.