English
中文
日本語
ID
Vietnam
한국어
Filipino
 
   学院导航

外汇MQL4中订单买卖Send函数如何使用

MQL4 OrderSend Function

每个想要在 MQL4 EA 中编写代码的新交易者都应该了解如何使用 OrderSend () 函数来下订单,无论它们是市价订单还是挂起的止损或限价订单。 在这篇 MQL4 OrderSend 函数文章中了解如何对 EA 进行编程以下订单。


OrderSend() 函数具有以下语法:


int OrderSend (string Symbol, int Type, double Lots, double Price, int Slippage, double StopLoss, double TakeProfit, string Comment = NULL, int MagicNumber = 0, datetime Expiration = 0, col Arrow = CLR_NONE);


为了便于参考,可以在下表中找到上述参数的说明:

Parameters描述
symbol交易符号,例如 EURUSD。 Symbol() 代表货币图表的对
Type

下单类型:买入或卖出,可以是市价、止损或限价每种类型对应一个整数值:

OP_BUY – 买入市价单(整数值 0)

OP_SELL- 卖出市价单(整数值1)

OP_BUYSTOP – 买入止损单(整数值 2)

OP_SELLSTOP – 卖出止损单(整数值 3)

OP_BUYLIMIT- 买入限价单(整数值4)

OP_SELLLIMIT – 卖出限价订单(整数值 5)


Lots交易的手数。 如果您的经纪商支持微型手,您可以指定微型手 (0.1) 或微型手 (0.01)。
Price开单的价格。 一般在Ask为买入市价单,在Bid为卖出市价单。 对于挂单,它将以高于或低于当前价格的任何有效价格。
Slippage订单通过的最大滑点点数。
StopLoss止损价,低于开盘价买入,高于开盘价卖出。 如果设置为 0,则不使用止损。
TakeProfit止盈价,高于开盘价买入,低于开盘价卖出。 如果设置为 0,则不使用止盈。
Comment将用作订单注释的可选字符串。 评论显示在终端窗口的交易选项卡下。 要在终端中查看它们,您可以右键单击任何未平仓或已平仓的交易,然后在打开的框中勾选评论旁边的复选标记。 它们用作订单标识符。
MagicNumber这是一个可选的整数值,它将标识由特定 EA 放置的订单。 我们推荐使用它。
Expiration挂单的可选到期时间。
Arrow将在图表上绘制的箭头的可选颜色,指示开盘价和时间。 如果没有指定颜色,则不会绘制箭头。

OrderSend() 函数返回所下订单的票号(“票”是订单的唯一编号)。 我们可以将这些订单票保存到静态变量中,以备后用。


如果没有下订单,由于错误情况,返回值将为 -1。 这使我们能够分析错误并根据错误代码采取适当的措施。 为了获得有关拒绝交易请求的原因的信息,您应该使用函数 GetLastError()。

市场秩序

在 MetaTrader 中可以下三种类型的订单:市价单、止损单和限价单。 最常见的是,市价订单会以最近的买价或卖价立即开仓。

买卖注意事项

买入价是您在 MT4 图表上看到的价格,卖出价仅比买入价高出几个点,两者之间的差异就是点差。 我们以要价开立买单并关闭卖单; 我们以买入价开卖单并关闭买单。

这是买入市价订单的示例:


OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, Bid-StopLoss *Point, Bid+TakeProfit*Point, “EAName”, MagicNumber, 0, Blue)


这是卖出市价订单的示例:


OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, Ask+StopLoss *Point, Ask-TakeProfit*Point, “EAName”, MagicNumber, 0, Blue)


symbol() 函数返回当前图表交易品种,大多数时候我们将在当前图表的交易品种上下单。 OP_BUY 指买入市价单,就像 OP_SELL 指卖出市价单一样。 Ask 是 MLQ 中的预定义变量,用于存储当前交易品种的最新已知卖家价格(卖价)。


