MT4 MT5外汇EA编程教程大全之交易函数(三)从自定义指标中不能调用OrderSend(), OrderClose, OrderCloseBy, OrderDelete和OrderModify交易函数。
OrderCloseOrderCloseByOrderClosePriceOrderCloseTimeOrderCommentOrderCommissionOrderDeleteOrderExpirationOrderLotsOrderMagicNumberOrderModifyOrderOpenPriceOrderOpenTimeOrderPrintOrderProfitOrderSelectOrderSendOrdersHistoryTotalOrderStopLossOrdersTotalOrderSwapOrderSymbolOrderTakeProfitOrderTicketOrderTypebool OrderClose( int ticket, double lots, double price, int slippage, void Color)对定单进行平仓操作。
如果函数成功,返回的值是真实的。
如果函数失败,返回的值是假的。
获得详细错误信息,请查看GetLastError()函数。
参量:ticket - 定单编号。
lots - 手数。
price - 收盘价格。
slippage - 最高划点数。
Color - 图表中标记颜色。
如果参量丢失,CLR_NONE值将不会在图表中画出。
示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderClose(order_id,1,Ask,3,Red);return(0);}bool OrderCloseBy( int ticket, int opposite, void Color)用相反定单对打开仓位进行平仓操作。
如果函数成功,返回的值是真实的。
如果函数失败,返回的值是假的。
获得详细错误信息,请查看GetLastError()函数。
参量:ticket - 定单编号。
opposite - 相对定单编号Color - 图表中标记颜色。
如果参量丢失,CLR_NONE值将不会在图表中画出示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderCloseBy(order_id,opposite_id);return(0);}double OrderClosePrice( )对于当前选择定单返回收盘价格。
注解:定单必须用OrderSelect()函数提前选定。
示例:if(OrderSelect(ticket,SELECT_BY_POS)==true)Print("对于定单 ",定单编号" = ",OrderClosePrice()的收盘价格);elsePrint("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);}elsePrint("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());elsePrint("OrderSelect 失败错误代码是",GetLastError());bool OrderDelete( int ticket, void Color)删除先前打开挂单。
如果函数成功,返回的值是真实的。
如果函数失败,返回的值是假的。
获得详细错误信息,请查看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());elsePrint("OrderSelect 返回的",GetLastError()错误);double OrderLots( )返回选定定单的手数。
注解:定单必须用OrderSelect()函数提前选定。
if(OrderSelect(10,SELECT_BY_POS)==true)Print("定单 10 "手数,OrderLots());elsePrint("OrderSelect 返回的 ",GetLastError()错误);int OrderMagicNumber( )返回选定订单的指定编号注解:定单必须用OrderSelect()函数提前选定。
示例:if(OrderSelect(10,SELECT_BY_POS)==true)Print("定单 10 "指定编号, OrderMagicNumber());elsePrint("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 - 挂单有效时间。
arrow_color - 在图表中允许对止损/赢利颜色进行修改。
如果参量丢失或存在CLR_NONE 值,在图表中将不会显示。
if(TrailingStop>0){OrderSelect(12345,SELECT_BY_TICKET);if(Bid-OrderOpenPrice()>Point*TrailingStop){if(OrderStopLoss()<Bid-Point*TrailingStop){OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);return(0);}}}double OrderOpenPrice( )对于当前选择定单返回开价格。
定单必须由OrderSelect() 函数首先选定。
示例:if(OrderSelect(10, SELECT_BY_POS)==true)Print("对于定单10 开价格",OrderOpenPrice());elsePrint("OrderSelect返回错误",GetLastError());datetime OrderOpenTime( )对于当前选择定单返回买入时间。
注解:定单必须用OrderSelect()函数提前选定。
示例:if(OrderSelect(10, SELECT_BY_POS)==true)Print("定单10 买入时间",OrderOpenTime());elsePrint("OrderSelect 返回的错误 ",GetLastError());void OrderPrint( )按照以下形式打印选择定单信息:定单编号; 买入时间; 交易业务;手数总数; 开盘价格; 止损; 赢利;平仓时间; 收盘价格; 佣金; 掉期; 盈利; 注释; 指定编码; 挂单有效日期定单必须用OrderSelect()函数提前选定。
示例:if(OrderSelect(10, SELECT_BY_TICKET)==true)OrderPrint();elsePrint("OrderSelect 失败错误代码是",GetLastError());double OrderProfit( )对于选择定单返回净盈利值 (除掉期和佣金外)。
对于开仓位当前不真实盈利。
对于平仓为固定盈利。