5.19 Trading functions交易函数

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( )函数选择。

【示例】