EA编程教程大全之交易函数
从自定义指标中不能调用
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(ctm>0) Print("定单10 "开仓时间, ctm);
ctm=OrderCloseTime();
if(ctm>0) 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(Ask>var1)
{
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( )
返回选定订单的指定编号
注解:定单必须用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)
对于先前的开仓或挂单进行特性修改。如果函数成功,返回的值为 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());
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)
函数选择定单。如果函数成功,返回的值为TRUE。如果函数失败,返回的值为FALSE。获得详细错误信息,请查看GetLastError()函数。
如果定单编号被选定,此pool参量被认知。此定单编号为唯一识别符。找出所选定单的列表,它的平仓时间必须进行分析。如果定单卖出时间为零, 开单和挂单将从终端位置列表打开。可以从定单类型区别开挂单和开单。 如果定单的卖出时间不等于0, 平单和删除定单是在终端历史中被选择。他们同样可以区分删除定单是在终端历史中被选择。他们同样可以区分定单类型。
参量:
index - 定单索引。
select - 选定模式。可以为以下的任意值:
SELECT_BY_POS
SELECT_BY_TICKET 。
pool - 可选择定单索引。当选择SELECT_BY_POS参量时使用。可以为以下的任意值:
MODE_TRADES (default)- 来自交易的定单(开单和挂单),
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 or OP_BUY), 只有最后的卖价格或买价格可以应用到开价格中. 如果执行当前带有不同证券的业务,必须使用带有MODE_BID 或 MODE_ASK参量的MarketInfo()函数获得. 预测或是不标准的价格不可用. 如果没有要求重新开价格或者没有按照小数点后的数字正常化,错误129 (ERR_INVALID_PRICE)将会生成. 如果请求开价格的日期完全过期,错误138 (ERR_REQUOTE)将会生成. 如果请求的价格是过时的,仓位只能够在当前价格位打开/只有当前价格位在price+-slippage范围内.
止损和赢利水平线不能够关闭市场. 最小距离的终止水平点可以使用MarketInfo ()函数得到MODE_STOPLEVEL参量。 在错误或水平位不正常停止情况下,错误130 (ERR_INVALID_STOPS)将会生成.
在挂单的位置,开价格不能够终止市场活动. 最小距离的终止水平点可以使用MarketInfo ()函数得到MODE_STOPLEVEL参量。 在错误或水平位不正常停止情况下,错误130 (ERR_INVALID_STOPS)将会生成.
挂单交易的期限在一些服务器上禁止应用。这种情况下,一个特殊的非零值的参量将会产生,错误 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,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());
本文地址:https://www.waihuibang.com/fxschool/autotrading/mql4/40699.html