
Mọi nhà giao dịch mới muốn viết mã trong MQL4 EA nên biết cách sử dụng hàm OrderSend () để đặt lệnh, cho dù đó là lệnh thị trường hay lệnh dừng hoặc lệnh giới hạn đang chờ xử lý. Tìm hiểu cách lập trình EA để đặt hàng trong bài viết về chức năng MQL4 OrderSend này.
Hàm OrderSend() có cú pháp sau:
int OrderSend (chuỗi Ký hiệu, int Type, double Lots, double Price, int Slippage, double StopLoss, double TakeProfit, chuỗi Comment = NULL, int MagicNumber = 0, datetime Hết hạn = 0, col Mũi tên = CLR_NONE);
Để dễ tham khảo, bạn có thể xem mô tả về các tham số trên trong bảng sau:
| Thông số | Mô tả |
|---|---|
| biểu tượng | Các ký hiệu giao dịch, chẳng hạn như EURUSD. Symbol() đại diện cho cặp biểu đồ tiền tệ |
| Loại | Loại lệnh: mua hoặc bán, có thể là giá thị trường, giá dừng lỗ hoặc giá giới hạn. Mỗi loại tương ứng với một giá trị nguyên: < p>OP_BUY – Lệnh thị trường mua (giá trị nguyên 0)OP_SELL – Lệnh thị trường bán (giá trị nguyên 1) OP_BUYSTOP – Lệnh dừng mua (giá trị nguyên 2) OP_SELLSTOP – Lệnh dừng bán (giá trị số nguyên 3) OP_BUYLIMIT – Lệnh giới hạn mua (giá trị số nguyên 4) OP_SELLLIMIT – Lệnh giới hạn bán (giá trị số nguyên 4) Giá trị số nguyên 5 ) |
| Lots | Số lượng Lot được giao dịch. Nếu nhà môi giới của bạn hỗ trợ các lô vi mô, bạn có thể chỉ định các lô vi mô (0,1) hoặc các lô vi mô (0,01). |
| Giá | Giá của đơn hàng. Nói chung, đó là lệnh thị trường mua trong Hỏi và lệnh thị trường bán trong Giá thầu. Đối với các lệnh đang chờ xử lý, giá sẽ ở bất kỳ mức giá hợp lệ nào cao hơn hoặc thấp hơn giá hiện tại. |
| Trượt giá | Điểm trượt tối đa để lệnh được vượt qua. |
| StopLoss | Dừng lỗ, mua dưới giá mở cửa và bán cao hơn giá mở cửa. Nếu được đặt thành 0, lệnh dừng lỗ sẽ không được sử dụng. |
| TakeProfit | Chốt lãi, mua cao hơn giá mở cửa, bán thấp hơn giá mở cửa. Nếu được đặt thành 0, chốt lời sẽ không được sử dụng. |
| Comment | Chuỗi tùy chọn sẽ được sử dụng làm nhận xét đơn hàng. Nhận xét xuất hiện trong cửa sổ terminal dưới tab Giao dịch. Để xem chúng trong thiết bị đầu cuối, bạn có thể nhấp chuột phải vào bất kỳ giao dịch mở hoặc đóng nào và đánh dấu bên cạnh nhận xét trong hộp mở ra. Chúng được sử dụng làm mã định danh đơn hàng. |
| MagicNumber | Đây là một giá trị số nguyên tùy chọn sẽ xác định thứ tự được đặt bởi một EA cụ thể. Chúng tôi khuyên bạn nên sử dụng nó. |
| Hết hạn | Thời gian hết hạn tùy chọn của các lệnh đang chờ xử lý. |
| Mũi tên | Màu có thể lựa chọn cho mũi tên sẽ được vẽ trên biểu đồ, cho biết giá và thời gian mở cửa. Nếu không chỉ định màu, mũi tên sẽ không được vẽ. |
Hàm OrderSend() trả về số phiếu của đơn hàng đã đặt ("vé" là số duy nhất của đơn hàng). Chúng ta có thể lưu các phiếu đặt hàng này vào các biến tĩnh để sử dụng sau này.
Nếu không có đơn hàng nào được đặt, giá trị trả về sẽ là -1 do có lỗi. Điều này cho phép chúng tôi phân tích lỗi và thực hiện hành động thích hợp dựa trên mã lỗi. Để có được thông tin về lý do từ chối yêu cầu giao dịch, bạn nên sử dụng hàm GetLastError().
Lệnh thị trường
< p>Có ba loại lệnh có thể được đặt trong MetaTrader: lệnh thị trường, lệnh dừng lỗ và lệnh giới hạn. Thông thường nhất, lệnh thị trường sẽ mở một vị thế ngay lập tức ở mức giá mua hoặc giá bán gần đây nhất.Đây là ví dụ về lệnh thị trường mua:
Đặt lệnhGửi (Ký hiệu(), OP_BUY, Lô, Hỏi, Trượt giá, Dừng lỗ giá thầu *Điểm, Giá thầu+Nhận lợi nhuận*Điểm, “EAName”, MagicNumber, 0, Xanh lam)
p >
Đây là ví dụ về lệnh thị trường bán:
OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, Ask+StopLoss *Điểm , Hỏi-Chốt lời*Điểm, “EAName”, MagicNumber, 0, Xanh lam)
Hàm Symbol() trả về biểu tượng giao dịch trên biểu đồ hiện tại. Hầu hết chúng ta sẽ đặt lệnh trên biểu tượng giao dịch trên biểu đồ hiện tại. OP_BUY đề cập đến lệnh thị trường mua, giống như OP_SELL đề cập đến lệnh thị trường bán. Hỏi là một biến được xác định trước trong MLQ để lưu trữ giá bán được biết mới nhất (giá chào bán) cho mã hiện tại.
Chúng tôi thường sử dụng các biến bên ngoài để đặt tham số trượt giá (ví dụ: trượt giá bên ngoài = 3). Tham số trượt giá (và các biến tương ứng) đề cập đến số pip mà giá được phép trượt. Nói cách khác, nó thể hiện mức chênh lệch tối đa để một lệnh được thực hiện. Chọn mức độ trượt giá phù hợp có thể là một sự cân bằng tốt: bạn muốn chọn giá trị pip đủ nhỏ để đưa ra mức giá tốt, nhưng đồng thời bạn muốn chọn giá trị pip đủ lớn để không bị báo giá lại và bỏ lỡ bạn giá. Nếu bạn đặt độ trượt giá thành 0, bạn có thể sẽ bị báo giá lại thường xuyên và bạn có thể bỏ lỡ giá của mình. Nếu bạn đặt nó ở mức 3 hoặc 4, bạn sẽ có nhiều khả năng được lấp đầy hơn.
Giới thiệu về quy tắc Cắt lỗ và Chốt lãi cho OB_BUY:
Hỏi – Cắt lỗ = Bạn đặt mức Cắt lỗ xuống dưới (-) Giá bán
Hỏa + TakeProfit = Bạn đặt TakeProfit ở trên (+) Giá bán
< /p>
Giới thiệu về quy tắc dừng lỗ và chốt lãi cho OB_SELL:
Giá thầu + dừng lỗ = bạn đặt mức dừng lỗ cao hơn (+) Giá thầu
Giá thầu – TakeProfit = Bạn đặt TakeProfit dưới (-) Giá thầu
< /p>
Dành cho các quy tắc trên, chúng tôi sử dụng các biến bên ngoài để đặt mức dừng lỗ và chốt lãi, ví dụ:
External int stop loss = 50;< /p>
Int bên ngoài TakeProfit = 100;
Trong ví dụ trên, chúng tôi muốn mức dừng lỗ thấp hơn 50 pip so với lệnh thị trường mua, Chốt lãi nằm ở mức 100 pip bên trên. Tuy nhiên, gần đây, với việc bổ sung các nhà môi giới 5 con số, đã xảy ra vấn đề với cách tính điểm dừng lỗ và điểm chốt lời, như được trình bày trong ghi chú bên dưới.
Trong tham số nhận xét của lệnh mua bán mẫu ở trên (tham số thứ 8 của hàm OrderSend), chúng ta nhập "EAName" , Bạn có thể nhập tên EA của mình vào trường này. Vì vậy, đây là một cách để phân biệt EA của bạn với các EA khác. Trong nền tảng MT4 bên ngoài, nếu bạn nhìn vào thiết bị đầu cuối hiển thị các lệnh mở và đóng của mình, bạn có thể thấy trường cuối cùng hiển thị trường nhận xét. Nếu không thấy nó, bạn có thể nhấp chuột phải vào thiết bị đầu cuối và đánh dấu vào Nhận xét. Nếu bạn sử dụng nhiều EA trên cùng một tài khoản, bạn nên đặt cho mỗi EA một tên khác nhau trong trường nhận xét để khi tất cả EA bắt đầu tạo giao dịch, bạn có thể phân biệt EA nào đã thực hiện giao dịch đó bằng cách xem nhận xét trong trường thiết bị đầu cuối.
Mặc dù trường nhận xét có thể giúp bạn phân biệt trực quan các EA của bạn với nhau nhưng đối với tham số riêng của nó (tham số thứ 9 của hàm OrderSend) Số ma thuật được triển khai giúp chương trình phân biệt các EA của bạn với nhau. Trong tham số này có một giá trị nguyên, ví dụ "1234". Thay vào đó, chúng tôi khuyên bạn nên tạo một "MagicNumber kép bên ngoài = 1234" và đặt biến MagicNumber vào tham số này. Các biến bên ngoài cho phép bạn sửa đổi số ma thuật một cách dễ dàng. Về cơ bản, số ma thuật là một con số duy nhất mà bạn chỉ định cho một đơn hàng để chương trình phân biệt đơn hàng do chuyên gia cố vấn của bạn mở với đơn hàng do chuyên gia cố vấn khác mở.