手机版

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());

本文标题:EA编程教程大全之交易函数 - MT4平台MQL4编程学习
本文地址:http://www.waihuibang.com/fxschool/autotrading/mql4/40699.html

相关文章

  • 历史回测非常好的EA能不能直接实盘?

    历史回测非常好的EA能不能直接实盘?答案是否定的。 MT4历史数据回测最好的用途是快速检验EA的逻辑符合性,即验证EA是否能够严格按照预定的策略执行。 鉴于历史数据不完整和人工编造等原因,一个表现良好的EA并不意味着...

    MQL4编程学习
  • MQL4自定义指标编写相关函数(二)

    本组函数用于设计和编写自定义指标。这些函数不能用在智能交易和脚本中。IndicatorBuffers() &#8211; 指标数据缓冲区 IndicatorCounted() &#8211; 指标计数 IndicatorDigits() &#8211; 设置指标精度 Indi...

    MQL4编程学习
  • MT4编程初级手册(8):循环语句

    一幅K线图有几千上万条K线(Bar,根据设定的样本数),每根K线Bar又各有开收盘价、收盘价、最高低价等数值,而且还有很多移动平均线、MACD、RSI等技术指标数值。 面对大量的数据,我们经常采用循环来实现数据的取值和赋值。下...

    MQL4编程学习
  • MT4 EA制作速成班――基础篇

    # 什么是MT4? 我就当你了解什么是MT4了 MT4就是META. TRADER 4# 什么是EA? 我也当你了解什么是EA了 EA 就是 Expert Adviser EA 就是智能交易系统 智能教育系统就是: -软件自己判断下订单 -软件自己判断提成利润 -软件自己...

    MQL4编程学习
  • 外汇顺势交易系统

    选择默认交易货币GPB/USD,EURUSD,USDJPY其他货币不太适合本EA。 顺势自动化交易策略,它的基本原理是开盘一定时间内突破前一个市场的最高价或最低价顺势做多或做空,经过对止损止盈等参数的优化这套系统可以应用到...

    MQL4编程学习
你可能感兴趣