lập trình
Bạn đang đọc bây giờ
MQL Thực tế. Panic Button Phần I [Khóa học lập trình]
0

MQL Thực tế. Panic Button Phần I [Khóa học lập trình]

tạo Radek SzafronTháng 21 2019

Chào mừng đến với tập thứ hai của MQL Thực tế! Trong phần thứ hai của khóa học, chúng ta sẽ bắt đầu lại với một tờ giấy trắng và từng bước viết một ứng dụng mới. Chúng ta sẽ tìm hiểu về các yếu tố mà mọi lập trình viên sử dụng hàng ngày trong công việc của họ, chẳng hạn như hàm, toán tử logic và vòng lặp, tức là những thứ mà chắc hẳn mỗi bạn đã nghe nói đến nhưng không hoàn toàn biết chúng là gì. May mắn thay, trong loạt bài của chúng tôi, lý thuyết được phục vụ ngon lành và không cường điệu, và chúng tôi tập trung vào điều quan trọng nhất, tức là vào lập trình trong thực tế.

Tuần này chúng tôi sẽ viết phần đầu tiên của ứng dụng Nút hoảng loạntên của ai tôi nghĩ giải thích rất nhiều. Chương trình của chúng tôi, chỉ bằng một nút bấm, sẽ đóng tất cả các vị thế và lệnh đang mở ngay lập tức, khi mồ hôi lạnh toát ra trên trán chúng tôi, thế giới chìm vào im lặng và hình ảnh thu nhỏ lại thành một trường mơ hồ nhỏ với đồng đô la đang tăng tốc nhấp nháy sau một những dòng tweet đáng yêu của một trong những chính trị gia yêu thích của chúng tôi.

Hãy xắn tay áo lên và bật MetaEditor

Hãy bắt đầu bằng cách tạo một tệp loại trống trong trình chỉnh sửa Chuyên gia đặt tên Nút hoảng loạn.mq4. Tệp sẽ nằm trong thư mục MQL4\Chuyên gia. Sau đó, hãy đặt tất cả các tệp chúng tôi cần ngày hôm nay vào các thư mục thích hợp.

hồ sơ "Useful_functions.mqh" nên được đặt trong thư mục MQL4\Include\Panic Button\

hồ sơ "library_panic_button.ex4" nên được đặt trong thư mục MQL4\Libraries\Panic Button\

TẢI XUỐNG BỘ TỆP MQL

Dấu hiệu đầu tiên

Hãy chuyển sang chỉnh sửa mã của ứng dụng của chúng tôi, tức là tệp Nút hoảng loạn.mq4 từ danh mục Các Chuyên gia. Hãy thông báo cho trình biên dịch rằng chúng ta đang sử dụng cú pháp ngôn ngữ MQL4 mới nhất bằng cách gõ:

#bất động sản khắt khe
mã MQL4

ba lần "và"

#include

Sử dụng một từ khóa #include chúng tôi có thể bao gồm các tệp nguồn khác trong mã của mình. Trong file Useful_functions.mqh chúng tôi đã chuẩn bị một chức năng cần thiết trong phần sau:

bool close_positions_and_orders(bool only_this_instrument)

Để chúng tôi sử dụng mã bổ sung, chúng tôi cần thêm mã đó vào tệp của mình bằng cách nhập #include và đường dẫn truy cập. Chính xác như trong hộp dưới đây.

#include "..\\Bao gồm\\Nút hoảng loạn\\Useful_functions.mqh"
mã MQL4

# nhập khẩu

từ khóa # nhập khẩu thay vào đó, nó cho phép chúng tôi sử dụng các thư viện bên ngoài. Thư viện là các thuật toán được biên dịch, riêng biệt để cung cấp các chức năng và tài nguyên của chúng cho các chương trình khác. Dưới đây chúng tôi nhập một thư viện có tên thư viện_panic_button.ex4, chứa các thành phần đồ họa và chức năng cho nút của chúng ta. Giữa các phần tử # nhập khẩu chúng tôi đặt một danh sách các định nghĩa hàm mà thư viện sẽ cung cấp cho chúng tôi.

Việc nhập thư viện chính xác trông như thế này:

# nhập khẩu "Nút hoảng loạn\\panic_button_library.ex4"
làm mất hiệu lực nút_tạo (int x, int y, bool tôi chọn_blue); làm mất hiệu lực Be_alert_button(); bool Button_are_are_clicked(chuỗi tên của môn học); làm mất hiệu lực button_bye_bye();
# nhập khẩu
mã MQL4

đầu vào

