안녕하세요?
아래는 키움에서 사용했던 전략입니다.
예스에서 사용할 수 있도록 함수변환 요청드립니다.
아울러 스크립트에 각 주석도 좀 부탁드립니다.
감사합니다.
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;