Gửi tệp lên máy chủ FTP
MetaTrader 5 hỗ trợ gửi tệp lên máy chủ FTP. Để tính năng này hoạt động, bạn phải nhập các chi tiết FTP cần thiết trong hộp thoại cài đặt trên tab FTP: địa chỉ máy chủ FTP, thông tin đăng nhập, mật khẩu và tùy chọn đường dẫn để đặt tệp trên máy chủ. Nếu máy tính của bạn nằm trên mạng của nhà cung cấp dịch vụ Internet không cấp địa chỉ IP công cộng cho bạn, thì có lẽ bạn sẽ cần bật chế độ thụ động.
Việc gửi tệp trực tiếp từ chương trình MQL được hỗ trợ bởi hàm SendFTP
.
bool SendFTP(const string filename, const string path = NULL)
Hàm gửi một tệp với tên được chỉ định lên máy chủ FTP từ cài đặt terminal. Nếu cần, bạn có thể chỉ định một đường dẫn khác với đường dẫn đã được cấu hình trước. Nếu tham số path
không được chỉ định, thư mục được mô tả trong cài đặt sẽ được sử dụng.
Tệp được tải lên phải nằm trong thư mục MQL5/Files
hoặc các thư mục con của nó.
Hàm trả về chỉ báo thành công (true
) hoặc lỗi (false
). Các lỗi tiềm ẩn trong _LastError
bao gồm:
- 4514 — ERR_FTP_SEND_FAILED — không thể gửi tệp qua FTP
- 4519 — ERR_FTP_NOSERVER — máy chủ FTP không được chỉ định
- 4520 — ERR_FTP_NOLOGIN — thông tin đăng nhập FTP không được chỉ định
- 4521 — ERR_FTP_FILE_ERROR — tệp được chỉ định không được tìm thấy trong thư mục MQL5/Files
- 4522 — ERR_FTP_CONNECT_FAILED — xảy ra lỗi khi kết nối với máy chủ FTP
- 4523 — ERR_FTP_CHANGEDIR — thư mục để tải tệp lên không được tìm thấy trên máy chủ FTP
- 4524 — ERR_FTP_CLOSED — kết nối với máy chủ FTP đã bị đóng
Hàm chặn việc thực thi chương trình MQL cho đến khi thao tác hoàn tất. Do đó, hàm không được phép sử dụng trong các chỉ báo.
Ngoài ra, hàm SendFTP
không được thực thi trong trình kiểm tra chiến lược.
Terminal chỉ hỗ trợ gửi một tệp duy nhất lên máy chủ FTP. Tất cả các lệnh FTP khác không khả dụng từ MQL5.
Script ví dụ NetFtp.mq5
chụp ảnh màn hình của biểu đồ hiện tại và cố gắng gửi nó qua FTP.
void OnStart()
{
const string filename = _Symbol + "-" + PeriodToString() + "-"
+ (string)(ulong)TimeTradeServer() + ".png";
PRTF(ChartScreenShot(0, filename, 300, 200));
Print("Sending file: " + filename);
PRTF(SendFTP(filename, "/upload")); // 0 (thành công) hoặc FTP_CONNECT_FAILED(4522), FTP_CHANGEDIR(4523), v.v.
}
2
3
4
5
6
7
8