我们一般用外部变量来设置滑点参数(例如:extern slippage = 3)。 滑点参数(和相应的变量)是指允许价格滑点的点数。 换句话说,它代表订单通过的最大点差。 选择正确的滑点数可能是一个很好的平衡:您想要选择一个足够小的点值以提供一个好的价格,但同时您想要选择一个足够大的点值以免被重新报价并完全错过您的价格 . 如果您将滑点设置为 0,您很可能会经常被重新报价,并且您可能会错过您的价格。 如果您将其设置为 3 或 4,您将更有可能被填满。

关于滑点的 5 位经纪商注意事项

如果您的经纪商使用 4 位数字报价(或 2 位日元对),1 点 = 1 点; 但是,如果您的经纪商使用 5 位数字报价(或 3 位日元对),则 1 点 = 0.1 点,在这种情况下,您需要在滑点设置的末尾添加一个额外的零。 因此,代码自动检查 4 位或 5 位数字经纪人并进行适当调整非常有用。

关于 OB_BUY 的止损和获利规则:


询问 – 止损 = 您将止损设置为低于 (-) 询问价格


Ask + TakeProfit = 您将 TakeProfit 设置为高于 (+) 卖价


关于 OB_SELL 的止损和获利规则:


出价 + 止损 = 您将止损设置为高于 (+) 出价


Bid – TakeProfit = 您将 TakeProfit 设置为低于 (-) Bid 价格


对于上述规则,我们使用外部变量来设置止损和获利,例如:


外部 int 止损 = 50;

外部 int 止盈 = 100;


在上面的示例中,我们希望止损位于买入市价订单下方 50 点,止盈位于上方 100 点。 然而,最近,随着 5 位数经纪商的加入,止损点和获利点的计算方式出现了问题,如下面的注释所示。

关于点值的 5 位经纪人的注意事项

为了将上述整数转换为适当的分数值,我们需要将我们的外部 StopLoss 和 TakeProfit 变量乘以 Point。 Point 是 MQL 中的一个预定义变量,它返回货币的最小价格单位,具体取决于小数位数,使得 Point = 0.001 用于 4 位小数报价。 但最近,许多经纪商采用小数点报价,小数点后 3 位和小数点后 5 位,使得 Point = 0.00001 为 5 位小数报价。 这种情况下的问题是,上述止损将被计算为距开盘价 5 点而不是 50 点。 那不是我们想要的。 因此,代码自动检查 4 位或 5 位数字经纪人并进行适当调整非常有用。

在我们上面示例买卖订单的注释参数(OrderSend 函数的第 8 个参数)中,我们输入了“EAName”,您可以在此字段中输入您的 EA 名称。 因此,这是将您的 EA 与其他 EA 区别开来的一种方式。 在外部 MT4 平台中,如果您查看显示您的打开和关闭订单的终端,您可以看到最后一个字段显示评论字段。 如果你没有看到它,你可以在终端上右键单击并在 Comments 上打勾。 如果您在同一个帐户上使用多个 EA,您应该在评论字段中为每个 Eas 指定一个不同的名称,这样当它们都开始生成交易时,您可以通过查看评论来区分哪些做了哪些 终端中的字段。


虽然评论字段可以帮助您从视觉上将您的 EA 彼此区分开来,但为其自身参数(OrderSend 函数的第 9 个参数)部署的幻数有助于程序将您的 EA 彼此区分开来。 在这个参数中有一个整数值,例如“1234”。 我们建议您改为构造一个“extern double MagicNumber = 1234”,然后将变量 MagicNumber 放入此参数中。 外部变量允许您轻松修改幻数。 基本上,幻数是您为程序分配给订单的唯一编号,用于区分您的专家顾问开立的订单和另一个专家顾问开立的订单。

关于幻数的注意事项

仅在 Magic Number 参数字段中指定一个唯一的整数值本身不足以让您的程序区分未平仓订单。 每当您的代码尝试引用您的未平仓交易时,您的幻数也必须包含在 OrderSelect() 函数和 OrderMagicNumber() 函数组合中。


组合看起来像这样:


int total = OrdersTotal();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

如果 (OrderMagicNumber() == MagicNumber)


上下文中此组合代码的一个很好的示例是查看自定义关闭函数。