
从自定义指标中不能调用OrderSend()、OrderClose()、OrderCloseBy()、OrderDelete()和OrderModify()交易函数。
本组交易函数应用于智能交易和脚本中。只有智能交易设置中的“允许实时交易”属性被选中,才可调用交易函数。
为了在智能交易和脚本中执行交易,在程序交易环境(智能交易和脚本的自动交易的环境)中,只能为它供应一个线程。这就是为何,假使这个交易环境被一个智能交易操作占用,所以会显现146错误(ERR_TRADE_CONTEXT_BUSY),其余智能交易或脚本在此时就不能调用成功。为了能确定能否有交易在执行,可运用 IsTradeAllowed() 函数检测。为了清除交易环境下访问共享,我们能够运用个基于全局变量的交易信号,其值可以运用 GlobalVariableSetOnCondition() 函数更改。
MQL4交易函数常见错误代码及处理意见
- OrderSelect() – 选择订单
- OrderClose() – 平仓
- OrderCloseBy() – 相反头寸平仓
- OrderClosePrice() – 获取订单平仓价格
- OrderCloseTime() – 获取订单平仓时间
- OrderComment() – 获取订单注释
- OrderCommission() – 获取订单佣金数额
- OrderDelete() – 删除挂单
- OrderExpiration() – 获取挂单有效时间
- OrderLots() – 获取订单交易手数
- OrderMagicNumber() – 获取订单魔术编号
- OrderModify() – 修改订单
- OrderOpenPrice() – 获取订单开仓价格
- OrderOpenTime() – 获取订单开仓时间
- OrderPrint() – 打印订单信息
- OrderProfit() – 获取订单盈利金额
- OrderSend() – 发出订单
- OrdersHistoryTotal() – 获取历史订单总数
- OrderStopLoss() – 获取订单止损值
- OrdersTotal() – 获取订单总数
- OrderSwap() – 获取订单掉期值
- OrderSymbol() – 获取订单交易品种
- OrderTakeProfit() – 获取订单止盈值
- OrderTicket() – 获取订单的订单编号
- OrderType() – 获取订单交易类型
bool OrderSelect(int index, int select, void pool)
本函数选择一个订单,等候做更深一步地处理。假使函数成功,返回TRUE,假使函数失利,返回FALSE。想要得到详细错误信息,请调用GetLastError()函数。
假使通过订单编号选定定单,pool参数应忽视。此订单编号是其唯一识别符。找出所选订单的列表,对订单时间执行分析。假使订单时间为零,此订单就是开单或挂单,或从终端开仓部位列表中选出。我们可以从订单类型区别开单和挂单。假使订单的平仓时间不等于0,此订单就是一个已经平仓的订单,或是一个已删除的挂单,也或许是从终端历史中被选出来的,他们同样可以依据定单类型相互区别。
参数:
index - 定单索引或订单号,这取决于第2个参数 select - 选定模式。可以为下方的任意值: SELECT_BY_POS - 按订单表中索引 SELECT_BY_TICKET - 按订单号 pool - 可选择定单索引。当选择SELECT_BY_POS参数时运用。可以为下方的任意值: MODE_TRADES (默认)- 来自交易的定单(开单和挂单), MODE_HISTORY - 来自历史的定单(已平仓或取消的订单)。
示例:
if(OrderSelect(12470, SELECT_BY_TICKET)==true) { Print("定单 #12470 开价格", OrderOpenPrice());Print("定单 #12470 收盘价格 ", OrderClosePrice());} else Print("OrderSelect 返回的错误 ",GetLastError());
bool OrderClose(int ticket, double lots, double price, int slippage, void Color)
定单平仓。假使函数实施成功,返回TRUE。假使函数实施失利,返回FALSE。想要得到详细错误信息,请调用GetLastError()函数。
参数:
ticket - 订单号。 lots - 平仓手数。 price - 平仓价格。 slippage - 最高滑点数。 Color - 图表中平仓箭头颜色。假使参数丢失或用CLR_NONE值,将不会在图表中画出。
示例:
if(iRSI(NULL,0,14,PR洲际交易所_CLOSE,0)>75) { OrderClose(order_id,1,Ask,3,Red);return(0);}
bool OrderCloseBy(int ticket, int opposite, void Color)
用相反定单对打开仓位执行平仓操作。假使函数成功,返回TRUE。假使函数失利,返回FALSE。得到详细错误信息,请查看GetLastError()函数。
参数:
ticket - 订单号。 opposite - 相反订单的订单号。 Color - 图表中平仓箭头颜色。假使参数丢失或用CLR_NONE值,将不会在图表中画出。
示例:
if(iRSI(NULL,0,14,PR洲际交易所_CLOSE,0)>75) { OrderCloseBy(order_id,opposite_id);return(0);}
double OrderClosePrice()
获取订单平仓价格。对于已经平仓的订单返回平仓时价格,对于未平仓订单返回该订单货币对的实时价格。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(ticket,SELECT_BY_POS)==true) Print("对于订单的收盘价格",OrderClosePrice());else Print("OrderSelect 失利错误代码是",GetLastError());
datetime OrderCloseTime()
返回目前订单的平仓时间。假使定单的平仓时间不是0,所选订单会从账户历史从新试图。未平仓的订单和挂单交易的平仓时间等于0。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true) { datetime ctm=OrderOpenTime();if(ctm>0) Print("定单10 开仓时间", ctm);ctm=OrderCloseTime();if(ctm>0) Print("定单 10 平仓时间", ctm);} else Print("OrderSelect失利错误代码是",GetLastError());
string OrderComment()
返回目前订单的注释。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
string comment; if(OrderSelect(10,SELECT_BY_TICKET)==false) { Print("OrderSelect 失利错误代码是",GetLastError());return(0);} comment = OrderComment();// ...
double OrderCommission()
返回目前订单的佣金数额。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10,SELECT_BY_POS)==true) Print("定单10 "佣金,OrderCommission());else Print("OrderSelect 失利错误代码是",GetLastError());
bool OrderDelete(int ticket, void Color)
删除指定订单的挂单。假使函数成功,返回TRUE。假使函数失利,返回FALSE。得到详细错误信息,请查看GetLastError()函数。
参数:
ticket - 要删除的订单(挂单)号。 Color - 图表中平仓箭头颜色。假使参数丢失或用CLR_NONE值,将不会在图表中画出。
示例:
if(Ask>var1) { OrderDelete(order_ticket);return(0);}
datetime OrderExpiration()
返回目前挂单的有效时间。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10, SELECT_BY_TICKET)==true) Print("定单 #10 有效日期为",OrderExpiration());else Print("OrderSelect 返回的",GetLastError()错误);
double OrderLots()
返回目前订单的交易手数。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10,SELECT_BY_POS)==true) Print("定单 10 交易手数",OrderLots());else Print("OrderSelect 返回的 ",GetLastError()错误);
int OrderMagicNumber()
返回目前订单的魔术编号。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10,SELECT_BY_POS)==true) Print("定单 10 的魔术编号", OrderMagicNumber());else Print("OrderSelect 返回的 ",GetLastError()错误);
bool OrderModify(int ticket, double price, double stoploss, double takeprofit, datetime expiration, void arrow_color)
修改以前的开仓或挂单的订单参数。假使函数成功,返回TRUE。假使函数失利,返回FALSE。假使想获取详细的错误信息,请调用GetLastError()函数。
注:只有挂单才可修改开仓价和过期时间。
假使用原值作为参数传递给该函数,将令造成错误代码为1的信息 (ERR_NO_RESULT)。
在某些交易服务器上,挂单的过期时间被禁用。该种情形下,当在过期参数中指定一个非零值时,将生成147错误(ERR_TRADE_EXPIRATION_DENIED)。
参数:
ticket - 要修改的订单(挂单)号。price - 新的开仓价格。(对于挂单有效) stoploss - 新止损价位。 takeprofit - 新止盈价位。 expiration - 挂单有效时间。(对于挂单有效) Color - 图表中平仓箭头颜色。假使参数丢失或用CLR_NONE值,将不会在图表中画出。
示例:
if(TrailingStop>0) { OrderSelect(12345,SELECT_BY_TICKET);if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()return(0);} } }