//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 일본의 국가 코드 (ISO 3166-1 Alpha-2)
string japan_code="JP";
//--- 이벤트 발생 간격의 경계를 설정
datetime date_from=D'01.01.2018'; // 2018년부터 모든 이벤트 받기
datetime date_to=0; // 0은 아직 발생하지 않은 이벤트를 포함하여 알려진 모든 이벤트를 의미함
//--- 일본 이벤트 값의 배열 가져오기
MqlCalendarValue values[];
int values_count=CalendarValueHistory(values,date_from,date_to,japan_code);
//--- 탐지된 이벤트 값을 따라 이동하기
if(values_count>0)
{
PrintFormat("일본 이벤트 값의 수: %d",values_count);
//--- 모든 "empty" 값 삭제 (actual_value==-9223372036854775808)
for(int i=values_count-1;i>=0;i--)
{
if(values[i].actual_value==-9223372036854775808)
ArrayRemove(values,i,1);
}
PrintFormat("빈 값 삭제 후의 값의 수: %d",ArraySize(values));
}
else
{
PrintFormat("국가 코드 %s, 오류 %d에 대한 이벤트를 수신하지 못했습니다.",
japan_code,GetLastError());
//--- 스크립트 미리 완료
return;
}
//--- values[] 배열에 10개 이하의 값을 남기기
if(ArraySize(values)>10)
{
PrintFormat("값 목록을 10으로 줄이고 표시");
ArrayRemove(values,0,ArraySize(values)-10);
}
ArrayPrint(values);
//--- 이제 알려진 value_id를 기준으로 이벤트 값 설명을 가져오는 방법을 표시하겠습니다
for(int i=0;i<ArraySize(values);i++)
{
MqlCalendarValue value;
CalendarValueById(values[i].id,value);
PrintFormat("%d: value_id=%d value=%d impact=%s",
i,values[i].id,value.actual_value,EnumToString(ENUM_CALENDAR_EVENT_IMPACT(value.impact_type)));
}
//---
}
/*
결과:
일본 이벤트 값의 수: 1734
빈 값 삭제 후 값의 수: 1017
값의 목록을 10으로 줄이고 표시
[id] [event_id] [time] [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
[0] 56500 392030004 2019.03.28 23:30:00 2019.03.01 00:00:00 0 900000 600000 -9223372036854775808 500000 1 0
[1] 56501 392030005 2019.03.28 23:30:00 2019.03.01 00:00:00 0 700000 700000 -9223372036854775808 700000 0 0
[2] 56502 392030006 2019.03.28 23:30:00 2019.03.01 00:00:00 0 1100000 1100000 -9223372036854775808 900000 1 0
[3] 56544 392030007 2019.03.28 23:30:00 2019.02.01 00:00:00 0 2300000 2500000 -9223372036854775808 2200000 2 0
[4] 56556 392050002 2019.03.28 23:30:00 2019.02.01 00:00:00 0 1630000 1630000 1610000 1620000 1 0
[5] 55887 392020003 2019.03.28 23:50:00 2019.02.01 00:00:00 0 400000 600000 -9223372036854775808 1300000 2 0
[6] 55888 392020004 2019.03.28 23:50:00 2019.02.01 00:00:00 0 -1800000 -3300000 -9223372036854775808 -2000000 1 0
[7] 55889 392020002 2019.03.28 23:50:00 2019.02.01 00:00:00 0 200000 -2300000 -1800000 300000 2 0
[8] 55948 392020006 2019.03.28 23:50:00 2019.02.01 00:00:00 1 1400000 -3400000 -9223372036854775808 -300000 1 0
[9] 55949 392020007 2019.03.28 23:50:00 2019.02.01 00:00:00 1 -1000000 300000 -9223372036854775808 -100000 2 0
value_id를 기준으로 이벤트 값에 대한 간략한 데이터 표시
0: value_id=56500 value=900000 impact=CALENDAR_IMPACT_POSITIVE
1: value_id=56501 value=700000 impact=CALENDAR_IMPACT_NA
2: value_id=56502 value=1100000 impact=CALENDAR_IMPACT_POSITIVE
3: value_id=56544 value=2300000 impact=CALENDAR_IMPACT_NEGATIVE
4: value_id=56556 value=1630000 impact=CALENDAR_IMPACT_POSITIVE
5: value_id=55887 value=400000 impact=CALENDAR_IMPACT_NEGATIVE
6: value_id=55888 value=-1800000 impact=CALENDAR_IMPACT_POSITIVE
7: value_id=55889 value=200000 impact=CALENDAR_IMPACT_NEGATIVE
8: value_id=55948 value=1400000 impact=CALENDAR_IMPACT_POSITIVE
9: value_id=55949 value=-1000000 impact=CALENDAR_IMPACT_NEGATIVE
*/
|