Truy vấn loại sự kiện theo quốc gia và tiền tệ
Lịch các sự kiện kinh tế và ngày lễ có đặc thù riêng ở mỗi quốc gia. Một chương trình MQL có thể truy vấn các loại sự kiện trong một quốc gia cụ thể, cũng như các loại sự kiện liên quan đến một loại tiền tệ cụ thể. Điều này đặc biệt quan trọng trong trường hợp nhiều quốc gia sử dụng cùng một loại tiền tệ, ví dụ như hầu hết các thành viên của Liên minh Châu Âu.
int CalendarEventByCountry(const string country, MqlCalendarEvent &events[])
Hàm CalendarEventByCountry
điền vào mảng các cấu trúc MqlCalendarEvent
được truyền bằng tham chiếu với mô tả của tất cả các loại sự kiện có sẵn trong lịch cho quốc gia được chỉ định bởi mã quốc gia hai chữ cái (theo tiêu chuẩn ISO 3166-1 alpha-2). Chúng ta đã thấy các ví dụ về mã này trong phần trước, trong log: EU
cho Liên minh Châu Âu, US
cho Hoa Kỳ, DE
cho Đức, CN
cho Trung Quốc, v.v.
Mảng nhận có thể là động hoặc cố định với kích thước đủ lớn.
Hàm trả về số lượng mô tả nhận được và 0 trong trường hợp có lỗi. Đặc biệt, nếu mảng cố định không thể chứa tất cả các sự kiện, hàm sẽ điền phần dữ liệu phù hợp và đặt mã _LastError
bằng CALENDAR_MORE_DATA
(5400). Các lỗi phân bổ bộ nhớ (4004, ERR_NOT_ENOUGH_MEMORY
) hoặc hết thời gian yêu cầu lịch từ máy chủ (5401, ERR_CALENDAR_TIMEOUT
) cũng có thể xảy ra.
Nếu quốc gia với mã đã cho không tồn tại, lỗi INTERNAL_ERROR
(4001) sẽ xảy ra.
Bằng cách chỉ định NULL
hoặc chuỗi rỗng ""
thay vì country
, bạn có thể lấy danh sách đầy đủ các sự kiện cho tất cả các quốc gia.
Hãy kiểm tra hiệu suất của hàm bằng kịch bản đơn giản CalendarEventKindsByCountry.mq5
. Nó có một tham số đầu vào duy nhất là mã của quốc gia mà chúng ta quan tâm.
input string CountryCode = "HK";
Tiếp theo, một yêu cầu về các loại sự kiện được thực hiện bằng cách gọi CalendarEventByCountry
, và nếu thành công, các mảng kết quả sẽ được ghi log.
void OnStart()
{
MqlCalendarEvent events[];
if(PRTF(CalendarEventByCountry(CountryCode, events)))
{
Print("Event kinds for country: ", CountryCode);
ArrayPrint(events);
}
}
2
3
4
5
6
7
8
9
Dưới đây là một ví dụ về kết quả (do các dòng dài, chúng được chia thành 2 khối để xuất bản trong sách: khối đầu tiên chứa các trường số của cấu trúc MqlCalendarEvent
, và khối thứ hai chứa các trường chuỗi).
CalendarEventByCountry(CountryCode,events)=26 / ok
Event kinds for country: HK
[id] [type] [sector] [frequency] [time_mode] [country_id] [unit] [importance] [multiplier] [digits] »
[ 0] 344010001 1 5 2 0 344 6 1 3 1 »
[ 1] 344010002 1 5 2 0 344 1 1 0 1 »
[ 2] 344020001 1 4 2 0 344 1 1 0 1 »
[ 3] 344020002 1 2 3 0 344 1 3 0 1 »
[ 4] 344020003 1 2 3 0 344 1 2 0 1 »
[ 5] 344020004 1 6 2 0 344 1 1 0 1 »
[ 6] 344020005 1 6 2 0 344 1 1 0 1 »
[ 7] 344020006 1 6 2 0 344 2 2 3 3 »
[ 8] 344020007 1 9 2 0 344 1 1 0 1 »
[ 9] 344020008 1 3 2 0 344 1 2 0 1 »
[10] 344030001 2 12 0 1 344 0 0 0 0 »
[11] 344030002 2 12 0 1 344 0 0 0 0 »
[12] 344030003 2 12 0 1 344 0 0 0 0 »
[13] 344030004 2 12 0 1 344 0 0 0 0 »
[14] 344030005 2 12 0 1 344 0 0 0 0 »
[15] 344030006 2 12 0 1 344 0 0 0 0 »
[16] 344030007 2 12 0 1 344 0 0 0 0 »
[17] 344030008 2 12 0 1 344 0 0 0 0 »
[18] 344030009 2 12 0 1 344 0 0 0 0 »
[19] 344030010 2 12 0 1 344 0 0 0 0 »
[20] 344030011 2 12 0 1 344 0 0 0 0 »
[21] 344030012 2 12 0 1 344 0 0 0 0 »
[22] 344030013 2 12 0 1 344 0 0 0 0 »
[23] 344030014 2 12 0 1 344 0 0 0 0 »
[24] 344030015 2 12 0 1 344 0 0 0 0 »
[25] 344500001 1 8 2 0 344 0 1 0 1 »
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Tiếp tục của log (phần bên phải).
» [source_url] [event_code] [name]
[ 0]» "https://www.hkma.gov.hk/eng/" "foreign-exchange-reserves" "Foreign Exchange Reserves"
[ 1]» "https://www.hkma.gov.hk/eng/" "hkma-m3-money-supply-yy" "HKMA M3 Money Supply y/y"
[ 2]» "https://www.censtatd.gov.hk/en/" "cpi-yy" "CPI y/y"
[ 3]» "https://www.censtatd.gov.hk/en/" "gdp-qq" "GDP q/q"
[ 4]» "https://www.censtatd.gov.hk/en/" "gdp-yy" "GDP y/y"
[ 5]» "https://www.censtatd.gov.hk/en/" "exports-mm" "Exports y/y"
[ 6]» "https://www.censtatd.gov.hk/en/" "imports-mm" "Imports y/y"
[ 7]» "https://www.censtatd.gov.hk/en/" "trade-balance" "Trade Balance"
[ 8]» "https://www.censtatd.gov.hk/en/" "retail-sales-yy" "Retail Sales y/y"
[ 9]» "https://www.censtatd.gov.hk/en/" "unemployment-rate-3-months" "Unemployment Rate 3-Months"
[10]» "https://publicholidays.hk/" "new-years-day" "New Year's Day"
[11]» "https://publicholidays.hk/" "lunar-new-year" "Lunar New Year"
[12]» "https://publicholidays.hk/" "ching-ming-festival" "Ching Ming Festival"
[13]» "https://publicholidays.hk/" "good-friday" "Good Friday"
[14]» "https://publicholidays.hk/" "easter-monday" "Easter Monday"
[15]» "https://publicholidays.hk/" "birthday-of-buddha" "The Birthday of the Buddha"
[16]» "https://publicholidays.hk/" "labor-day" "Labor Day"
[17]» "https://publicholidays.hk/" "tuen-ng-festival" "Tuen Ng Festival"
[18]» "https://publicholidays.hk/" "hksar-establishment-day" "HKSAR Establishment Day"
[19]» "https://publicholidays.hk/" "day-following-mid-autumn-festival" "The Day Following Mid-Autumn Festival"
[20]» "https://publicholidays.hk/" "national-day" "National Day"
[21]» "https://publicholidays.hk/" "chung-yeung-festival" "Chung Yeung Festival"
[22]» "https://publicholidays.hk/" "christmas-day" "Christmas Day"
[23]» "https://publicholidays.hk/" "first-weekday-after-christmas-day" "The First Weekday After Christmas Day"
[24]» "https://publicholidays.hk/" "day-following-good-friday" "The Day Following Good Friday"
[25]» "https://www.markiteconomics.com" "nikkei-pmi" "S&P Global PMI"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int CalendarEventByCurrency(const string currency, MqlCalendarEvent &events[])
Hàm CalendarEventByCurrency
điền vào mảng events
được truyền với mô tả của tất cả các loại sự kiện trong lịch liên quan đến currency
được chỉ định. Ký hiệu ba chữ cái của tiền tệ được tất cả các nhà giao dịch Forex biết đến.
Nếu mã tiền tệ không hợp lệ được chỉ định, hàm sẽ trả về 0 (không có lỗi) và một mảng rỗng.
Bằng cách chỉ định NULL
hoặc chuỗi rỗng ""
thay vì currency
, bạn có thể lấy danh sách đầy đủ các sự kiện lịch.
Hãy kiểm tra hàm bằng kịch bản CalendarEventKindsByCurrency.mq5
. Tham số đầu vào chỉ định mã tiền tệ.
input string Currency = "CNY";
Trong trình xử lý OnStart
, chúng ta yêu cầu các sự kiện và xuất chúng ra log.
void OnStart()
{
MqlCalendarEvent events[];
if(PRTF(CalendarEventByCurrency(Currency, events)))
{
Print("Event kinds for currency: ", Currency);
ArrayPrint(events);
}
}
2
3
4
5
6
7
8
9
Dưới đây là một ví dụ về kết quả (được rút gọn).
CalendarEventByCurrency(Currency,events)=40 / ok
Event kinds for currency: CNY
[id] [type] [sector] [frequency] [time_mode] [country_id] [unit] [importance] [multiplier] [digits] »
[ 0] 156010001 1 4 2 0 156 1 2 0 1 »
[ 1] 156010002 1 4 2 0 156 1 1 0 1 »
[ 2] 156010003 1 4 2 0 156 1 1 0 1 »
[ 3] 156010004 1 2 3 0 156 1 3 0 1 »
[ 4] 156010005 1 2 3 0 156 1 2 0 1 »
[ 5] 156010006 1 9 2 0 156 1 2 0 1 »
[ 6] 156010007 1 8 2 0 156 1 2 0 1 »
[ 7] 156010008 1 8 2 0 156 0 3 0 1 »
[ 8] 156010009 1 8 2 0 156 0 3 0 1 »
[ 9] 156010010 1 8 2 0 156 1 2 0 1 »
[10] 156010011 0 5 0 0 156 0 2 0 0 »
[11] 156010012 1 3 2 0 156 1 2 0 1 »
[12] 156010013 1 8 2 0 156 1 1 0 1 »
[13] 156010014 1 8 2 0 156 1 1 0 1 »
[14] 156010015 1 8 2 0 156 0 3 0 1 »
[15] 156010016 1 8 2 0 156 1 2 0 1 »
[16] 156010017 1 9 2 0 156 1 2 0 1 »
[17] 156010018 1 2 3 0 156 1 2 0 1 »
[18] 156020001 1 6 2 3 156 6 2 3 2 »
[19] 156020002 1 6 2 3 156 1 1 0 1 »
[20] 156020003 1 6 2 3 156 1 1 0 1 »
[21] 156020004 1 6 2 3 156 2 2 3 2 »
[22] 156020005 1 6 2 3 156 1 1 0 1 »
[23] 156020006 1 6 2 3 156 1 1 0 1 »
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Phần bên phải.
» [source_url] [event_code] [name]
[ 0]» "http://www.stats.gov.cn/english/" "cpi-mm" "CPI m/m"
[ 1]» "http://www.stats.gov.cn/english/" "cpi-yy" "CPI y/y"
[ 2]» "http://www.stats.gov.cn/english/" "ppi-yy" "PPI y/y"
[ 3]» "http://www.stats.gov.cn/english/" "gdp-qq" "GDP q/q"
[ 4]» "http://www.stats.gov.cn/english/" "gdp-yy" "GDP y/y"
[ 5]» "http://www.stats.gov.cn/english/" "retail-sales-yy" "Retail Sales y/y"
[ 6]» "http://www.stats.gov.cn/english/" "industrial-production-yy" "Industrial Production y/y"
[ 7]» "http://www.stats.gov.cn/english/" "manufacturing-pmi" "Manufacturing PMI"
[ 8]» "http://www.stats.gov.cn/english/" "non-manufacturing-pmi" "Non-Manufacturing PMI"
[ 9]» "http://www.stats.gov.cn/english/" "fixed-asset-investment-yy" "Fixed Asset Investment y/y"
[10]» "http://www.stats.gov.cn/english/" "nbs-press-conference-on-economic-situation" "NBS Press Conference on Economic Situation"
[11]» "http://www.stats.gov.cn/english/" "unemployment-rate" "Unemployment Rate"
[12]» "http://www.stats.gov.cn/english/" "industrial-profit-yy" "Industrial Profit y/y"
[13]» "http://www.stats.gov.cn/english/" "industrial-profit-ytd-yy" "Industrial Profit YTD y/y"
[14]» "http://www.stats.gov.cn/english/" "composite-pmi" "Composite PMI"
[15]» "http://www.stats.gov.cn/english/" "industrial-production-ytd-yy" "Industrial Production YTD y/y"
[16]» "http://www.stats.gov.cn/english/" "retail-sales-ytd-yy" "Retail Sales YTD y/y"
[17]» "http://www.stats.gov.cn/english/" "gdp-ytd-yy" "GDP YTD y/y"
[18]» "http://english.customs.gov.cn/" "trade-balance-usd" "Trade Balance USD"
[19]» "http://english.customs.gov.cn/" "imports-usd-yy" "Imports USD y/y"
[20]» "http://english.customs.gov.cn/" "exports-usd-yy" "Exports USD y/y"
[21]» "http://english.customs.gov.cn/" "trade-balance" "Trade Balance"
[22]» "http://english.customs.gov.cn/" "imports-yy" "Imports y/y"
[23]» "http://english.customs.gov.cn/" "exports-yy" "Exports y/y"
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Một độc giả tinh ý sẽ nhận thấy rằng định danh loại sự kiện chứa mã quốc gia, số của nguồn tin tức và số thứ tự trong nguồn (đánh số bắt đầu từ 1). Vì vậy, định dạng chung của định danh loại sự kiện là: CCCSSNNNN, trong đó CCC là mã quốc gia, SS là nguồn, NNNN là số. Ví dụ, 156020001
là tin tức đầu tiên từ nguồn thứ hai cho Trung Quốc và 344030010
là tin tức thứ mười từ nguồn thứ ba cho Hồng Kông. Ngoại lệ duy nhất là tin tức toàn cầu, mã "quốc gia" không phải là 000
mà là 1000
.