[FX581 Original] "Hố" của kỹ năng phát triển MT4 ghi lại lịch sử

Chỉ số MT4, nhóm thảo luận EA
fx58

Chúng ta thường gặp phải nhu cầu đếm số bàn tay trong hồ sơ giao dịch lịch sử hoặc để lấy thông tin về lệnh giao dịch lịch sử cuối cùng. Một chức năng như vậy không khó đối với chúng tôi, đây là một ví dụ mã đơn giản:

lô kép = 0;

for(int i=0;i < OrderHistoryTotal();i++)

{

 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == false) tiếp tục;

   lot += OrderLots();

}

Print("Toan lot:",lot);

Mã này là để đếm tất cả các số lô lịch sử thông qua vòng lặp. Trên thực tế, mã này chỉ để thay đổi mã lặp lại tất cả các đơn đặt hàng hiện có. Thay đổi hàm OrderTotal() thành OrderHistoryTotal() và thêm tham số vào hàm OrderSelect: MODE_HISTORY. Vì vậy, có một vấn đề với một chương trình đơn giản như vậy? Câu trả lời là có.

Hãy chạy chương trình EA này, kết quả hiển thị trong terminal là:

Tổng số bàn tay thực sự là 0! Thật không thể tin được, rõ ràng là tôi có rất nhiều hồ sơ giao dịch.

Bây giờ chúng ta hãy thực hiện một số thao tác với trình soạn thảo, sau đó chạy chương trình để xem kết quả cuối cùng là gì

Nhấp chuột phải vào lịch sử tài khoản, chọn tất cả các bản ghi giao dịch và bây giờ tất cả các bản ghi lịch sử của các giao dịch trước đó xuất hiện trong lịch sử tài khoản

Sau đó, chúng tôi chạy chương trình EA và dùng thử, và kết quả sẽ bình thường:

Đây là một “lỗ hổng” trong việc lấy lịch sử thông qua chương trình, trong MT4 mặc định phần mềm sẽ chỉ hiển thị lịch sử của tháng hiện tại, và chương trình chỉ tìm kiếm dựa trên lịch sử hiện tại của phần mềm khi lấy lịch sử. hồ sơ.Vì tôi không có Thực hiện bất kỳ giao dịch nào, nên khi bạn đếm tổng số tay, bạn nhận được 0 và nếu tất cả các bản ghi giao dịch được hiển thị trong phần mềm, thì cuối cùng chương trình có thể hoạt động bình thường.

Lý do tại sao chúng tôi hiếm khi phát hiện ra vấn đề này là do tính kịp thời của các tài khoản demo trên nền tảng MT4 nói chung là rất ngắn, sau khi đăng ký tài khoản demo sẽ hết hạn sớm nên rất ít người có thể phát hiện ra vấn đề này. Do đó, điều rất quan trọng là phải có một nền tảng có thể mở tài khoản mô phỏng dài hạn. Chúng tôi khuyên bạn nên sử dụng nền tảng xxx, nền tảng này có thể cung cấp tài khoản mô phỏng trong tối đa xx ngày.

Bản thân người dùng mô phỏng lâu dài rất hữu ích để chúng tôi phát triển và thử nghiệm các chương trình EA. Như chúng ta đã biết, việc sử dụng mô phỏng lịch sử sau khi phát triển một chương trình EA mới là chưa đủ. bài kiểm tra sẽ hết hạn trong vài ngày nữa, nó sẽ như thế này. Rất phiền phức cho việc phát triển EA.

Cái "hố" thứ hai về bản ghi lịch sử này là muốn lấy bản ghi lịch sử thì chỉ có thể dùng chương trình EA mới lấy được, nếu viết chương trình kịch bản thì không lấy được bản ghi lịch sử, thậm chí nếu chúng tôi đã hiển thị nó trong lịch sử tài khoản.tất cả hồ sơ.

Vậy làm thế nào chúng ta có thể tránh được vấn đề này? Bởi vì khách hàng không nhận thức được vấn đề này khi sử dụng chương trình EA của chúng tôi, nếu khách hàng không biết hoặc hoàn toàn không làm điều này, làm thế nào chúng tôi có thể tránh được vấn đề này trong chương trình? Một cách tương đối đơn giản là lưu trữ tất cả các bản ghi đơn hàng trong một tệp trong quá trình chạy chương trình EA của bạn để có thể lấy được thông tin bản ghi lịch sử ngay cả khi khách hàng không thực hiện bất kỳ thao tác nào. Sau đây là một ví dụ mã đơn giản để lưu tệp :

//content là nội dung được lưu trữ

void setfile(nội dung chuỗi)

{

   string filename = "Tên file cần lưu trữ";

   int filehandle = FileOpen(filename,FILE_WRITE|FILE_TXT);//Nó cũng có thể được lưu dưới dạng tệp CSV và thay thế FILE_TXT bằng FILE_CSV để có thể lưu trữ nhiều mẩu thông tin

   if(filehandle == INVALID_HANDLE) // đánh giá xem có lỗi khi đọc tệp không

   {

      FileClose(filehandle);

      Print("Có lỗi khi lưu file");

   }

   other//Mở bình thường, bạn có thể viết nội dung

   {

      FileWriteString(xử lý tệp, nội dung);

      FileClose(filehandle);

   }

}

Qua các cách trên chắc hẳn mọi người đã hiểu và chương trình của chúng ta sẽ ngày càng hoàn thiện và phát triển mạnh mẽ hơn trong tương lai.

Bản quyền thuộc về tác giả

Cập nhật cuối cùng vào: 08:10 24/08/2023

18 tán thành
33 bình luận
Thêm
Xem bản gốc
Đề xuất cho bạn
App Store Android

Tuyên bố rủi ro

Hoạt động giao dịch công cụ tài chính có rủi ro cao, có thể khiến bạn lỗ bộ phận hoặc toàn bộ tiền đầu tư, không thích hợp cho tất cả nhà đầu tư. Tất cả thông tin trên Trang web này bao gồm ý kiến, trò chuyện, thông tin, tin tức, nghiên cứu, phân tích, báo giá, hoặc các thông tin khác chỉ được coi là thông tin của thị trường chung, và chỉ được sử dụng vì mục đích giáo dục và giải trí, không tạo thành lời khuyên đầu tư. Những thông tin này đều có thể thay đổi vào bất bứ lúc nào, và không cần thông báo trước. Trading.live sẽ không chịu trách nhiệm về bất kỳ tổn thất hoặc thiệt hại nào được phát sinh trực tiếp hoặc gián tiếp từ việc sử dụng thông tin này.

© 2024 Tradinglive Limited. All Rights Reserved.