MQL Thực tế. Algo Trader pt. Tôi [khóa học lập trình]
Trong phần hôm nay, chúng ta sẽ bắt đầu làm việc trên phần mềm cho phép bạn tận dụng các cơ hội do giao dịch theo thuật toán mang lại trong khi vẫn duy trì khả năng kiểm soát tối đa đối với diễn biến của các sự kiện. Chúng tôi sẽ tập trung vào các ý tưởng cho phép bạn tham gia vào giao dịch thực tế bằng cách tối đa hóa tính trực quan của việc sử dụng và tính linh hoạt của các chức năng. Trong phần mềm, chúng tôi sẽ sử dụng một giao diện có hình thức được nhiều người coi là tiêu chuẩn trong ngành giao dịch trong ngày và thường được gọi là thang giá.
kế hoạch dự án
Chúng tôi sẽ chia công việc thành nhiều giai đoạn, bởi vì ngoài việc xử lý lệnh mở rộng, Algo Trader sẽ cho phép bạn chạy các thuật toán tự động quản lý vị thế theo các kết hợp khác nhau mà bạn có thể tạo tùy thuộc vào tình huống bạn gặp phải trên thị trường.
Trong phần hôm nay, chúng ta sẽ bước bước đầu tiên vào thế giới lập trình hướng đối tượng và khởi chạy phần cơ bản của dự án liên quan đến giao diện và hỗ trợ cho các hoạt động cơ bản.
Trong các tập tiếp theo, chúng ta sẽ bắt tay vào thực hiện những thuật toán đầu tiên. Khi bắt đầu, chúng tôi sẽ tạo một thuật toán GTP để đảm bảo rằng vị thế sẽ đóng với lợi nhuận dự kiến, bất kể vị thế đó bao gồm bao nhiêu đơn hàng. Tiếp theo, chúng tôi sẽ tạo một thuật toán OOO (Chính xác là cái này mở cái kia, chưa từng có cái nào trước đây) và cuối cùng là một thuật toán cho phép mở rộng quy mô trong khi trình bày dữ liệu vĩ mô quan trọng. Cùng với các thuật toán, ở đây và ở đó, chúng tôi sẽ thêm một số tiện ích hay.
nền kỹ thuật
Bạn có thể tìm thấy gói chứa các tệp cần thiết cho ngày hôm nay tại liên kết này:
Việc sử dụng phần mềm đồng nghĩa với việc chấp nhận giấy phép được đính kèm với bộ tệp.
Để phần mềm hoạt động bình thường, bạn cần phiên bản Microsoft NET Framework tối thiểu. 4.6.1 Thời gian chạy có thể tải xuống tại đây:
lập trình hướng đối tượng
Chúng tôi sẽ tạo phần mềm của chúng tôi bằng cách sử dụng lập trình hướng đối tượng, tức là một phương pháp lập trình cho phép sắp xếp logic các đoạn thuật toán trong cái gọi là các đối tượng có nhiệm vụ thực hiện các chức năng biệt lập và giao tiếp với các đối tượng khác để thực hiện toàn bộ nhiệm vụ của chương trình. Để đi xa hơn, chúng ta sẽ cần hiểu các đối tượng trong thực tế là gì và chúng được tạo ra như thế nào. Với mục đích này, hãy xem bài viết sau trong Wikibooks, sử dụng ví dụ về ngôn ngữ C ++ mà MQL4 dựa trên, cho phép bạn hiểu những điều cơ bản cần thiết.
Lớp học đầu tiên
Như bạn có thể thấy, mọi thứ xoay quanh từ khóa tốt nghiệp lớp XNUMX. Nó cho phép bạn xác định một đối tượng, sau đó chúng ta có thể tạo đối tượng này bằng cách sử dụng từ khóa mới. Mở tệp chứa định nghĩa của một trong các lớp chúng ta sẽ sử dụng hôm nay, tệp ChartOperations.mqhmà bạn sẽ tìm thấy trong danh mục MQL4\Bao gồm\AlgoTrader_v10.
Mỗi lớp có một hàm tạo, trong thực tế, hàm này được gọi tự động khi đối tượng được tạo. Hàm tạo có cùng tên với đối tượng và có thể nhận các tham số. Trong đoạn mã của chúng tôi ở trên, chúng tôi tạo hàm tạo như sau:
Sau khi tạo hàm tạo, chúng ta có thể định nghĩa các thành viên của lớp, tức là hàm và biến. Chúng được định nghĩa chính xác như trong trường hợp các hàm và biến thông thường, ngoại trừ việc chúng được định nghĩa trong phần thân của lớp. Chú ý đến các từ khóa công khai: oraz riêng tư:. Tất cả các hàm và biến xuất hiện sau từ công khai: sẽ có sẵn cho các chức năng trong các phần khác của phần mềm, ví dụ: chức năng API onTick() hoặc các đối tượng khác. Riêng thay vào đó, nó thông báo cho trình biên dịch rằng các phần tử được xác định trong phần này là hoàn toàn bí mật và không ai, ngoại trừ đối tượng đã cho, một cách tự nhiên, có thể truy cập vào chúng.
Ứng dụng của đồ vật
Điều gì làm cho các đối tượng rất hữu ích? Trong số những thứ khác, thực tế là một đối tượng sau khi được xác định có thể được tạo với số lượng bản sao bất kỳ và tùy thuộc vào các tham số được truyền cho chúng, chúng sẽ hoạt động khác nhau, nhưng theo cách mà chúng tôi có thể phân tích và kiểm soát. Ngoài ra, các đối tượng cho phép tổ chức mã rõ ràng bằng cách chia nhỏ các thành phần của thuật toán thành các phần tử riêng biệt và đối tượng được thiết kế phù hợp có thể được sử dụng trong phần mềm hoàn toàn khác, cho phép bạn tạo các ứng dụng phức tạp hiệu quả hơn.
Chúng tôi chạy đối tượng đầu tiên
Hãy chuyển đến tệp chính của phần mềm của chúng tôi, tệp AlgoTrader_v10.mq4mà bạn sẽ tìm thấy trong danh mục MQL4\Chuyên gia\.
Hãy cùng xem qua định nghĩa hàm API bên dưới onInit():
Pointer
Trong phần của tệp chịu trách nhiệm xác định các biến toàn cục bằng đoạn mã ...
... chúng tôi tạo ra cái gọi là con trỏ nghĩa là, một con trỏ sẽ chứa địa chỉ đến vị trí trong bộ nhớ của máy tính, nơi đối tượng của chúng ta sẽ được tạo sau này. Sử dụng một con trỏ, chúng ta sẽ có thể tham chiếu đến một đối tượng và gọi các chức năng của nó. con trỏ ta định nghĩa tương tự đối với biến, phần tử đầu tiên của ký hiệu là kiểu đối tượng, sau đó ta đặt dấu hoa thị * , sau đó chúng tôi đặt một tên duy nhất cho đối tượng, mà sau này chúng tôi sẽ sử dụng để tham khảo. Để chúng tôi con trỏ chúng tôi chỉ định một biến NULLnói rằng ở giai đoạn này, nó chưa trỏ đến bất kỳ đối tượng nào.
người xây dựng
Sau đó trong mã, trong phần thân của hàm onInit() chúng tôi tạo đúng đối tượng bằng cách sử dụng từ khóa mới.
Po mới chúng tôi gọi hàm tạo của đối tượng, trong trường hợp của chúng tôi chấp nhận hai biến thông báo cho đối tượng về kích thước của biểu đồ của chúng tôi, vì chúng tôi cần nó để định vị đúng giao diện của chúng tôi. Hàm tạo được gọi chuyển địa chỉ của đối tượng mới được tạo trong bộ nhớ của máy tính cho chúng ta con trỏ đặt tên Biểu đồHoạt động.
Kẻ hủy diệt
Các đối tượng là một loại dữ liệu đặc biệt mà nếu chúng ta tạo ra chúng, chúng ta phải đảm bảo rằng chúng cuối cùng sẽ bị xóa khỏi bộ nhớ của máy tính. Tất cả điều này để bạn không phải đứng cạnh máy tính xách tay của mình, một máy chủ khổng lồ đang thu thập dữ liệu được tạo trước đó mà không ai cần nữa.
Chúng tôi sử dụng một từ khóa để xóa các đối tượng xóatheo sau là tên của chúng tôi con trỏ cho biết chúng ta muốn nói đến đối tượng nào. Chúng tôi chỉ xóa đối tượng của mình trong hàm API OnDeinit(…)bởi vì chúng tôi cần nó trong suốt vòng đời của ứng dụng cho đến khi tắt phần mềm.
Làm việc với các đối tượng
Bây giờ hãy xem cách chúng ta có thể sử dụng đối tượng đã tạo cho ứng dụng của mình. Với mục đích này trong phần thân của lớp cChartHoạt động chúng tôi đã xác định một số chức năng. Hãy xem xét một trong số họ:
hàm số Trong một cái nhấp chuột(…) chúng tôi cần nó để giao tiếp với giao diện của chúng tôi mức giá nào hiện đang hấp dẫn đối với chúng tôi. Bằng cách nhấp đúp vào biểu đồ, thuật toán sẽ đặt thang giá của chúng tôi ở vị trí được chỉ định. Để chức năng của chúng tôi hoạt động, chúng tôi cần phát hiện thời điểm khi chúng tôi nhấp vào biểu đồ và đây là lúc chức năng API có ích OnChartEvent(…)
Đoạn mã trên ghi nhận thời điểm khi người dùng nhấp vào biểu đồ, sau đó gọi hàm bên trong đối tượng đã tạo trước đó của chúng ta. Gọi hàm bao gồm đặt một dấu chấm sau tên của chúng tôi con trỏ cho đối tượng, sau đó chuyển tên của hàm mà chúng ta quan tâm cùng với các tham số mà nó cần, trong trường hợp của chúng ta có nghĩa là tọa độ x và y của vị trí trên biểu đồ mà bạn đã nhấp vào.
hiệu ứng đầu tiên
Các quy trình chúng tôi tạo đã khởi chạy chức năng đầu tiên của phần mềm, chúng tôi có thể kiểm tra chức năng này bằng cách biên dịch chương trình của mình và nhấp vào các vị trí khác nhau trên biểu đồ. Dưới đây, bạn sẽ tìm thấy một đồ họa trình bày một số chức năng cho phép bạn thao tác các mức giá được hiển thị trong giao diện đồ họa của chúng tôi.
Lớp thứ hai
Vì bạn đã được thăng hạng thứ hai và để việc nhấp chuột của chúng tôi không trở nên vô ích, chúng tôi sẽ thiết kế một cơ sở thứ hai cho phép bạn đặt hàng từ thang của chúng tôi. Vì mục đích này, chúng tôi đã chuẩn bị một lớp thích hợp mà bạn sẽ tìm thấy trong tệp MQL4\Bao gồm\AlgoTrader_v10\OrderOperations.mqh
Trong đoạn mã trên, bạn có thể thấy định nghĩa đầy đủ của đối tượng cHoạt động đặt hàng, sẽ được sử dụng để xử lý các đơn đặt hàng mà chúng tôi sẽ đặt trên thang giá của chúng tôi. Chú ý đến chức năng ProcessOrderRequests()nơi chương trình của chúng tôi giao tiếp với thư viện dll sử dụng chức năng ĐọcOrderRequest().
cấu trúc
hàm số ĐọcOrderRequest() là kết quả của hoạt động của nó, nó trả về một cấu trúc kiểu yêu cầu cũ hơnlà một tập hợp dữ liệu do chúng tôi xác định về đơn hàng được gửi qua giao diện.
Cấu trúc là em gái của các lớp cho phép bạn tạo một khối dữ liệu chứa nhiều biến. Điều này cho phép sắp xếp hợp lý các thông tin liên quan đến một vấn đề nhất định. Trong trường hợp của chúng tôi, cấu trúc thu thập dữ liệu về đơn đặt hàng được gửi qua giao diện đồ họa của chúng tôi, chẳng hạn như giá hoặc khối lượng mở cửa. Chúng tôi xác định một cấu trúc bằng cách đặt trước tên của nó bằng một từ khóa cấu trúc, sau đó chúng tôi lập danh sách dữ liệu chúng tôi cần.
Định nghĩa trên có thể được tìm thấy trong tập tin MQL4\Bao gồm\AlgoTrader_v10\Definitions.mqh.
Chúng ta sử dụng các cấu trúc tương tự như các biến, tức là ở bước đầu tiên chúng ta phải tạo nó bằng cách chỉ định loại cấu trúc, sau đó đặt cho nó một tên duy nhất để chúng ta có thể tham khảo sau này. Trong ví dụ sau, chúng ta đang tạo một cấu trúc kiểu yêu cầu cũ hơn và đặt cho nó một cái tên độc đáo yêu cầu, sau đó chúng tôi gán dữ liệu từ giao diện của mình bằng các hàm ĐọcOrderRequest().
Truy cập vào dữ liệu được lưu trữ trong cấu trúc tương tự như việc sử dụng các biến, bởi vì trong thực tế, cấu trúc chỉ là một tập hợp các biến được ẩn dưới một mã định danh chung. Để đọc hoặc ghi dữ liệu trong cấu trúc, chỉ cần đặt một dấu chấm sau tên mà chúng tôi đã đặt cho nó, sau đó cho biết tên của biến mà chúng tôi quan tâm. Trong đoạn mã bên dưới, chúng tôi đọc dữ liệu được lưu trữ trong cấu trúc để gửi đơn đặt hàng và sau đó chúng tôi lưu thông tin về kết quả của hoạt động.
Thực hiện các đơn đặt hàng
Để phần mềm của chúng tôi có thể đặt hàng, chúng tôi cần triển khai đối tượng được tạo trên cơ sở lớp cHoạt động đặt hàng. Vì chúng tôi sẽ cần đối tượng từ khi bắt đầu chương trình, nên chúng tôi tạo nó trong hàm API onInit().
Trong hàm tạo cHoạt động đặt hàng chúng tôi đặt biến vị trí_idlà một phần của cài đặt ứng dụng của chúng tôi có sẵn trong cửa sổ mặc định của nền tảng MetaTrader. Mã định danh cho phép phần mềm của chúng tôi nhận ra các đơn đặt hàng của chính nó để chúng không bị nhầm lẫn với các đơn đặt hàng từ các nguồn khác.
Trong đoạn mã trên, chúng tôi cũng đã chạy Hẹn giờ với khoảng thời gian 200 ms, vì đối tượng của chúng ta nên kiểm tra định kỳ xem giao diện có đang gửi thông tin về một đơn đặt hàng đến hay không.
hàm đối tượng OnTimer200ms() sẽ gọi hàm ProcessOrderRequests()sẽ đặt hàng khi nhận được dữ liệu thích hợp từ giao diện.
tác
Phần mềm của chúng tôi đã có thể giao tiếp với giao diện đồ họa và chúng tôi có thể làm những gì chúng tôi thích làm nhất, tức là biên dịch thuật toán và đặt hàng mới. Để làm cho các bước đầu tiên của bạn dễ dàng hơn, dưới đây bạn sẽ tìm thấy một số mẹo minh họa những chức năng bị ẩn dưới các phím khác nhau.
Kiểm soát âm lượng
Các loại đơn đặt hàng
phép cộng
Đó là tất cả cho ngày hôm nay, nhưng đó mới chỉ là khởi đầu của cuộc phiêu lưu với thuật toán giao dịch. Trong phần tiếp theo, chúng ta sẽ đi đến việc thực hiện các chức năng nâng cao liên quan đến việc hỗ trợ các thuật toán. Algo Trader sẽ được phát triển cùng với bạn và chúng tôi sẽ biết ơn bất kỳ ý tưởng và nhận xét nào có thể giúp bạn cải thiện Algo Trader. Chúng tôi rất muốn nghe từ bạn tại địa chỉ biuro@expertadvisors.pl .