Sau khi thêm các tệp và thư viện nguồn, chúng ta có thể chuyển sang tạo các chức năng của chương trình. Hãy bắt đầu bằng cách thêm dòng sau:

đầu vào bool Only_this_instrument = sai;
mã MQL4

Yếu tố đầu vào thông báo cho trình biên dịch rằng chúng tôi đang tạo một tham số sẽ có sẵn trong cửa sổ cài đặt ứng dụng và giá trị của nó sẽ phụ thuộc vào lựa chọn của người dùng. Tham số chúng ta tạo nhận một giá trị kiểu rượu, czyli đúng lub sai. Chúng tôi đặt tên cho anh ấy Only_this_instrument và sử dụng tên này, chúng tôi sẽ có thể đề cập đến giá trị của nó trong tương lai, giá trị này sẽ được sử dụng để quyết định đóng tất cả các vị trí hay chỉ vị trí của công cụ mà chương trình của chúng tôi đang chạy.

chức năng đầu tiên

Hãy thêm đoạn mã sau vào tệp của chúng tôi:

int onInit()
{
trở lại INIT_SUCCEEDED;
}
mã MQL4

Ký hiệu trên có nghĩa là chúng ta đang tạo một hàm gọi là onInitsẽ trả về giá trị loại int, tức là số nguyên. Hàm trả về giá trị bằng cách sử dụng từ khóa trở lại.

Chúng tôi đã đề cập rằng sử dụng từ trở lại hàm của chúng ta trả về giá trị là số nguyên. Vậy kỷ lục bí mật là gì INIT_SUCCEEDED ? Để thuận tiện cho chúng tôi, có nhiều giá trị được xác định tự động cho i trong ngôn ngữ INIT_SUCCEEDED chỉ là một trong số họ. Dưới tên của nó có một số nguyên được trình biên dịch biết đến và được hiểu là "mọi thứ đều ổn".

hàm số onInit() là một phần của MQL API, tức là một chức năng có sẵn trong ngôn ngữ. Các hàm MQL API được đánh dấu trong mã trên màu tím. Khi ứng dụng khởi động, thuật toán của chúng ta sẽ tự động gọi hàm onInit() và nó sẽ chỉ làm điều đó một lần, ngay từ đầu, để cho phép chúng tôi thực hiện các hoạt động cần thiết để chương trình của chúng tôi chạy và hoạt động.

nội dung chức năng

Giữa các dấu ngoặc nhọn của mỗi hàm, chúng tôi viết các hướng dẫn mà hàm đã cho sẽ thực thi. chức năng của chúng tôi onInit() đã chứa một hướng dẫn - trở lại INIT_SUCCEEDED;

Hãy mở rộng chức năng onInit(), hãy nhớ rằng mã trở lại INIT_SUCCEEDED; luôn ở dưới cùng của hàm vì chúng tôi chỉ muốn gọi nó khi tất cả các câu lệnh khác thực thi thành công.

toán tử if có điều kiện

if(isDemo() == sai)
{
 
trở lại INIT_FAILED;
 
}
mã MQL4

Đoạn mã trên, sử dụng toán tử điều kiện if, kiểm tra xem môi trường cho các thử nghiệm của chúng tôi có an toàn hay không và chúng tôi làm việc trên tài khoản demo.

thiết kế nhà điều hành if luôn rất giống nhau. Viết giữa các dấu ngoặc sau toán tử, tức là viết isDemo() == sai được gọi là biểu thức điều kiện. Đó là một biểu thức logic có thể trả về một trong hai giá trị - đúng lub sai. Khi một biểu thức điều kiện trả về một giá trị đúng sau đó mã giữa các dấu ngoặc đứng ngay sau toán tử sẽ được thực thi if.

Ký hiệu == trong một biểu thức điều kiện hỏi xem giá trị bên trái của nó có bằng giá trị bên phải của nó hay không. Bởi vì chức năng isDemo() sẽ trả về một giá trị saikhi chúng tôi chạy chương trình trên một tài khoản trực tiếp, toàn bộ biểu thức điều kiện của chúng tôi sẽ trả về một giá trị đúngvì giá trị bên trái của ký hiệu == sẽ tương ứng với giá trị bên phải. Khi biểu thức điều kiện được đáp ứng, mã giữa các dấu ngoặc nhọn của toán tử sẽ được thực thi if và chương trình sẽ trả về thông tin về lỗi sử dụng toán tử trở lại và giá trị được tạo tự động dưới tên INIT_FAILED.


chuyên gia tư vấn


