5.19 Trading functions交易函数
交易管理的一组函数。
从自定义指标中不能调用OrderSend ( ) , OrderClose , OrderCloseBy , Order-Delet。和OrderModify交易函数。
交易函数应用于智能交易和脚本中。如果检验智能交易的“允许实事交易”属性,交易函数不能调用。
来自智能交易和脚本的交易在程序中只能有一个开启。这就是为什么如果交易业务繁忙,其他交易或脚本在此时不能调用的原因,即由于错误146 ( ERR_ TRADE_CONTEXT_BUSY )。使用IsTradeAllowed)函数可以检测是否交易。要弄清交易访问模式,可以使用改变GlobalVariableSetOnCondi-tion ( )函数的整体变量值。
5.19.1 Execution errors错误代码
任何交易业务(OrderSend ( ) , OrderClose , OrderCloseBy , OrderDelete和OrderMo<lify函数)都会因为一些原因导致失败,并且返回负值票据数或FALSE、您可以查看GetLastError( )函数得知错误的问题所在。每一个错误必须以不同的方式加以处理。最常见的建议列举如下:






从交易服务器返回的错误代码数据应用RefreshRates函数重试。
5.19.2 OrderClose平仓
bool OrderClose( int ticket,double lots,double price,int slippage,void Col-or)
对汀单进行平仓操作。如果函数成功,返回的值是真实的;如果函数失败,返回的值是假的。要获得详细错误信息,请查看Get LastError函数。
【参量】
Ticket—订单编号。
Lots—手数。
Price—收盘价格。
Slippage—最高划点数。
Color—在图表中标记颜色。如果参量丢失,CLR_ NONE值将不会在图表中画出。
【示例】
if(iRSI( NULL,O,14,PRICE_CLOSE,O)>75)
OrderClose.( order_id,1,Ask,3,Red);
return ( 0);
5.19.3 OrderCIoseBy反向订单平仓
bool OrderCloseBy( int ticket,int opposite,void Color)
用相反订单对打开仓位进行平仓操作。如果函数成功,返回的值是真实的;如果函数失败,返回的值是假的。要获得详细错误信息,请查看GetLa-stError)函数。
【参量】
Ticket—订单编号。
Opposite—相对订单编号。
Color—在图表中标记颜色。如果参量丢失,CLR_ NONE值将不会在图表中画出。
【示例】
if(iRSI( NULL,O,14,PRICE_CLOSE,O)>75)
OrderCloseBy( order_id,opposite_id );
return ( 0);
5.19.4 OrderCIosePrice当前订单收盘价
double OrderClosePrice()
当前选择的订单返回收盘价格
注意:订单必须用OrderSelect()函数提前选定。
【示例】
if( OrderSelect( ticket,SELECT_BY_POS)==true )
Print”对于订单”,订单编号”=”,OrderClosePrice)的收盘价格);
else
Print(" OrderSelect失败错误代码是”,GetLastError( ) ) ;
5.19.5 OrderCIoseTime当前订单平仓时间
datetime OrderCloseTime()
当前选择的汀单返回平仓时间。如果订单时间不是零,所选订单会从账户历史重新尝试。开仓和挂单交易平仓时间必须等于零。
注意:订单必须用OrderSelect()函数提前选定。
【示例】
if(OrderSelect( lO,SELECT_BY_POS,MODE_HIS'I'ORY)==true )
datetime ctm=OrderOpenTime();
if( ctm > 0) Print(”订单LO”开仓时间,clm ) ;
ctm=OrderCloseTime);
if(ctm>0) Print(”订单10”平仓时间,ctm ) ;
else
Print(" OrderSelect失败错误代码是”,GetLastError( ) ) ;
5.19.6 OrderComment订单注释
string OrderComment()
返回订单注释。
注意:订单必须用OrderSelect)函数提前选定。
【示例】
stung comment;
if(OrderSelect( 10,SELECT_BY_ TICKE'C)==false )
}
Print (" OrrIerSelect失败错误代码是”,GetLastError( ) ) ;
retuin ( 0)
}
comment=OrderComment()
//...
5.19.7 OrderCommission订单佣金
double OrderCommission()
返回订单佣金数。
注意:订单必须用OrderSelect)函数提前选定。
【示例】
if( OrderSelect( 10 , SELECT_BY_POS )==true )
Print”订单10”佣金,OrderCommission( ) ) ;
else
Print(" OrderSelect失败错误代码是”,GetLastError( ) ) ;
5.19.8 OrderDelete删除挂单
boot OrderDelete(int ticket,void Color)
删除先前打开挂单。如果函数成功,返回的值是真实的;如果函数失败,返回的值是假的。要获得详细错误信息,请查看GetLastError()函数。
【参量】
ticket——订单编号。
Color——在图表中标记颜色。如果参量丢失,CLR_ NONE值将不会在
图表中画出。
【示例】
if(Ask>varl)
}
OrderDelete( order_ticket)
return ( 0);
}
5.19.9 OrderExpiration挂单有效期
datetime OrderExpiration()
返回挂单的有效日期。
注意:订单必须用OrderSelect)函数提前选定。
【示例】
if(OrderSelect(lO,SELECT_BY_ TICKET)==true )
Print”订单#10有效日期为”,OrderExpiration( ) ) ;
else
Print(" OrderSeleot返回的”,GetLastError()错误);
5.19.10 OrderLots订单手数
double OrderLots()
返回选定订单的手数。
注意:订单必须用OrderSelect)函数提前选定。
【示例】
if( OrderSelect( LO,SELECT_BY_POS)==true)
Print(”订单10'‘手数,Orderl,ota( ) ) ;
else
Print(" OrderSelect返回的‘' , GetLastError()错误);
5. 19.11 OrderMagicNumber订单编号
int OrderMagicNumber()
返回选定订单的指定编号。
注意:订单必须用OrderSelect)函数提前选定。
【示例】
if( OrderSelect( 10,SH:LECT_BY_POS)==true)
Print(”订单l0”指定编号,OrderMagioNumber(, ) ) ;
else
Print (" OrderSeleot返回的”,GetLastError()错误);
5.19.12 OrderModify修改挂单
bool OrderModify( int ticket,double price,double stoploss,double takeprof-it,datetime expiration,void arrow_color)
对先前的开仓或挂单进行特性修改。如果函数成功,返回的值为TRUE;如果函数失败,返回的值为FALSE。要获得详细的错误信息,请查看GetLastError()函数。
注意:开价格和有效时间的改变只对挂单而言。
如果未改变的值作为函数参量通过,将会生成错误1 ( ERR_NO_RE-SULT)。
在一些服务器中,挂单的有效时间会被隐藏。在这种情况下,当一个非零值在有效参量被指定时,将生成错误147 ( ERR_TRADE_EXPIRATION_DENIED)。
【参量】
ticket—订单编号。
price—收盘价格。
stoploss—新止损水平。
takeprofit—新赢利水平。
expiration—挂单有效时间。
arrow_ color—在图表中允许对止损/赢利的颜色进行修改。如果参量丢失或存在CLR_ NONE值,在图表中将不会显示。
【示例】
if( TrailingStop>0)
{
OrderSelect( 12345 ,SELECT_BY_fICKET);
if( Bid一OrderOpenPrice()>Point*TrailingStop)
{
if( OrderStopLoss()<Bid一Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid一Point*TrailingStop,Order-TakeProfit(),0,Blue);
return ( 0);
}
}
5.19.13 OrderOpenPrice订单开仓价
double OrderOpenPrice()
当前选择的订单返回开价格。
注意:订单必须由OrderSelect()函数首先选定。
【示例】
if( OrderSelect( 10,SELECT_BY_POS)==true )
Print(”对于订单10开价格’' ,OrderOpenPrice( ) ) ;
else
Print(" OrderSelect返回错误”,GetLastError( ) ) ;
5.19.14 OrderOpenTime订单开仓时间
datetime OrderOpenTime)
当前选择订单返回买人时间。
注意:订单必须用OrderSelect()函数提前选定。
【示例】
if( OrderSelect( IO,SELECT_BY_POS)==true )
Pri nt ( 订单10买入时间”,OrderOpenTime( ) ) ;
else
Print(" OrderSeleet返回的错误”,GetLastError( ) ) ;
5.19.15 OrderPrint打印订单
void OrderPrint()
按照以下形式打印选择订单信息:订单编号;买入时间;交易业务;手数总数;开盘价格;止损;赢利;平仓时间;收盘价格;佣金;掉期;注释;指定编码;挂单有效日期。
注意:订单必须用OrderSelect( )函数提前选定。
【示例】
if( OrderSelect( 10,SELECT_BY_ TICKET)==true)
Orderprint);
else
Print( " 0,一‘IerSelect失玫错误代码是”,Getl,astError( ) ) ;
5.19.16 OrderProfit订单净利
double OrderProfit()
选择的订单返回净赢利值(除掉期和佣金外)。对于开仓位当前为不浮动赢利;对于平仓为固定赢利。
当前选择的订单返回赢利。
注意:订单必须用OrderSelect)函数提前选定。
【示例】
if(OrderSelect(IO,SELECT_BY_ POS)==true )
Print”订单10赢利”,OrderProfit( ) ) ;
else
Print (" OrderSelect返回的错误”,GetLastError( ) ) ;
5.19.17 OrderSelect选择订单
boot OrderSelect( int index,int select,void pool)
函数选择订单。如果函数成功,返回的值为TRUE;如果函数失败,返回的值为FALSE。要获得详细错误信息,请查看GetLastError)函数。
如果订单编号被选定,此pool参量被认知。此订单编号为唯一识别符。找出所选订单的列表,它的平仓时间必须进行分析。如果订单卖出时间为零,开单和挂单将从终端位置列表打开。可以从订单类型区别开挂单和开单。如果订单的卖出时间不等于零,平单和删除订单是在终端历史中被选择。它们同样可以区分订单类型。
【参量】
ndex—订单索引。
elect—选定模式。可以为以下任意值
SELECT_BY_POS;
SELECT_ BY_ TICKET。
pool—可选择订单索引。当选择SELF CT_BY_POS参量时使用。可以为以下任意值:
MODE_ TRADES (default),来自交易的订单(开单和挂单);
MODE_ HISTORY,来自历史的订单(平仓和取消订单)。
【示例】
if( OrderSelect(12470,SELECT_BY-PICKET)==true )
}
Print(”订单#12470开价格”,OrderOpenPrice( ) ) ;
}
Print(”订单#12470收盘价格”,OrderClosePrice( ) ) ;
}
else
Print(" OrderSelect返回的错误‘' ,GetLastError( ) ) ;
5.19.18 OrderSend开仓
int OrderSend(string symbol,int cmd,double volume,double price,int slip-page,double stoploss,double takeprofit,void comment,void magic,void expira-lion,void arrow_color)
【参量】
Symbol—交易货币对。
cmd—购买方式。可以是购买方式列举的任意值。
Volume—购买手数。
Price—收盘价格。
Slippage—最大允许滑点数。
Stoploss—止损水平。
takeprofit—赢利水平。
Comment—注解文本。注解的最后部分可以由服务器改变。
Magic—订单指定码。可以作为用户指定识别码使用。
Expiration—订单有效时I可(只限挂单)。
arrow_ color—图表上箭头颜色。如果参量丢失或存在CLR_ NONE价格值不会在图表中画出。
对于OrderSend ( )函数的交易类型。可以是以下任意值:

【示例】
int ticket;
if( iRSI( NULL,O,14,PRICE_CLOSE,O)<25)
{
ticket=OrderSend(Symbol(),OP_BUY,Ask,3,Ask一25*Point,Ask+25*Point,”My order #2",16384,O,Green);
if( ticket<0)
{
Print(”OrderSend失败错误#,,,GetLastError());
return ( 0);
5.19.19 OrdersHistoryTotal历史订单总数
int OrdersHistoryTotal()
在账户历史返回关闭订单数加载进入终端。历史列表的大小取决于终端的”账户历史‘,表格的当前的设置。
【示例】
//来自交易历史的恢复信息
int i,hstTotal=OrdersFIistoryTotal);
for ( i=0;<hstTotal;i++)
//-一-一检查选择结果
if( OrderSelect( i,SELECI'_BY_POS。MODI:_HISTORY)_= false
}
Print(”带有(' , GetLastError( ) ,)错误的历史失败通道”)
break;
}
//订单的一些工作
}
5.19.20 OrderStopLoss返回当前订单止损价
double OrderStopLoss()
当前选择的订单返回止损值。
注意:订单必须用OrderSelect)函数提前选定。
【示例】
if( OrderSelect( ticket,SELECT_BY_ POS)==true )
Print(”对于10止损值”,OrderStopLoss( ) ) ;
else
Print(" OrderSelect失败错误代码是”,GetLastError( ) ) ;
5.19.21 OrdersTotal返回挂单总数
int OrdersTotal)
返回市场和挂单的总数。
【示例】

5.19.22 OrderSwap订单掉期(隔夜利息)
double OrderSwap()
当前选择的订单返回掉期值。
注意:订单必须用OrderSelect()函数提前选定。
【示例】
if(OrderSelec;t(order_id,SELECT_BY_ TICKET)==true )
Print”对于订单#掉期”,order_id ,” ' , OrderSwap ( ) ) ;
else
Print(" OrderSelect失败错误代码是”,GetLastError( ) ) ;
5.19.23 OrderSymbol订单货币对值
string OrderSymbol)
选择的订单返回订单货币对值。
注意:订单必须用OrderSelect()函数提前选定。
【示例】
if(OrderSelect(12,SELECT_BY_ POS)==true )
Print(”订单#货币对”,OrderTicket ( ) , " is" , OrderSymbol ( ) ) ;
else
Print( " OrderSelect失败错误代码是”,GetLastError( ) ) ;
5.19.24 OrderTakeProfit返回当前订单止盈价
double OrderTakeProfit()
当前选择的订单返回赢利值。
注意:订单必须用OrderSelect()函数提前选定。
【示例】
if( OrderSelect( 12,SELECT_BY_POS)==(rue)
Print(”订单#' ,OrderTicket( ) ,赢利:" ,OrderTakeProfit( ) ) ;
else
Print(" OrderSelect()返回错误一”,GetLastError( ) ) ;
5.19.25 OrderTicket订单号
订单号int OrderTicket()
当前选择的订单返回订单编号
注意:订单必须用OrderSelect)函数提前选定。
【示例】
if( OrderSalect( 12,SELECT_t3Y_POS)==true)
order=OrderTicket();
else
Print(" OrderSelect失败错误代码”,GetLastError( ) ) ;
5.19.26 OrderType订单类型
int OrderType)
当前选择的订单返回订单类型。可以是以下任意值:
OP BUY——买进。
OP SE1.1——卖出
OP BIIYT.TMTT——挂单买入。
OP BUYSTOP——挂单买入停止。
OP_ SELLLIMIT——挂单卖出。
OP_ SELLSTOP——挂单卖出停止、
注意:订单必须由OrderSelect( )函数选择。
【示例】
