
从自定义指标中不能调用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() – 获取订单交易类型
double OrderOpenPrice()
返回目前订单的开仓价格。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10, SELECT_BY_POS)==true) Print("对于定单10的开仓价格",OrderOpenPrice());else Print("OrderSelect返回错误",GetLastError());
datetime OrderOpenTime()
返回目前订单的开仓时间。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10, SELECT_BY_POS)==true) Print("定单10 开仓时间",OrderOpenTime());else Print("OrderSelect 返回的错误 ",GetLastError());
void OrderPrint()
按下方格式打印日志中目前定单信息:
定单编号; 购入时间; 交易业务; 手数总数; 开仓价格; 止损价格; 止盈价格; 平仓时间; 平仓价格; 佣金; 掉期; 盈利; 注释; 魔术编码; 挂单有效日期
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10, SELECT_BY_TICKET)==true) OrderPrint();else Print("OrderSelect 失利错误代码是",GetLastError());
double OrderProfit()
返回目前订单的盈利金额(除掉期和佣金外)。对于开仓订单目前为浮动盈利。对于已平仓订单为固定盈利。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(10, SELECT_BY_POS)==true) Print("定单 10 盈利",OrderProfit());else Print("OrderSelect返回的错误",GetLastError());
int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, void comment, void magic, void expiration, void arrow_color)
首要功能用于开仓头寸和挂单交易。
假使成功,由交易服务器返回定单的定单编号,假使失利,返回-1。想要得到更多的错误信息,请调用 GetLastError() 函数。
注:市价定单开始交易时(OP_SELL或OP_BUY),只有最新卖价或买价可以当作开仓价来用。假使实施与目前货币对不同的交易,务必运用带有MODE_BID或MODE_ASK参数的Marketlnfo() 函数得到要买的货币对最新的报价。预期或是不标准的单价不可用。
假使在市场的报价中没有所要的开仓价或者没有依照小数点后位数的要求标准化,将令致使129错误(ERR_INVALID_PR洲际交易所)。假使要求的开仓价日期已经历期,将令致使138错误(ERR_REQUOTE)。假使请求的单价过期了,但是还处在市价里,就以现价或还在price+-slippage(现价+-滑点)规模内现价开仓。
止损价和止盈价不能太靠近市价。最小的止损点数可以运用带MODE_STOPLEVEL参数的 MarketInfo() 函数得到。在出错或止损位设置不正确的情形下,将令致使130错误(ERR_INVALID_STOPS)。
在发出挂单时,开盘价也不能太靠近市价。挂单价和目前市价之间最小的点数可以运用带MODE_STOPLEVEL参数的 MarketInfo() 函数得到。在挂单开盘价错误的情形下,将令致使130错误(ERR_INVALID_STOPS)。
挂单交易的过期时间在一部分交易服务器上被禁用。在该种情形下,假使expiration(过期)参数指定了非零值,反而会致使147错误(ERR_TRADE_EXPIRATION_DENIED)造成。
在某些交易服务器上,开仓单和挂单的总数有所制约。假使多出限额,就不能再开仓,或者不能再挂单了。假使还开仓或挂单,交易服务器会返回148错误(ERR_TRADE_TOO_MANY_ORDERS)。
参数:
symbol - 交易货币对。 cmd - 交易类型。可以是 交易类型列举 的任意值。 volume - 交易手数。 price - 交易价格。 slippage - 最大允许滑点数。 stoploss - 止损价格。 takeprofit - 止盈价格。 comment - 注释文本。注释的最后部分可以由服务器修改。 magic - 订单魔术编号。可以作为用户指定识别码运用。 expiration - 定单有效时间(只限挂单)。 arrow_color - 图表上箭头颜色。假使参数丢失或运用CLR_NONE价格值将不会在图表中画出。
示例:
int ticket; if(iRSI(NULL,0,14,PR洲际交易所_CLOSE,0)<25) { ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green);if(ticket<0) { Print("OrderSend 失利错误 #",GetLastError());return(0);} }
int OrdersHistoryTotal()
返回载入到终端账户历史表中已平仓订单数。历史表的规模大小取决于终端”Accounthistory(账户历史)”标签中目前设置。
示例:
// 来自交易历史的订单信息 int i,hstTotal=OrdersHistoryTotal();for(i=0;ibreak; } // 订单的一部分工作
double OrderStopLoss()
返回目前订单的止损值。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(ticket,SELECT_BY_POS)==true) Print("对于10 止损值", OrderStopLoss());else Print("OrderSelect 失利错误代码是",GetLastError());
int OrdersTotal()
返回市场单和挂单总数。
示例:
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"/t");if(handle<0) return(0);// 写标题 FileWrite(handle,"#","开价格","购入时间","货币对","手数");int total=OrdersTotal();// 编撰定单命令 for(int pos=0;pos} FileClose(handle);
double OrderSwap()
返回目前订单的掉期值。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(order_id, SELECT_BY_TICKET)==true) Print("对于定单 #", order_id, "掉期", OrderSwap());else Print("OrderSelect 失利错误代码是",GetLastError());
string OrderSymbol()
返回目前订单的交易品种名称。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(12, SELECT_BY_POS)==true) Print("定单 #", OrderTicket(), " 货币对是", OrderSymbol());else Print("OrderSelect 失利错误代码是",GetLastError());
double OrderTakeProfit()
返回目前订单的止盈值。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(12, SELECT_BY_POS)==true) Print("定单 #",OrderTicket()," 盈利: ", OrderTakeProfit());else Print("OrderSelect() 返回错误 - ",GetLastError());
int OrderTicket()
返回目前订单的订单编号。
注:定单务必用 OrderSelect() 函数提早选定。
示例:
if(OrderSelect(12, SELECT_BY_POS)==true) order=OrderTicket();else Print("OrderSelect 失利错误代码",GetLastError());
int OrderType()
返回目前订单的交易类型。可以是 交易类型列表 下的值
注:定单务必用 OrderSelect() 函数提早选定。
示例:
int order_type; if(OrderSelect(12, SELECT_BY_POS)==true) { order_type=OrderType();// ... } else Print("OrderSelect() 返回错误 - ",GetLastError());