Chúng tôi vẽ một nút

Chúng tôi sẽ vẽ nút của chúng tôi bằng một chức năng nút_tạo (int x, int y, bool tôi chọn_blue)đến từ thư viện đã nhập trước đó. Hàm nhận hai tham số kiểu dữ liệu int (số nguyên) có tên x oraz yđóng vai trò là tọa độ của vị trí nút trên biểu đồ so với góc trên cùng bên phải của cửa sổ.

Ngoài ra, hàm nhận một tham số kiểu bool (đúng lub sai) có tên tôi chọn màu xanh. Vì ứng dụng của chúng tôi sẽ có thể hoạt động ở hai chế độ, cho toàn bộ tài khoản hoặc cho một công cụ, nên nút của chúng tôi sẽ có màu phù hợp tùy thuộc vào cài đặt đã chọn.

Chúng tôi thích ify

Hãy thiết lập rằng chúng tôi muốn nút có màu xanh lam khi nó hoạt động ở chế độ một công cụ và màu đỏ cho toàn bộ tài khoản. Chúng ta có thể tô màu cho nút bằng cách thêm câu lệnh sau vào hàm onInit():

bool màu xanh = sai;
if(Only_this_instrument == đúng)
{
 
màu xanh = đúng;
}
mã MQL4

Để thuật toán xác định màu cho nút, đầu tiên ta xác định một biến bool đặt tên màu xanh và gán giá trị cho nó sai. Sau đó, chúng tôi sử dụng toán tử điều kiện ifkiểm tra xem tham số cài đặt ứng dụng Only_this_instrument đã được người dùng đặt thành một giá trị đúng. Nếu vậy, mã đặt giá trị của biến được chạy màu xanh  cũng trên đúng. biến đã chuẩn bị màu xanh chúng tôi có thể phục vụ các chức năng button_create(..) thêm dòng mã sau vào chức năng onInit().

nút_tạo (5, 15, màu xanh da trời);
mã MQL4

Tính năng cuối cùng (cho ngày hôm nay)

Khi chương trình kết thúc hoạt động hoặc có gì đó thay đổi trong cài đặt, hàm MQL API sẽ được gọi làm mất hiệu lực onDeinit(const int lý do).

Sử dụng chức năng onDeinit() chúng tôi thực hiện các hoạt động cần thiết để hoàn thành đúng chương trình. Trong trường hợp của chúng tôi, sau khi tắt thuật toán, cần phải xóa nút bằng chức năng đã nhập trước đó từ thư viện button_bye_bye().

làm mất hiệu lực onDeinit(const int lý do)
{
 
button_bye_bye();
 
}
mã MQL4

Lưu ý rằng có một từ phía trước tên hàm làm mất hiệu lực. Điều đó có nghĩa là hàm của chúng ta sẽ không trả về bất kỳ giá trị nào.

Chúng tôi thêm dấu chấm phẩy, xoa tay và nhấn biên dịch

Sau khi biên dịch thành công, đoạn mã chúng ta viết hôm nay sẽ vẽ một nút trên biểu đồ và cung cấp cho nó hình thức phù hợp tùy thuộc vào cấu hình do người dùng nhập trong cửa sổ cài đặt. Xin chúc mừng, chúng tôi đã hoàn thành giai đoạn đầu tiên tạo ứng dụng của mình, chúng tôi đã tạo giao diện người dùng.

Tuần tới, chúng tôi sẽ mở rộng chương trình của mình để xử lý các đơn đặt hàng và thêm một số tiện ích thú vị.

TẢI XUỐNG BỘ TỆP MQL

Bạn nghĩ sao?
tôi thích
0%
Thú vị
100%
Heh ...
0%
Sốc!
0%
Tôi không thích
0%
Thương xót
0%
Thông tin về các Tác giả
Radek Szafron
Tác giả của ấn phẩm là Radek Szafron, chủ sở hữu của Expert Advisors, công ty đã hỗ trợ các nhà đầu tư trong nhiều năm bằng cách cung cấp các công nghệ dành riêng cho thị trường FOREX. Tác giả tốt nghiệp ngành tài chính tại Trường Kinh tế Warsaw với chuyên ngành "Thị trường tài chính" và là một lập trình viên với gần 20 năm kinh nghiệm. Công ty thực hiện các dự án về thuật toán và ứng dụng được viết bằng tất cả các ngôn ngữ thuộc họ "C", bao gồm nền tảng phổ biến Meta Trader 4 và 5. Bạn có thể tìm thấy Expert Advisors tại www.expertadvisors.pl.