Giới thiệu
Các bài viết này hướng đến các nhà giao dịch không còn muốn phụ thuộc vào lập trình viên và mong muốn hiểu cách mọi thứ hoạt động. Các bài viết cung cấp thông tin chi tiết và nhất quán, kèm theo hình ảnh và ví dụ, dẫn dắt người đọc đến trình độ “thành thạo ngôn ngữ MQL5”.
Ngôn ngữ này không chỉ được sử dụng để tự động hóa giao dịch mà còn để giải quyết các nhiệm vụ liên quan đến giao dịch khác. Ví dụ, bạn có thể dùng nó để vẽ các chỉ báo, kết quả tối ưu hóa và bất kỳ hình dạng tùy chỉnh nào, để tạo tệp như danh sách báo giá tick hoặc ảnh chụp màn hình tình hình giao dịch hiện tại, để gửi tin nhắn đến Telegram và các bot nhắn tin khác, để làm việc với cơ sở dữ liệu, và nhiều hơn nữa.
Tôi muốn dần dần giới thiệu tối đa khả năng của ngôn ngữ: sử dụng virtual symbols
, các phép toán với thư viện toán học, và nhiều thứ khác. Lần này chúng ta bắt đầu với những điều cơ bản.
Các thuật ngữ kỹ thuật cơ bản
Hầu hết các máy tính hiện đại đều được xây dựng dựa trên kiến trúc Von Neumann. Để đọc tài liệu thành công, bạn cần hiểu các thuật ngữ mà lập trình viên sử dụng.
Central Processing Unit
(hoặcCPU
). Mô-đun này chịu trách nhiệm cho tất cả các phép tính và logic.Random Access Memory
(RAM
, bộ nhớ). RAM lưu trữ dữ liệu và chương trình. Khi bạn tắt máy tính hoặc đóng chương trình, dữ liệu trong RAM sẽ bị xóa.External drives
(ổ flash, HDD, SSD, v.v.). CPU có thể ghi dữ liệu vào chúng dưới dạng tệp.Files
nghĩa là thông tin được ghi trên phương tiện bên ngoài (không phải trong RAM).Execution thread
. Trong quá trình hoạt động, CPU lấy dữ liệu từ RAM, “hiểu” liệu đó là lệnh hay dữ liệu, thực thi lệnh và ghi kết quả либо trở lại RAM hoặc vào ổ đĩa ngoài do chương trình đang chạy chỉ định. Sau đó, nó lại đọc đoạn bộ nhớ tiếp theo, và cứ thế cho đến khi chương trình kết thúc. Toàn bộ quá trình này được gọi là “luồng thực thi”.
Có nhiều đơn vị đo lường thông tin khác nhau.
Bit
là đơn vị cơ bản nhất của thông tin. Thực tế, nó là một “công tắc” xác định trạng thái của một mảnh bộ nhớ nhỏ nhất. Một bit chứa либо0
(tắt) hoặc1
(bật).Byte
có thể được giải thích như một “âm tiết”. Nó là “gói” thông tin nhỏ nhất bằng8 bit
. Khi máy tính còn lớn và chiếm cả tầng nhà, dung lượng RAM rất nhỏ, và các tệp được lưu trên thẻ đục lỗ, 8 bit là sự thỏa hiệp kỹ thuật tiện lợi nhất giữa tốc độ (có thể đọc đồng thời 8 lỗ!) và kích thước phương tiện.
Đôi khi việc hiểu một chương trình sẽ chiếm bao nhiêu dung lượng là quan trọng đối với lập trình viên. Trong thế giới hiện đại, các chương trình (và đặc biệt là dữ liệu của chúng) thường chiếm rất nhiều dung lượng, vì vậy các tiền tố đơn vị được thêm vào từ “byte”.
Khi đo lường các đại lượng vật lý thay vì thông tin, mỗi tiền tố như vậy biểu thị sự tăng gấp 1000 lần so với kích thước trước đó. Ví dụ, một kilômét bằng 1000 mét, và một megavolt là 1000 kilovolt hoặc 1.000.000 volt.
Tuy nhiên, khi nói về
computer data
, mỗi tiền tố đơn vị tiếp theo lớn hơn tiền tố trước đó1024 lần
.Ví dụ,
kilobyte
(KB) bằng1024 bytes
,megabyte
(MB) chứa1024 kilobytes
, và cứ thế. Các tiền tố tiếp theo là:giga
,tera
,peta
, v.v.
Chúng ta sẽ xử lý việc quản lý bộ nhớ, các lệnh cho bộ xử lý, ghi tệp bằng MQL5 và các công việc thường ngày khác trong các bài viết sau.
Các thuật ngữ in đậm sẽ thường xuyên xuất hiện trong các bài viết, vì vậy tôi mô tả chúng ở đây ngay từ đầu. Các thuật ngữ khác sẽ được giới thiệu tại nơi chúng xuất hiện lần đầu tiên. Tôi không thể tránh sử dụng thuật ngữ, nhưng tôi sẽ cố gắng dùng ít nhất có thể.
Phần mềm cần thiết để bắt đầu lập trình trong MQL5
Để khiến máy tính hữu ích cho con người, bạn cần viết chương trình cho từng loại hoạt động: giao dịch, xem ảnh, nghe nhạc, và các hoạt động khác.
Có thể viết chương trình trực tiếp bằng các lệnh của bộ xử lý. Nhưng điều này rất không hiệu quả
.
Do đó, trong thế giới hiện đại, có nhiều chương trình trợ giúp chuyển đổi văn bản được viết bằng ngôn ngữ gần với con người thành các lệnh mà bộ xử lý có thể hiểu.
Dưới đây là danh sách tối thiểu các chương trình cần thiết cho lập trình viên:
-
Text editor
. Trong phần mềm này, bạn viết mã của mình. Bất kỳ trình chỉnh sửa nào bạn thích đều được. Tuy nhiên, nó không nên thêm bất kỳ ký tự thừa nào vào văn bản bạn nhập. Sẽ rất tiện lợi nếu trình chỉnh sửa có thể làm nổi bật cú pháp của ngôn ngữ bạn cần (trong trường hợp này là MQL5). Khi bạn cài đặt MetaTrader, một trình chỉnh sửa rất mạnh mẽ gọi làMetaEditor
sẽ tự động được cài đặt trên hệ thống. Nó có thể làm mọi thứ bạn cần. Tuy nhiên, nếu vì lý do nào đó bạn không thích nó, bạn có thể tự do chọn bất kỳ thứ gì khác. Ví dụ, một trong những trình chỉnh sửa rất phổ biến được lập trình viên sử dụng làVisual Studio Code (VSCode)
. Sử dụng plugin, bạn có thể cấu hình nó để làm việc với MQL5. -
Compiler
. Trình biên dịch chuyển đổitext
được lập trình viên viết trong trình chỉnh sửathành mã máy
. Chỉ sau khi chuyển đổi, CPU mới có thể thực thi mã này. Đối với ngôn ngữ MQL5, trình biên dịch được tích hợp trong MetaEditor. Đối với các ngôn ngữ khác như C++, trình biên dịch có thể là một chương trình riêng biệt. Một số ngôn ngữ, như Python, không có trình biên dịch rõ ràng. Chúng dường như thực thi trực tiếp văn bản từ tệp của bạn. Chương trình đọc tệp cho các ngôn ngữ như vậy được gọi là “trình thông dịch”, và các ngôn ngữ này được gọi tương ứng là “được thông dịch”. Tuy nhiên, cần hiểu rằng ngay cả các trình thông dịchcuối cùng
cũng thực thi mã máy. Sự khác biệt là quá trình chuyển đổi từ văn bản sang mã không quá rõ ràng. -
Debugger
. Công cụ này cho phép bạn tìm và sửa lỗi trong chương trình của mình. Nó cho phép thực thi mã từng bước nhằm kiểm tra dữ liệu mà chương trình của bạn đang làm việc tại bất kỳ thời điểm nào ở mỗi bước. MetaEditor cung cấp một trình gỡ lỗi tích hợp. -
Version Control System (VCS)
. Hệ thống như vậy hỗ trợ theo dõi các thay đổi trong mã của bạn. Nếu bạn đã viết rất nhiều mã và đột nhiên nhận ra rằng phiên bản cách đây một ngày hoạt động tốt hơn nhiều hoặc bạn cần đi theo một hướng khác, VCS sẽ cho phép bạn “quay lại” trạng thái trước đó của tệp (và thậm chí cả toàn bộ dự án) chỉ trong vài cú nhấp chuột hoặc lệnh văn bản từ bàn phím. Quan trọng nhất, VCS thường lưu trữ dữ liệu trên máy chủ từ xa, thay vì trên máy tính cục bộ của bạn, đảm bảo rằng nếu xảy ra sự cố (ví dụ, ổ cứng bị hỏng), bạn có thể nhanh chóng khôi phục công việc của mình. Hai yếu tố quan trọng này đã khiến các hệ thống kiểm soát phiên bản khác nhau gần như trở thành bắt buộc đối với công việc doanh nghiệp vì chúng cũng cho phép hợp tác với các nhà phát triển khác. Thói quen sử dụng các công cụ này cũng giúp ích rất nhiều khi làm việc độc lập, vì nhiều điều bất ngờ có thể xảy ra. Có các giải pháp bên thứ ba như Git. Tuy nhiên, một công cụ như vậy cũng được tích hợp trong MetaEditor. Khả năng của VCS tích hợp sẽ đủ cho người mới bắt đầu.
Đây là bộ công cụ mà lập trình hiện đại không thể thiếu. Các lập trình viên có thể sử dụng các công cụ phiên bản riêng lẻ. Nhưng trong thế giới hiện đại, điều này xảy ra tương đối hiếm. Thường thì người dùng chọn phần mềm như MetaEditor, bao gồm tất cả các tính năng này (và thậm chí còn hơn thế nữa).
Các giải pháp phần mềm bao gồm tất cả các thành phần trên (trình chỉnh sửa văn bản, trình biên dịch, trình gỡ lỗi và các thứ khác) được gọi là Integrated Development Environment (IDE)
.
Các loại chương trình chính của MQL5
Các ứng dụng chương trình có thể được thực thi trong MetaTrader 5 có thể được chia thành bốn loại:
Scripts
. Chúng có thể hiển thị thông tin, giao dịch, hoặc hiển thị các đối tượng đồ họa. Để thực thi script, bạn cần chạy nó lại mỗi khi cần.Indicators
. Chúng được thiết kế để hiển thị thông tin cho một chiến lược giao dịch trên mỗi tick. Chúng không tự giao dịch.Expert Advisors
(EA
). Đây là các chương trình được thiết kế để giao dịch. Giống như các chỉ báo, chúng được thực thi trên mỗi tick, nhưng chúng không sở hữu tất cả các công cụ để vẽ mũi tên hoặc các đường hữu ích.Services
. Không giống như tất cả các loại chương trình trước đó, dịch vụ không yêu cầu bất kỳ biểu đồ cụ thể nào để hoạt động. Chúng chạy một lần khiterminal
khởi động. Bạn có thể buộc chúng duy trì trong bộ nhớ cho đến khi terminal đóng (và thậm chí một thời gian sau đó), nhưng chúng không thể phản hồi các sự kiện terminal, như sự xuất hiện của một tick mới hoặc một cú nhấp chuột.
So sánh các loại chương trình có sẵn trong MQL5
Mọi thứ liên quan đến việc sử dụng chương trình trong MQL5 có thể được tóm tắt trong một bảng đơn giản:
Bảng 1. So sánh khả năng của các loại chương trình chính trong MQL5.
Khả năng chương trình | Scripts | Indicators | Expert Advisors | Services |
---|---|---|---|---|
Liên kết với một biểu đồ cụ thể | có | có | có | không |
Có thể giao dịch | có | không | có | có |
Bị xóa khỏi bộ nhớ khi thay đổi khung thời gian | có | có | có | không |
Thực thi trên mỗi tick | không | có | có | không |
Thực thi một lần khi terminal được mở | không | không | không | có |
Chạy trong khi cửa sổ biểu đồ đang mở | không | có | có | không |
Có thể xử lý các sự kiện terminal hoặc biểu đồ | không | có | có | không |
Có thể khởi động và dừng bộ đếm thời gian | không | có | có | không |
Tự động gọi hàm khởi tạo và hủy khởi tạo | không | có | có | không |
Chỉ một phiên bản của chương trình có thể chạy trên biểu đồ | có | không | có | — |
Hàm
Mọi chương trình nên làm
điều gì đó, tức là thực hiện một số chức năng
.
Bất kỳ function
nào cũng là một tập hợp các hành động của chương trình dẫn đến một kết quả nào đó (thường là cơ bản). Ví dụ, chúng in một dòng văn bản, vẽ một chữ cái, hoặc mở một giao dịch, trong số nhiều thứ khác.
Một số ngôn ngữ lập trình không yêu cầu khai báo hàm rõ ràng. Việc khai báo như vậy là bắt buộc trong MQL5: mỗi chương trình phải có ít nhất một hàm khởi động được khai báo, nếu không sẽ có thông báo lỗi. Đối với mỗi loại chương trình, các hàm khởi động sẽ được gọi khác nhau. Tuy nhiên, trong bất kỳ trường hợp nào, một chương trình phải có
các hàm, nếu không nó trở nên vô nghĩa vì không làm gì cả.
Hầu hết mọi ngôn ngữ lập trình đều cho phép tạo các hàm tùy chỉnh
để tách các đoạn mã lặp lại, sau đó tái sử dụng chúng trong một dòng, thay vì viết lại nhiều lần. Ngoài ra, tất cả các ngôn ngữ đều có tập hợp các hàm được định sẵn
. Chính những hàm được định sẵn này phân biệt một ngôn ngữ lập trình với tất cả các ngôn ngữ khác.
Thực tế, khi nói về một ngôn ngữ, các tác giả thường cố gắng mô tả những hàm nào được định sẵn trong đó và cách sử dụng chúng tốt nhất để đạt được kết quả mong muốn.
MQL5 không phải là ngoại lệ. Nó chứa một tập hợp các hàm tích hợp và cho phép tạo các hàm tùy chỉnh. Các hàm tích hợp của ngôn ngữ có thể được nghiên cứu thuận tiện bằng cách sử dụng trợ giúp ngữ cảnh. Để gọi Trợ giúp, mở bất kỳ mã nào (kể cả mã do người khác viết) trong MetaEditor, nhấp vào bất kỳ từ nào được làm nổi bật và nhấn phím F1
.
Một số loại chương trình không thể gọi một số hàm tích hợp nhất định. Một số, như đã đề cập, phải được thực hiện chính xác như mô tả trong trợ giúp. Hơn nữa, các loại chương trình khác nhau sẽ yêu cầu các hàm khác nhau.
Nhưng ngoài ra, sự sáng tạo của chúng ta gần như không giới hạn. Chúng ta có thể tạo bất kỳ hàm trợ giúp nào, tổ chức chúng theo bất kỳ cách nào tiện lợi, và thậm chí sử dụng các hàm được mô tả trong các ngôn ngữ khác, như C++ hoặc Python. Chúng ta chắc chắn sẽ thảo luận về tất cả các tính năng này trong các bài viết tương lai.
Nhưng bây giờ hãy bắt đầu với điều đơn giản nhất mà ngôn ngữ MQL5 cho phép chúng ta tạo: chúng ta sẽ tạo một script sẽ được thực thi một lần khi nó được kéo vào biểu đồ bằng chuột. Sử dụng một hàm chuẩn của ngôn ngữ MQL5, trong script này, chúng ta sẽ hiển thị một thông điệp văn bản thông thường cho người dùng trong một bảng chuẩn ở dưới cùng của terminal.
Khởi động và thiết lập IDE
Cuối cùng, chúng ta bắt đầu thực hành! Hiện tại, chúng ta sẽ thực hiện tất cả công việc trong MetaEditor. Nó có thể được khởi động либо bằng phím tắt (từ màn hình desktop hoặc menu Start), hoặc trực tiếp từ terminal MetaTrader bằng một trong các phương pháp được hiển thị trong hình dưới đây (Hình 1).
Hình 1. Ba cách mở MetaEditor: 1 - nút thanh công cụ, 2 - menu, 3 - phím nóng (F4)
Khi cửa sổ trình chỉnh sửa mở ra, tôi khuyên bạn nên ngay lập tức nhập tên người dùng và mật khẩu của bạn từ trang web mql5.com (hoặc nếu bạn chưa đăng ký, hãy làm điều đó). Đăng nhập sẽ cho phép bạn lưu dự án của mình trực tiếp lên máy chủ bằng giải pháp kiểm soát phiên bản tích hợp trong MetaEditor. Không ai sẽ thấy các tệp đã lưu của bạn trừ khi bạn cho phép truy cập, vì vậy việc lưu công việc của bạn trong đám mây MetaQuotes an toàn như việc lưu trữ thông tin trên Internet, và đây là một thói quen tốt (lưu trữ công việc của bạn không chỉ trên máy tính của bạn).
Hình 2. Hộp thoại xác thực MQL5.com
Để mở hộp thoại xác thực, chọn Tools -> Settings trong menu chính của cửa sổ trình chỉnh sửa và điều hướng đến tab Community. Thiết lập này chỉ cần thực hiện một lần. Dữ liệu này sẽ được lưu trong trình chỉnh sửa, và bạn sẽ có thể sử dụng hệ thống kiểm soát phiên bản và các dịch vụ hữu ích khác của MQL5 một cách mượt mà.
Script đầu tiên
Bây giờ… Chỉ cần nhấp chuột phải vào thư mục trong bảng điều khiển bên trái nơi chúng ta muốn tạo script và chọn “New File”. Tùy chọn, bạn có thể nhấn Ctrl
+N
… Trong cửa sổ xuất hiện, chọn Script. Trong cửa sổ tiếp theo, nhập tên tệp.
Hình 3. Các phương pháp tạo tệp mới.
Hình 4. Hộp thoại Wizard tạo tệp - chọn loại chương trình sẽ được tạo.
Hình 5. Hộp thoại Wizard tạo tệp - nhập tên của chương trình sẽ được tạo.
Kết quả là, bạn nhận được một cửa sổ mới với nội dung sau:
//+------------------------------------------------------------------+
//| HelloWorld.mq5 |
//| Oleg Fedorov (aka certain) |
//| mailto:[email protected] |
//+------------------------------------------------------------------+
#property copyright "Oleg Fedorov (aka certain)"
#property link "mailto:[email protected]"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
}
//+------------------------------------------------------------------+
Ví dụ 1. Mẫu script được tạo bởi Wizard.
Có vẻ không có gì phức tạp, chỉ 17 dòng mã.
Hãy xem chính xác những gì được viết ở đây.
- Đầu tiên, có một số dòng ở đầu, bắt đầu bằng ký tự gạch chéo đôi (
//
). Các dòng tương tự cũng xuất hiện ở giữa chương trình.
Đây là comments
. Chúng được viết cho con người, vì vậy trình biên dịch sẽ bỏ qua chúng khi tạo bytecode. Các chú thích bắt đầu bằng gạch chéo đôi được gọi là single-line comments
. Chúng được đặt ở cuối dòng
. Quy tắc rất đơn giản: mọi thứ trước
gạch chéo đôi sẽ được trình biên dịch coi là mã
, và mọi thứ sau
gạch chéo đôi là văn bản cho con người
.
Trong mẫu được tạo bởi wizard này, mã “trước” không cần thiết trong ngữ cảnh này.
Trong MetaEditor, bạn có thể nhanh chóng chú thích vài dòng
: chọn chúng và nhấn phím tắt Ctrl
+'** (Ctrl + dấu nháy đơn). Để **
bỏ chú thích** các dòng như vậy, chọn lại chúng và nhấn phím tắt **
Ctrl**+**
;`.
Cũng có các chú thích multi-line
. Chúng bắt đầu bằng ký tự /*
và kết thúc bằng chuỗi ngược lại */
. Các chú thích nhiều dòng có thể được chèn vào bất kỳ đâu trong mã nơi khoảng trắng được chấp nhận. Khi biên dịch, trình biên dịch cũng sẽ “xóa” các chuỗi như vậy trước, và chỉ sau đó mới cố gắng tìm hiểu ý định của tác giả.
Trong thực tế, các chú thích hiếm khi được chèn vào giữa mã. Thường thì điều đó đơn giản là không tiện. Tuy nhiên, chúng rất hữu ích trong việc chú thích các khối mã lớn không cần thiết hoặc mô tả tiêu đề hàm.
Dưới đây là cách tiêu đề của tệp này có thể
trông như thế nào nếu chúng ta sử dụng chú thích nhiều dòng (nếu tôi tự viết mã thay vì để MetaEditor Wizard tạo ra):
/*
HelloWorld.mq5
Oleg Fedorov (aka certain)
mailto:[email protected]
*/
Ví dụ 2. Chú thích nhiều dòng.
Hoặc như thế này:
/*******************************************************************
* HelloWorld.mq5 *
* Oleg Fedorov (aka certain) *
* mailto:[email protected] *
******************************************************************/
Ví dụ 3. Chú thích nhiều dòng được trang trí.
Nói chung, có thể có bất kỳ
văn bản nào bằng bất kỳ ngôn ngữ nào giữa
các ký tự /* và */ hoặc sau
//. Tôi nói rằng bằng bất kỳ ngôn ngữ nào vì các trình chỉnh sửa hiện đại hỗ trợ đầy đủ mã hóa Unicode. Tuy nhiên, vẫn nên sử dụng tiếng Anh, vì điều này tiết kiệm thời gian chuyển đổi ngôn ngữ (rất cần thiết trong các dự án lớn).
- Khối thú vị thứ hai bao gồm các dòng bắt đầu bằng
#
. Trong tệp này, các từ đầu tiên của mỗi dòng trong khối này là#property
.
Nói chung, mọi từ bắt đầu bằng dấu thăng là một preprocessor directive
. Trình biên dịch không chỉ phải xóa tất cả các chú thích trước khi chuyển đổi văn bản thành mã máy. Nó còn phải thực hiện các công việc chuẩn bị khác. Thường có khá nhiều công việc chuẩn bị vì trong các dự án lớn, cần phải lắp ráp giải pháp cuối cùng từ nhiều tệp, định nghĩa một số dữ liệu (ví dụ, hằng số như số Pi
hoặc tương tự, mặc dù có những trường hợp phức tạp hơn), v.v. Chúng ta sẽ xem xét tất cả các chỉ thị này sau.
Hiện tại, để hiểu mã kết quả, chúng ta cần biết rằng chỉ thị #property
mô tả một số thuộc tính của chương trình kết quả. Thường thì, các thuộc tính này ảnh hưởng đến cửa sổ ban đầu, xuất hiện ngay sau khi người dùng khởi động chương trình của chúng ta bằng cách kéo biểu tượng của nó vào biểu đồ.
Để minh họa điều này, hãy thêm một dòng nữa vào mã:
#property copyright "Oleg Fedorov (aka certain)"
#property link "mailto:[email protected]"
#property version "1.00"
#property script_show_inputs
Ví dụ 4. Thêm thuộc tính script_show_inputs
.
Dòng này sẽ cho phép hiển thị cửa sổ đầu vào, và chỉ sau đó bắt đầu thực thi mã chính. Nếu dòng này không có, script sẽ bắt đầu thực thi ngay lập tức mà không hiển thị bất kỳ thông điệp nào. Nếu có bất kỳ đầu vào nào, script sẽ sử dụng các giá trị mặc định.
Vì vậy, sau khi viết dòng cần thiết vào vị trí mong muốn trong tệp (ngay sau thuộc tính version
), chúng ta sẽ chạy lần biên dịch đầu tiên của chương trình.
Chọn một trong các phương pháp được hiển thị trong hình (ví dụ, nhấn phím F7
).
Hình 6. Một số cách biên dịch chương trình.
Chờ vài giây. Xong - chương trình đã được biên dịch (Hình 7).
Hình 7. Kết quả biên dịch. Trong trường hợp này, biên dịch thành công (0 lỗi). Mất 527 mili giây và tạo bytecode cho bộ xử lý 64-bit.
Hình 9 cho thấy việc biên dịch đã thành công. Nếu có lỗi trong tệp văn bản, các thông điệp về chúng sẽ xuất hiện trong cùng cửa sổ.
Sau khi biên dịch, biểu tượng script sẽ tự động xuất hiện trong danh sách các script trong terminal giao dịch của bạn. Để chuyển sang terminal, bạn có thể, ví dụ, nhấn phím F4
trong trình chỉnh sửa. Điều này sẽ tiết kiệm một chút thời gian.
Kéo script vào biểu đồ bằng chuột và xem cửa sổ thuộc tính.
Hình 8. Cửa sổ đầu vào của script.
(1) Biểu tượng của script đang chạy được hiển thị ở góc trên bên phải của cửa sổ chính.
(2) Tab Common hiển thị việc sử dụng các thuộc tính được mô tả bằng chỉ thị #property.
(3) MetaEditor đã thêm các tham số bổ sung vào địa chỉ được chỉ định trong thuộc tính link
.
Có lẽ điều này cho thấy khách truy cập đến từ đâu nếu chúng ta sử dụng liên kết website.
Hãy đóng cửa sổ, quay lại trình chỉnh sửa và cố gắng hướng dẫn script làm điều gì đó hữu ích, ví dụ, hiển thị một thông điệp cho người dùng.
Để làm điều này, chú thích dòng hiển thị cửa sổ tham số (chúng ta chưa có gì để thay đổi) và thêm một dòng khác ghi thông điệp:
//+------------------------------------------------------------------+
//| HelloWorld.mq5 |
//| Oleg Fedorov (aka certain) |
//| mailto:[email protected] |
//+------------------------------------------------------------------+
#property copyright "Oleg Fedorov (aka certain)"
#property link "mailto:[email protected]"
#property version "1.00"
//#property script_show_inputs
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
Print("Hello, MQL5 world!");
}
//+------------------------------------------------------------------+
Ví dụ 5. Script in một chuỗi vào nhật ký người dùng.
- Chú ý đến các từ được định sẵn.
Trong mã này, các từ được định sẵn là #property
, copyright
, link
, version
, void
, OnStart
, và Print
. Hãy thử nhấp vào bất kỳ từ nào trong số chúng trong MetaEditor và nhấn F1
để mở trợ giúp tích hợp.
- Bên trong hàm
OnStart
được tạo bởi wizard, chúng ta đãgọi
một hàm chuẩn khácPrint
. Sử dụngtham số
(chúng cũng được gọi làđối số
) được liệt kê trong dấu ngoặc, chúng ta thông báo cho hàm Print chính xác nó nên in gì.
Trong Ví dụ 5, hàm Print
chỉ nhận một đối số: văn bản được viết trong dấu ngoặc kép. Trong trường hợp chung, có thể có nhiều đối số như vậy. Ví dụ, hàm Print
này có thể được gọi với bất kỳ số lượng tham số nào (tối đa 64).
Nếu một hàm cần nhận nhiều tham số, các tham số này nên được phân tách bằng dấu phẩy, như trong Ví dụ 6:
Print("Hello, MQL5 World!", " Tôi đã viết chương trình của riêng mình. ", "Hooray!");
Ví dụ 6. Hàm nhận ba tham số
Sau mỗi dấu phẩy phân tách các tham số, bạn có thể thêm ký tự xuống dòng (sử dụng phím Enter
), để không bị nhầm lẫn trong các dấu ngoặc kép.
Cũng chú ý đến khoảng trắng
bên trong đối số thứ hai. Hàm Print “gộp” các đối số của nó thành một dòng lớn, vì vậy lập trình viên phải tự xử lý tất cả dấu câu và các ký tự phân tách bổ sung giữa các từ.
Hàm OnStart
được thực thi tự động, một lần, khi script
hoặc service
khởi động.
Chúng ta biên dịch và chạy script theo cách đã biết.
Hình 9. Hành động hữu ích đầu tiên: xuất một chuỗi vào nhật ký.
Kết luận
Expert Advisors và các chỉ báo cũng có các hàm được định sẵn nhưng với tên khác nhau. Nguyên tắc hoạt động của chúng giống như các hàm script: mã của chúng ta chủ yếu được viết bên trong, và các thuộc tính được viết bên ngoài. Nhưng cũng có những khác biệt.
Ví dụ, một số hàm trong Expert Advisors và chỉ báo được terminal thực thi trên mỗi tick
, chứ không chỉ một lần như OnStart
.
Do đó, tôi đề nghị những ai muốn kiểm tra những gì đã học từ bài viết (và để ôn lại kiến thức) tự thực hiện một chút “nghiên cứu tại nhà”:
- Sử dụng Wizard tạo tệp để tạo tất cả các loại chương trình khác không được đề cập trong các ví dụ của bài viết này.
- Xem xét liệu sử dụng các công cụ được mô tả trong bài viết, bạn có thể tìm ra hàm nào được gọi và thứ tự gọi của chúng khi mỗi loại chương trình khởi động không.
- Là một nhiệm vụ bổ sung, bạn có thể kiểm tra điều gì sẽ xảy ra nếu:
- bạn thêm hàm
OnStart
vào các chỉ báo và Expert Advisors - bạn thêm các hàm mà wizard tạo cho các loại chương trình khác vào script và dịch vụ
- bạn thêm hàm
Có lẽ những nghiên cứu này sẽ mang lại cho bạn những ý tưởng mới và giúp bạn hiểu rõ hơn cách các chương trình trong ngôn ngữ MQL5 hoạt động chính xác.
Chúc bạn may mắn. Hẹn gặp lại trong các bài viết tiếp theo!