예스스탁
예스스탁 답변
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);
감사합니다.