从自定义指标中不能调用
OrderSend(), OrderClose, OrderCloseBy, OrderDelete和OrderModify
交易函数。
OrderClose
OrderCloseBy
OrderClosePrice
OrderCloseTime
OrderComment
OrderCommission
OrderDelete
OrderExpiration
OrderLots
OrderMagicNumber
OrderModify
OrderOpenPrice
OrderOpenTime
OrderPrint
OrderProfit
OrderSelect
OrderSend
OrdersHistoryTotal
OrderStopLoss
OrdersTotal
OrderSwap
OrderSymbol
OrderTakeProfit
OrderTicket
OrderType
bool 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()的收盘价格);
else
Print(“OrderSelect 失败错误代码是”,GetLastError());
datetime OrderCloseTime( )
返回当前选定订单的平仓时间。若订单时间不为0,则该订单会从账户历史中重新读取。开仓订单和挂单的平仓时间应始终为0。
注意:订单必须提前通过 OrderSelect() 函数选定。
代码示例:
if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true)
{
datetime ctm=OrderOpenTime();
if(ctm0) Print(“定单10 “开仓时间, ctm);
ctm=OrderCloseTime();
if(ctm0) 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)
删除之前创建的挂单。成功返回真,失败返回假,详细错误信息可查询 GetLastError()。
参数说明:
ticket – 待删除的订单编号。
Color – 图表中标记颜色。若参数缺失,默认使用 CLR_NONE,不显示标记。
代码示例:
if(Askvar1)
{
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( )
返回选定订单的魔术编号(Magic Number)。
注意:订单必须提前通过 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)
用于修改已开仓或挂单的订单属性。成功返回真,失败返回假。详细错误信息可查看 GetLastError()。
注意:开盘价格和有效时间的修改仅适用于挂单。若传入未改变的参数值,将触发错误 1 (ERR_NO_RESULT)。部分服务器会隐藏挂单的有效时间,此时若指定非零的有效参数,将生成错误 147 (ERR_TRADE_EXPIRATION_DENIED)。
参数说明:
ticket – 待修改的订单编号。
price – 新的开盘价格(仅对挂单有效)。
stoploss – 新的止损水平。
takeprofit – 新的止盈水平。
expiration – 挂单的有效时间。
arrow_color – 图表中标记颜色,用于显示止损/止盈的修改。若参数缺失或为 CLR_NONE,则不显示。
代码示例:
if(TrailingStop0)
{
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());
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());
bool OrderSelect( int index, int select, void pool)
用于选定需要操作的订单。成功返回真,失败返回假,详细错误信息可查询 GetLastError()。
若通过订单编号选定,pool 参数将被识别。订单编号是唯一标识符。若要判断所选订单的列表,需分析其平仓时间。若平仓时间为零,则从当前持仓列表中选取(包括开仓和挂单)。可通过订单类型区分挂单与开仓。若平仓时间不为零,则从历史记录中选取已平仓或已删除的订单。
参数说明:
index – 订单索引。
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());
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),只能使用最新的卖价或买价作为开盘价格。若执行不同品种的交易,需通过 MarketInfo() 函数获取 MODE_BID 或 MODE_ASK 参数。使用非标准价格或未按小数点后位数归一化的价格会触发错误 129 (ERR_INVALID_PRICE)。若请求的开盘价格已过期,则生成错误 138 (ERR_REQUOTE)。开仓时,当前价格必须在 price ± slippage 范围内。
止损和止盈水平不能与市场价格过近。最小距离可通过 MarketInfo() 的 MODE_STOPLEVEL 参数获取。若止损或止盈设置错误,将生成错误 130 (ERR_INVALID_STOPS)。
对于挂单,开盘价格也不能与市场价格过近,同样遵守最小距离限制。部分服务器禁止设置挂单的有效时间,若传入非零的有效参数,将生成错误 147 (ERR_TRADE_EXPIRATION_DENIED)。此外,部分服务器对开仓和挂单总数有限制,超出限制时将返回错误 148 (ERR_TRADE_TOO_MANY_ORDERS)。
参数说明:
symbol – 交易品种(如货币对)。
cmd – 交易指令,可使用任意枚举值(如 OP_BUY、OP_SELL 等)。
volume – 交易手数。
price – 开盘价格。
slippage – 最大允许滑点数。
stoploss – 止损水平。
takeprofit – 止盈水平。
comment – 订单备注文本,服务器可能会修改备注的后半部分。
magic – 魔术编号,可作为用户自定义的识别码。
expiration – 挂单的有效时间(仅适用于挂单)。
arrow_color – 图表中箭头标记的颜色。若参数缺失或为 CLR_NONE,则不显示标记。
代码示例:
int ticket;
if(iRSI(NULL,0,14,PRICE_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( )
返回账户历史中已加载到终端的已平仓订单总数。历史列表大小取决于终端“账户历史”表格的当前设置。
代码示例:
// 从交易历史中恢复信息
int i,hstTotal=OrdersHistoryTotal();
for(i=0;i<hstTotal;i++)
{
//—- 检查选择结果
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print(“带有 (“,GetLastError(),”)错误的历史失败通道”);
break;
}
// 对订单进行一些操作
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<total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots());
}
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(), ” is “, 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( )
返回当前选定订单的类型,可以是以下任意值:
OP_BUY – 买入,
OP_SELL – 卖出,
OP_BUYLIMIT – 挂单买入限价,
OP_BUYSTOP – 挂单买入止损,
OP_SELLLIMIT – 挂单卖出限价,
OP_SELLSTOP – 挂单卖出止损。
注意:订单必须提前通过 OrderSelect() 函数选定。
代码示例:
int order_type;
if(OrderSelect(12, SELECT_BY_POS)==true)
{
order_type=OrderType();
// …
}
else
Print(“OrderSelect() 返回错误 – “,GetLastError());
