myeatrade

博客

MQL4交易函数常见错误代码及处理意见

任何交易相关操作(OrderSend(), OrderClose(), OrderCloseBy(), OrderDelete()OrderModify()函数)都会因为些原因导致失败,返回负的订单号或FALSE,我们通过调用GetLastError()函数能找出失败的原因。每一个错误必须以不同的方式加以处理,最常见的错误和处理建议如下:

常数 描述
ERR_NO_ERROR 0 交易成功。
ERR_NO_RESULT 1 OrderModify()试图用个同样的值替换原先已设定好的值。应该修改其中一个或多个值,再反复尝试修改。
ERR_COMMON_ERROR 2 常规错误。直到查清错误为止,所有交易必须停止运行。 如果需要客户端和交易系统必须重启。
ERR_INVALID_TRADE_参量 3 无效参量, 例如, 货币对错误,未知交易业务, 不存在订单号等等。程序逻辑必须修改。
ERR_SERVER_BUSY 4 交易服务器忙。稍后请重新尝试。
ERR_OLD_VERSION 5 客户端的旧版本。需要安装客户端的最新版本。
ERR_NO_CONNECTION 6 交易服务器没有连接。需要确认连接没有断开(例如,应用IsConnected函数) 过一段时间(5秒之后)重试。
ERR_TOO_FREQUENT_REQUESTS 8 交易请求过于频繁。过于频繁的交易请求必须减少,程序逻辑需要修改。
ERR_ACCOUNT_DISABLED 64 账户被禁用。所有运行交易必须停止。
ERR_INVALID_ACCOUNT 65 账号无效。所有运行交易必须停止。
ERR_TRADE_TIMEOUT 128 交易超时。在重试前(至少1分钟)必须确认交易业务确实没有成功(存在未修改或未删除的定单)
ERR_INVALID_PRICE 129 无效开价或报价格。稍后必须刷新数据,应用RefreshRates函数重试。 如果错误没有消失,尝试停止所有运行交易,修改程序逻辑。
ERR_INVALID_STOPS 130 止损止盈离现价太近或是价格计算错误。一般修改止损止盈距离。
ERR_INVALID_TRADE_VOLUME 131 无效交易量。 尝试停止所有运行交易,改变程序逻辑。
ERR_MARKET_CLOSED 132 市场关闭。稍后重新尝试。
ERR_TRADE_DISABLED 133 交易被禁止。所有运行交易必须停止。
ERR_NOT_ENOUGH_MONEY 134 资金不足无法交易。稍后用小额的资金重试,确定有足够的资金完成交易。
ERR_PRICE_CHANGED 135 价格已经改变,应用RefreshRates()函数重试。
ERR_OFF_QUOTES 136 没有报价没有报价。由于有多种原因,交易商不提供价格或拒绝提供价格(比方说,本场交易价格未启动,价格不确定,市场变化太快)。延时5秒后,有必要用RefreshRates函数更新数据,再重试。
ERR_REQUOTE 138 请求的报价已过时,或者买价和卖价混淆。延时5秒后,有必要使用RefreshRates()函数刷新数据再次重试。如果错误依然没有消失,尝试停止所有运行交易,修改程序。
ERR_ORDER_LOCKED 139 交易定单被锁住,正在处理中。尝试停止所有运行交易,修改程序逻辑。
ERR_LONG_POSITIONS_ONLY_ALLOWED 140 只允许买进。禁止卖出。
ERR_TOO_MANY_REQUESTS 141 请求过多。必须减少请求次数,程序逻辑需要修改。
  142 定单按次序排列。它不是一个错误,而是客户端和交易服务器之间一个代码。在交易执行期间,碰巧连接断开或重新连接时,这种代码的出现次数非常少。此代码和错误代码128一样处理。
  143 定单已经被执行交易商接受。它不是一个错误,而是客户端和交易服务器之间一个代码。它和代码142出现的原因一样,处理方法参照错误128。
  144 在手动确认期间,定单已经被客户放弃。它不是一个错误,而是客户端和交易服务器之间一个代码。
ERR_TRADE_MODIFY_DENIED 145 由于定单太接近市价或被锁定,修改被否定。延时15秒后,用RefreshRates函数更新数据再次重试。
ERR_TRADE_CONTEXT_BUSY 146 交易线程忙。只有在IsTradeContextBusy()函数返回FALSE后重试。
ERR_TRADE_EXPIRATION_DENIED 147 交易商否定挂单过期使用。如果期限为零,交易可以重试。
ERR_TRADE_TOO_MANY_ORDERS 148 开仓和挂单交易总数已经达到经纪商设定的限度。只有在现有仓位平单或挂单删除之后才可以新开仓或挂单。
ERR_TRADE_HEDGE_PROHIBITED 149 当对冲功能被关闭时,尝试开仓一个和现有仓位相反的订单。首先必须平掉现有仓位,停止所有此类交易操作或者修改程序逻辑。
ERR_TRADE_PROHIBITED_BY_FIFO 150 尝试关闭一个违反FIFO规则的订单。 首先平掉之前的仓位,停止所有此类交易操作或者修改程序逻辑。

MQL4交易处理函数(二)

从自定义指标中不能调用OrderSend()、OrderClose()、OrderCloseBy()、OrderDelete()和OrderModify()交易函数。

本组交易函数应用于智能交易和脚本中。只有智能交易设置中的“允许实时交易”属性被选中,才能调用交易函数。

为了在智能交易和脚本中进行交易,在程序交易环境(智能交易和脚本的自动交易的环境)中,只能为它提供一个线程。这就是为什么,如果这个交易环境被一个智能交易操作占用,因此会出现146错误(ERR_TRADE_CONTEXT_BUSY),其他智能交易或脚本在此时就不能调用成功。为了能确定是否有交易在进行,可使用 IsTradeAllowed() 函数检测。为了清除交易环境下访问共享,我们能够使用个基于全局变量的交易信号,其值可以使用 GlobalVariableSetOnCondition() 函数改变。

MQL4交易函数常见错误代码及处理意见

 

OrderOpenPrice() – 获取订单开仓价格

double OrderOpenPrice()

返回当前订单的开仓价格。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10, SELECT_BY_POS)==true)
    Print("对于定单10的开仓价格",OrderOpenPrice());
  else
    Print("OrderSelect返回错误",GetLastError());

OrderOpenTime() – 获取订单开仓时间

datetime OrderOpenTime()

返回当前订单的开仓时间。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10, SELECT_BY_POS)==true)
    Print("定单10 开仓时间",OrderOpenTime());
  else
    Print("OrderSelect 返回的错误 ",GetLastError());

OrderPrint() – 打印订单信息

void OrderPrint()

按以下格式打印日志中当前定单信息:

定单编号; 买入时间; 交易业务; 手数总数; 开仓价格; 止损价格; 止盈价格; 平仓时间; 平仓价格; 佣金; 掉期; 盈利; 注释; 魔术编码; 挂单有效日期

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10, SELECT_BY_TICKET)==true)
    OrderPrint();
  else
   Print("OrderSelect 失败错误代码是",GetLastError());

OrderProfit() – 获取订单盈利金额

double OrderProfit()

返回当前订单的盈利金额(除掉期和佣金外)。对于开仓订单当前为浮动盈利。对于已平仓订单为固定盈利。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10, SELECT_BY_POS)==true)
    Print("定单 10 盈利",OrderProfit());
  else
    Print("OrderSelect返回的错误",GetLastError());

OrderSend() – 发出订单

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),只有最新卖价或买价可以当作开仓价来用。如果执行与当前货币对不同的交易,必须使用带有MODE_BID或MODE_ASK参数的Marketlnfo() 函数获得要买的货币对最新的报价。预测或是不标准的价格不可用。

如果在市场的报价中没有所要的开仓价或者没有按照小数点后位数的要求标准化,将会导致129错误(ERR_INVALID_PRICE)。如果要求的开仓价日期已经过期,将会导致138错误(ERR_REQUOTE)。如果请求的价格过期了,但是还处于市价里,就以现价或仍在price+-slippage(现价+-滑点)范围内现价开仓。

止损价和止盈价不能太靠近市价。最小的止损点数可以使用带MODE_STOPLEVEL参数的 MarketInfo() 函数得到。在出错或止损位设置不正确的情况下,将会导致130错误(ERR_INVALID_STOPS)。

在发出挂单时,开盘价也不能太靠近市价。挂单价和当前市价之间最小的点数可以使用带MODE_STOPLEVEL参数的 MarketInfo() 函数得到。在挂单开盘价错误的情况下,将会导致130错误(ERR_INVALID_STOPS)。

挂单交易的过期时间在一些交易服务器上被禁用。在这种情况下,如果expiration(过期)参数指定了非零值,反而会导致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);
       }
    }

OrdersHistoryTotal() – 获取历史订单总数

int OrdersHistoryTotal()

返回载入到终端账户历史表中已平仓订单数。历史表的范围大小取决于终端”Accounthistory(账户历史)”标签中当前设置。

示例:

  // 来自交易历史的订单信息
  int i,hstTotal=OrdersHistoryTotal();
  for(i=0;i<hstTotal;i++)
    {
     //---- 检查选择结果
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("访问历史表失败,错误信息:",GetLastError());
        break;
       }
     // 订单的一些工作

OrderStopLoss() – 获取订单止损值

double OrderStopLoss()

返回当前订单的止损值。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(ticket,SELECT_BY_POS)==true)
    Print("对于10 止损值", OrderStopLoss());
  else
   Print("OrderSelect 失败错误代码是",GetLastError());

OrdersTotal() – 获取订单总数

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

OrderSwap() – 获取订单掉期值

double OrderSwap()

返回当前订单的掉期值。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(order_id, SELECT_BY_TICKET)==true)
    Print("对于定单 #", order_id, "掉期", OrderSwap());
  else
   Print("OrderSelect 失败错误代码是",GetLastError());

OrderSymbol() – 获取订单交易品种

string OrderSymbol()

返回当前订单的交易品种名称。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(12, SELECT_BY_POS)==true)
    Print("定单 #", OrderTicket(), " 货币对是", OrderSymbol());
  else
   Print("OrderSelect 失败错误代码是",GetLastError());

OrderTakeProfit() – 获取订单止盈值

double OrderTakeProfit()

返回当前订单的止盈值。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(12, SELECT_BY_POS)==true)
    Print("定单 #",OrderTicket()," 盈利: ", OrderTakeProfit());
  else
    Print("OrderSelect() 返回错误 - ",GetLastError());

OrderTicket() – 获取订单的订单编号

int OrderTicket()

返回当前订单的订单编号。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(12, SELECT_BY_POS)==true)
    order=OrderTicket();
  else
   Print("OrderSelect 失败错误代码",GetLastError());

OrderType() – 获取订单交易类型

int OrderType()

返回当前订单的交易类型。可以是 交易类型列表 下的值

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  int order_type;
  if(OrderSelect(12, SELECT_BY_POS)==true)
    {
     order_type=OrderType();
     // ...
    }
  else
    Print("OrderSelect() 返回错误 - ",GetLastError());

MQL4交易处理函数(一)

从自定义指标中不能调用OrderSend()、OrderClose()、OrderCloseBy()、OrderDelete()和OrderModify()交易函数。

本组交易函数应用于智能交易和脚本中。只有智能交易设置中的“允许实时交易”属性被选中,才能调用交易函数。

为了在智能交易和脚本中进行交易,在程序交易环境(智能交易和脚本的自动交易的环境)中,只能为它提供一个线程。这就是为什么,如果这个交易环境被一个智能交易操作占用,因此会出现146错误(ERR_TRADE_CONTEXT_BUSY),其他智能交易或脚本在此时就不能调用成功。为了能确定是否有交易在进行,可使用 IsTradeAllowed() 函数检测。为了清除交易环境下访问共享,我们能够使用个基于全局变量的交易信号,其值可以使用 GlobalVariableSetOnCondition() 函数改变。

MQL4交易函数常见错误代码及处理意见

 

OrderSelect() – 选择订单

bool OrderSelect(int index, int select, void pool)

本函数选择一个订单,等待做进一步地处理。如果函数成功,返回TRUE,如果函数失败,返回FALSE。想要获得详细错误信息,请调用GetLastError()函数。

如果通过订单编号选定定单,pool参数应忽略。此订单编号是其唯一识别符。找出所选订单的列表,对订单时间进行分析。如果订单时间为零,此订单就是开单或挂单,或从终端开仓部位列表中选出。我们可以从订单类型区别开单和挂单。如果订单的平仓时间不等于0,此订单就是一个已经平仓的订单,或是一个已删除的挂单,也可能是从终端历史中被选出来的,他们同样可以根据定单类型相互区别。

参数:

index  - 定单索引或订单号,这取决于第2个参数 
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());

OrderClose() – 平仓

bool OrderClose(int ticket, double lots, 
                double price, int slippage, void Color)

定单平仓。如果函数执行成功,返回TRUE。如果函数执行失败,返回FALSE。想要获得详细错误信息,请调用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);
    }

OrderCloseBy() – 相反头寸平仓

bool OrderCloseBy(int ticket, int opposite, void Color)

用相反定单对打开仓位进行平仓操作。如果函数成功,返回TRUE。如果函数失败,返回FALSE。获得详细错误信息,请查看GetLastError()函数。

参数:

ticket   - 订单号。 
opposite - 相反订单的订单号。 
Color    - 图表中平仓箭头颜色。如果参数丢失或用CLR_NONE值,将不会在图表中画出。 

示例:

  if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
    {
     OrderCloseBy(order_id,opposite_id);
     return(0);
    }

OrderClosePrice() – 获取订单平仓价格

double OrderClosePrice()

获取订单平仓价格。对于已经平仓的订单返回平仓时价格,对于未平仓订单返回该订单货币对的实时价格。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(ticket,SELECT_BY_POS)==true)
    Print("对于订单的收盘价格",OrderClosePrice());
  else
    Print("OrderSelect 失败错误代码是",GetLastError());

OrderCloseTime() – 获取订单平仓时间

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

OrderComment() – 获取订单注释

string OrderComment()

返回当前订单的注释。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  string comment;
  if(OrderSelect(10,SELECT_BY_TICKET)==false)
    { Print("OrderSelect 失败错误代码是",GetLastError());
     return(0);
    }
  comment = OrderComment();
  // ...

OrderCommission() – 获取订单佣金数额

double OrderCommission()

返回当前订单的佣金数额。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("定单10 "佣金,OrderCommission());
  else
   Print("OrderSelect 失败错误代码是",GetLastError());

OrderDelete() – 删除挂单

bool OrderDelete(int ticket, void Color)

删除指定订单的挂单。如果函数成功,返回TRUE。如果函数失败,返回FALSE。获得详细错误信息,请查看GetLastError()函数。

参数:

ticket   - 要删除的订单(挂单)号。  
Color    - 图表中平仓箭头颜色。如果参数丢失或用CLR_NONE值,将不会在图表中画出。 

示例:

  if(Ask>var1)
    {
     OrderDelete(order_ticket);
     return(0);
    }

OrderExpiration() – 获取挂单有效时间

datetime OrderExpiration()

返回当前挂单的有效时间。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10, SELECT_BY_TICKET)==true)
    Print("定单 #10 有效日期为",OrderExpiration());
  else
    Print("OrderSelect 返回的",GetLastError()错误);

OrderLots() – 获取订单交易手数

double OrderLots()

返回当前订单的交易手数。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("定单 10 交易手数",OrderLots());
  else
    Print("OrderSelect 返回的 ",GetLastError()错误);

OrderMagicNumber() – 获取订单魔术编号

int OrderMagicNumber()

返回当前订单的魔术编号。

注:定单必须用 OrderSelect() 函数提前选定。

示例:

  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("定单 10 的魔术编号", OrderMagicNumber());
  else
    Print("OrderSelect 返回的 ",GetLastError()错误);

OrderModify() – 修改订单

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 -   挂单有效时间。(对于挂单有效)  
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);
          }
       }
    }

MQL4窗口数据处理函数(二)

 

WindowOnDropped() – 获取窗口索引

int WindowOnDropped()

返回应用了智能交易、自定义指标和脚本的窗口索引。只有智能交易、自定义指标或脚本被鼠标拖到窗口上,这个值才是有效的。

注:对于那些被初始化函数调用的自定义指标(通过init()函数调用),此索引没有被定义。

返回的索引就是运行自定义指标的窗口编号(0一图表主菜单,指标子窗口从1开始编号)。在自定义指标运行期间,它可以自己创建新的子窗口,并且这个子窗口的编号和那些真正用鼠标把指标拖过去应用的窗口是不同的。

参见 WindowXOnDropped()WindowYOnDropped()

示例:

if(WindowOnDropped()!=0)
  {
   Print("指标'MyIndicator'必须应用到主图表窗口!");
   return(false);
  }

WindowPriceMax() – 获取窗口纵坐标刻度最大值

double WindowPriceMax(void index)

返回当前图表指定的子窗口纵坐标刻度的最大值(0-图表主窗口,指标子窗口编号从1开始)。如果子窗口索引没有指定,将返回主图表窗口价格刻度的最大值。

参见WindowPriceMin(), WindowFirstVisibleBar(), WindowBarsPerChart()

参数:

index - 图表子窗口索引(0-图表主窗口)。

示例:

double   top=WindowPriceMax();
double   bottom=WindowPriceMin();
datetime left=Time[WindowFirstVisibleBar()];
int      right_bound=WindowFirstVisibleBar()-WindowBarsPerChart();
if(right_bound<0) right_bound=0;
datetime right=Time[right_bound]+Period()*60;
//----
ObjectCreate("Padding_rect",OBJ_RECTANGLE,0,left,top,right,bottom);
ObjectSet("Padding_rect",OBJPROP_BACK,true);
ObjectSet("Padding_rect",OBJPROP_COLOR,Blue);
WindowRedraw();

WindowPriceMin() – 获取窗口纵坐标刻度最小值

double WindowPriceMin(void index)

返回当前图表指定的子窗口纵坐标刻度的最小值(0-图表主窗口,指标子窗口编号从1开始)。如果子窗口索引没有指定,将返回主图表窗口价格刻度的最小值。

参见 WindowPriceMax(), WindowFirstVisibleBar(), WindowBarsPerChart()

参数:

index - 图表子窗口索引(0-图表主窗口)。

示例:

double   top=WindowPriceMax();
double   bottom=WindowPriceMin();
datetime left=Time[WindowFirstVisibleBar()];
int      right_bound=WindowFirstVisibleBar()-WindowBarsPerChart();
if(right_bound<0) right_bound=0;
datetime right=Time[right_bound]+Period()*60;
//----
ObjectCreate("Padding_rect",OBJ_RECTANGLE,0,left,top,right,bottom);
ObjectSet("Padding_rect",OBJPROP_BACK,true);
ObjectSet("Padding_rect",OBJPROP_COLOR,Blue);
WindowRedraw();

WindowPriceOnDropped() – 获取下滑价格

double WindowPriceOnDropped()

返回图表点的智能交易或脚本价格下滑价格。只有智能交易、自定义指标或脚本被鼠标拖到窗口上,这个值才是有效的。

注:对于自定义指标,这个值是不确定的。

示例:

  double   drop_price=WindowPriceOnDropped();
  datetime drop_time=WindowTimeOnDropped();
  //---- 可能未指定 (zero)
  if(drop_time>0)
    {
     ObjectCreate("价格下滑水平", OBJ_HLINE, 0, drop_price);
     ObjectCreate("下滑时间", OBJ_VLINE, 0, drop_time);
    }

WindowRedraw() – 重绘当前图表

void WindowRedraw()

强制重画当前图表。在货币对属性改变之后,通常会应用本函数。

示例:

  //---- 设置货币对新属性
  ObjectMove(object_name1, 0, Time[index], price);
  ObjectSet(object_name1, OBJPROP_ANGLE, angle*2);
  ObjectSet(object_name1, OBJPROP_FONTSIZE, fontsize);
  ObjectSet(line_name, OBJPROP_TIME2, time2);
  ObjectSet(line_name, OBJPROP_ANGLE, line_angle);
  //---- 现在重画
  WindowRedraw();

WindowScreenShot() – 窗口图表快照

bool WindowScreenShot(string filename, int size_x, 
                      int size_y, void start_bar, 
                      void chart_scale, void chart_mode)

以GIF文件形式保存当前图表图像。如果失败,返回FALSE,想要得到详细的错误信息,请调用 GetLastError() 函数。

屏幕快照保存在terminal_dir\experts\files (terminal_dir\tester\files 测试情况下)目录或其子目录中。

参数:

filename    - 保存屏幕快照的文件名称。 
size_x      - 屏幕宽度(像素)。 
size_y      - 屏幕高度(像素)。 
start_bar   - 屏幕快照中第一个可见柱子。如果价格值设定为0,当前第个可见柱子将被除去。如果价格值未设置或为负值,图表尾部图像将会生成。 
chart_scale - 屏幕快照图表的水平刻度。范围可以从0到5,如果没有值或设为负值,将直接使用当前图表刻度。 
chart_mode  - 图表显示模式。可以采用下列值:
              CHART_BAR   (以柱体形式显示)
              CHART_CANDLE (以K线形式显示)
              CHART_LINE   (以收盘价线显示)。
                如果没有值或设为负值,图表会以当前模式显示。 

示例:

  int lasterror=0;
  //----测试模式下平仓
  if(IsTesting() && ExtTradesCounter<TradesTotal())
    {
     //---- 使用 WindowScreenShot 进行检测
     if(!WindowScreenShot("shots\\tester"+ExtShotsCounter+".gif",640,480))
        lasterror=GetLastError();
     else ExtShotsCounter++;
     ExtTradesCounter=TradesTotal();
    }

WindowTimeOnDropped() – 价格下滑时间

datetime WindowTimeOnDropped()

返回图表点的智能交易或脚本价格下滑时间部分。只有智能交易、自定义指标或脚本被鼠标拖到窗口上,这个值才是有效的。

注:对于自定义指标,这个值是不确定的。

示例:

  double   drop_price=WindowPriceOnDropped();
  datetime drop_time=WindowTimeOnDropped();
  //---- 可能未指定 (zero)
  if(drop_time>0)
    {
     ObjectCreate("Dropped price line", OBJ_HLINE, 0, drop_price);
     ObjectCreate("Dropped time line", OBJ_VLINE, 0, drop_time);
    }

WindowsTotal() – 获取指标窗口数

int WindowsTotal()

返回在图表中指标窗口数(包括主图表)。

示例:

Print("窗口数 = ", WindowsTotal()); 

WindowXOnDropped() – x轴下滑像素值

int WindowXOnDropped()

在图表窗口的客户区域点,应用了智能交易或脚本,当鼠标拖动时,返回X轴上的下滑点像素值。当以映像点x轴智能交易或脚本下滑时,返回价格值。

只有在智能交易或脚本应用鼠标技术(”拖曳”)的情况下,这个值是准确的。

参见WindowYOnDropped(), WindowOnDropped()

示例:

Print("智能交易下滑点 x=",WindowXOnDropped()," y=",WindowYOnDropped());

WindowYOnDropped() – y轴下滑像素值

int WindowYOnDropped()

在图表窗口的客户区域点,应用了智能交易或脚本,当鼠标拖动时,返回Y轴上的下滑点像素值。当以映像点Y轴智能交易或脚本下滑时,返回价格值。

只有在智能交易或脚本应用鼠标技术(”拖曳”)的情况下,这个值是准确的。

参见 WindowXOnDropped(), WindowPriceOnDropped(), WindowOnDropped()

示例:

Print("智能交易下滑点 x=",WindowXOnDropped()," y=",WindowYOnDropped());

MQL4窗口数据处理函数(一)

 

HideTestIndicators() – 隐藏测试指标

void HideTestIndicators(bool hide)

本函数设置一个供智能交易调用的隐藏指标标志。在智能交易测试完成,打开了相应的图表,标出过的指标将不会出现在测试图表中。每个调用过的指标将首先用当前隐藏的标志标记。

特别要注意到,只有那些直接从智能交易调用的指标才可以在测试图表中画出。

参数:

hide - 如果需要隐藏指标为TRUE,否则为FALSE。

示例:

   HideTestIndicators(true);
   MaCurrent=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,56,0,MODE_EMA,PRICE_CLOSE,1);
   HideTestIndicators(false);

Period() – 获取图表时段

int Period()

返回当前窗口在用时段(图表周期)的分钟总数。

示例:

  Print("时间周期 ", Period());

RefreshRates() – 刷新数据

bool RefreshRates()

刷新预定义变量和序列数组中数据。当智能交易计算时间过长时,本函数可以自动更新数据。如果数据被更新,返回TRUE,否则,返回FALSE。数据不被更新的唯一原因就是他们是客户端的当前数据。

智能交易和脚本只处理它们自己的历史数据的副本。在智能交易和脚本第一次启动的时候,当前货币对数据就已经被复制过。每次钊能交易或脚本启动时,会更新最初得到的副本。在智能交易和脚本运行时,可能会收到一个或多个新的步进数据,现有数据可能会过期。

示例:

   int ticket;
   while(true)
     {
      ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,CLR_NONE);
      if(ticket<=0)
        {
         int error=GetLastError();
         //---- 资金不足
         if(error==134) break;
         //---- 等待 10 秒钟
         Sleep(10000);
         //---- 刷新价格数据
         RefreshRates();
         break;
        }
      else
        {
         OrderSelect(ticket,SELECT_BY_TICKET);
         OrderPrint();
         break;
        }
     }

Symbol() – 获取图表货币对名称

string Symbol()

返回当前窗口图表货币对名称。

示例:

   int total=OrdersTotal();
   for(int pos=0;pos<total;pos++)
     {
      // 因为此时可能平仓或删除定单,检测选择结果!
      if(OrderSelect(pos, SELECT_BY_POS)==false) continue;
      if(OrderType()>OP_SELL || OrderSymbol()!=Symbol()) continue;
      // 执行过程...
     }

WindowBarsPerChart() – 获取图表中柱体总数

int WindowBarsPerChart()

返回当前窗口图表可见柱体(K线)总数。

示例:

// 对于可见柱工作。
int bars_count=WindowBarsPerChart();
int bar=WindowFirstVisibleBar();
for(int i=0; i<bars_count; i++,bar--)
  {
   // ...
  }

WindowExpertName() – 获取图表上程序名称

string WindowExpertName()

返回智能交易、脚本、自定义指标和库的名称,这取决于MQL4程序的调用。

示例:

string name=WindowExpertName();
GlobalVariablesDeleteAll(name);

WindowFind() – 搜索图表上指标

int WindowFind(string name)

如果发现有名称的指标,本函数返回包含指定指标的窗口索引,否则,返回-1。

参数:

name - 指标名称。

示例:

int win_idx=WindowFind("MACD(12,26,9)");

WindowFirstVisibleBar() – 获取图表上第一个显示的柱体

int WindowFirstVisibleBar()

本函数在当前图表窗口中返回第1个显示的柱体(K线)。必须考虑到价格柱子的逆序编号,即从最后个价格到第个价格排列。在价格数组中当前柱子是最新的,索引为0,最老的柱子索引为 Bars-1。如果第一个显示的柱子编号为2或更高,但少于图表中能显示的柱子总数,这就意味着图表窗口没有完全填满,离窗口侧边还有空白。

示例:

   // 可见柱的工作
   int bars_count=WindowBarsPerChart();
   int bar=WindowFirstVisibleBar();
   for(int i=0; i<bars_count; i++,bar--)
     {
      // ...
     }

WindowHandle() – 获取图表句柄

int WindowHandle(string symbol, int timeframe)

返回包含特定图表的系统窗口句柄。如果图表在函数调用时还没有打开,返回为0。

参数:

symbol - 货币对名称。
timeframe - 时段。可以是任意的时段枚举值,0意味着使用当前图表中时段。

示例:

  int win_handle=WindowHandle("USDX",PERIOD_H1);
  if(win_handle!=0)
    Print("发现带有USDX,H1 的窗口。数组将会被立即复制。");

WindowIsVisible() – 图表是否可见

bool WindowIsVisible(int index)

如果图表子窗口可见,返回TRUE,否则,返回FALSE。由于指标的可视属性可以放置在图表子窗口里,图表子窗口能被隐藏。

参数:

index - 图表子窗口索引。

示例:

  int win_handle=WindowHandle("USDX",PERIOD_H1);
  if(win_handle!=0)
    Print("发现带有USDX,H1 的窗口。数组将会被立即复制。");

MQL4价格数据相关函数

用于获取货币对/时段内价格数据的一组函数。

如果请求数据(货币对名称/时段不同于当前图表)来自其他图表,这种情况可能是相应的图表没有在客户端内打开,并且需要从服务器端下载数据。这种情况下,错误信息ERR_HISTORY_WILL_UPDATED(4066-请求的历史数据正在更新中)将被放置到last_error变量中,并且不得不重新请求更新(参看ArrayCopySeries()范例)。

在测试中,同货币对价格数据或不同时段的价格数据被精确地模拟(除成交量外)。其他时段的成交量不模拟,其它货币对的价格数据同样也不模拟。无论何种情况,一个时段内柱子总数会被精确地模拟。

 

iBars() – 获取柱体数

int iBars(string symbol, int timeframe)

返回指定的图表中柱体(K线)的数量。

对于当前图表,柱子数量的信息保存在预定义的变量Bars中。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。

示例:

Print("'EURUSD'在PERIOD_H1时段的柱数:",iBars("EUROUSD",PERIOD_H1)); 

iBarShift() – 搜索指定柱体

int iBarShift(string symbol, int timeframe, datetime time, void exact)

根据开盘时间搜索柱体(K线)。本函数返回带指定开盘时间的柱体。如果带指定开盘时间的柱体丢失,函数将返回-1或最近的柱体,这取决护exact参数设置。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
time - 柱体(K线)的开盘时间。
exact - 未发现柱子的返回模式。false-返回最近的柱子,true-返回-1。

示例:

datetime some_time=D'2004.03.21 12:00';
  int      shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
  Print("带有打开时间的柱体 ",TimeToStr(some_time)," 是 ",shift);

iClose() – 获取柱体收盘价

double iClose(string symbol, int timeframe, int shift)

返回带有时段和偏移量的指定货币对柱体(K线)的收盘价。如果本地历史表为空(历史数据未加载),函数返回0。

对于当前图表,收盘价的信息保存在 预定义数组Close[] 中。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。

示例:

Print("对于 USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ",  iOpen("USDCHF",PERIOD_H1,i),", ",
                                      iHigh("USDCHF",PERIOD_H1,i),", ",  iLow("USDCHF",PERIOD_H1,i),", ",
                                      iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));

iHigh() – 获取柱体最高价

double iHigh(string symbol, int timeframe, int shift)

返回带有时段和偏移量的指定货币对柱体(K线)的最高价。如果本地历史表为空(历史数据未加载),函数返回0。

对于当前图表,最盘价的信息保存在 预定义数组High[] 中。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。

示例:

Print("对于 USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ",  iOpen("USDCHF",PERIOD_H1,i),", ",
                                      iHigh("USDCHF",PERIOD_H1,i),", ",  iLow("USDCHF",PERIOD_H1,i),", ",
                                      iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));

iHighest() – 柱体最高值偏移量

int iHighest(string symbol, int timeframe, int type, void count, void start)

根据类型返回在一个指定时间周期内最大值的偏移量。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
type      - 序列数组的识别符。它可以是 序列数据识别符枚举 的任意值。
count     - 要计算出的周期数(沿着开头柱子到后而柱子的方向)。
start     - 开始柱子,相对于当前柱子,开始采集数据的柱子。

示例:

double val;
  // 在20个连续柱子范围内计算最大值
  // 在当前图表上从第4个至第23个的索引
  val=High[iHighest(NULL,0,MODE_HIGH,20,4)];

iLow() – 获取柱体最低价

double iLow(string symbol, int timeframe, int shift)

返回带有时段和偏移量的指定货币对柱体(K线)的最低价。如果本地历史表为空(历史数据未加载),函数返回0。

对于当前图表,最盘价的信息保存在 预定义数组Low[] 中。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。

示例:

Print("对于 USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ",  iOpen("USDCHF",PERIOD_H1,i),", ",
                                      iHigh("USDCHF",PERIOD_H1,i),", ",  iLow("USDCHF",PERIOD_H1,i),", ",
                                      iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));

iLowest() – 柱体最低值偏移量

int iLowest(string symbol, int timeframe, int type, void count, void start)

根据类型返回在一个指定时间周期内最低值的偏移量。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
type      - 序列数组的识别符。它可以是 序列数据识别符枚举 的任意值。
count     - 要计算出的周期数(沿着开头柱子到后而柱子的方向)。
start     - 开始柱子,相对于当前柱子,开始采集数据的柱子。

示例:

double val;
  // 在20个连续柱子范围内计算最小值
  // 在当前图表上从第4个至第23个的索引
  val=Low[iLowest(NULL,0,MODE_LOW,20,4)];

iOpen() – 获取柱体开盘价

double iOpen(string symbol, int timeframe, int shift)

返回带有时段和偏移量的指定货币对柱体(K线)的开盘价。如果本地历史表为空(历史数据未加载),函数返回0。

对于当前图表,最盘价的信息保存在 预定义数组Open[] 中。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。

示例:

Print("对于 USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ",  iOpen("USDCHF",PERIOD_H1,i),", ",
                                      iHigh("USDCHF",PERIOD_H1,i),", ",  iLow("USDCHF",PERIOD_H1,i),", ",
                                      iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));

iTime() – 获取柱体开盘时间

datetime iTime(string symbol, int timeframe, int shift)

返回带有时段和偏移量的指定货币对柱体(K线)的开盘时间。如果本地历史表为空(历史数据未加载),函数返回0。

对于当前图表,最盘价的信息保存在 预定义数组Time[] 中。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。

示例:

Print("对于 USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ",  iOpen("USDCHF",PERIOD_H1,i),", ",
                                      iHigh("USDCHF",PERIOD_H1,i),", ",  iLow("USDCHF",PERIOD_H1,i),", ",
                                      iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));

iVolume() – 获取柱体成交量

datetime iVolume(string symbol, int timeframe, int shift)

返回带有时段和偏移量的指定货币对柱体(K线)的成交量。如果本地历史表为空(历史数据未加载),函数返回0。

对于当前图表,最盘价的信息保存在 预定义数组Volume[] 中。

:该成交量并非真正意义上的成交量,这是一个估计值,其值为该K线下tick价格变动的数量,其背后的意义为如果tick价格变动很快,表示成交量越大;tick价格变动越慢,表示成交量越小。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。

示例:

Print("对于 USDCHF H1当前柱: ",iTime("USDCHF",PERIOD_H1,i),", ",  iOpen("USDCHF",PERIOD_H1,i),", ",
                                      iHigh("USDCHF",PERIOD_H1,i),", ",  iLow("USDCHF",PERIOD_H1,i),", ",
                                      iClose("USDCHF",PERIOD_H1,i),", ", iVolume("USDCHF",PERIOD_H1,i));

MQL4技术指标相关函数(四)

MQL4不仅可以计算当前图表中任何指标,还可以计算任何有效的货币对/图表时段的数据。如果请求数据(货币对名称/图表时段不同于当前图表)来自其他图表,出现这种情况如果相应的图表没有在客户端内打开,数据需要从服务器上下载。这种情况下,错误信息ERR_HISTORY_WILL_UPDATED(4066-历史数据正在更新中)将被放置于 last_error 变量中,需要再次请求更新数据(参见 ArrayCopySeries() 范例)。

 

iMFI() – 资金流量指标

double iMFI(string symbol, int timeframe, int period, int shift)

计算资金流量指标。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period    - 计算的周期数。    
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iMFI(NULL,0,14,0)>iMFI(NULL,0,14,1)) return(0);

iMA() – 移动平均线

double iMA(string symbol, int timeframe, int period, int ma_shift, 
           int ma_method, int applied_price, int shift)

计算移动平均线

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period        - MA计算的周期数。
ma_shift      - MA偏移量。 
ma_method     - MA方法。它可以是其中 任意移动平均计算方法。
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。    
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

iMAOnArray() – 基于数组计算移动平均线

double iMA(double array[], int total, int period, int ma_shift, 
           int ma_method, int shift)

基于数值型数组中数据,计算移动平均线。不同于 iMA() ,iMAOnArray函数并不通过货币对名称、图表时段、请求价格的方式获取数据,而是要求价格数据必须事先准备好,再从左边到右边计算指标。为了能按照序列数组那样存取数组元素(即从右到左),你必须使用 ArraySetAsSeries 函数。

参数:

array[]   - 需要计算数据的数组。 
total     - 要参与计算的元素个数。0意味着使用整个数组。 
period    - MA计算的周期数。
ma_shift  - MA偏移量。 
ma_method - MA方法。它可以是其中 任意移动平均计算方法。  
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

   double macurrent=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,0);
   double macurrentslow=iMAOnArray(ExtBuffer,0,10,0,MODE_LWMA,0);
   double maprev=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,1);
   double maprevslow=iMAOnArray(ExtBuffer,0,10,0,MODE_LWMA,1);
   //----
   if(maprev=macurrentslow)
     Alert("穿过");

iOsMA() – OsMA指标

double iOsMA(string symbol, int timeframe, 
             int fast_ema_period, int slow_ema_period,  
             int signal_period, int applied_price, int shift)

计算移动平均震荡指标。在一些系统中显示为 MACD 直方柱。

参数:

symbol          - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe       - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
fast_ema_period - 快速移动平均线计算的周期数。
slow_ema_period - 慢速移动平均线计算的周期数。
signal_period   - 信号线移动平均计算的周期数。
applied_price   - 应用的价格。它可以是 应用价格枚举 的任意值。    
shift           - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iOsMA(NULL,0,12,26,9,PRICE_OPEN,1)>iOsMA(NULL,0,12,26,9,PRICE_OPEN,0)) return(0);

iMACD() – MACD指标

double iMACD(string symbol, int timeframe, 
             int fast_ema_period, int slow_ema_period,  
             int signal_period, int applied_price, int shift)

计算MACDOsMA称作MACD直方柱。MACD和OsMA分别显示在不同的窗口。

参数:

symbol          - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe       - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
fast_ema_period - 快速移动平均线计算的周期数。
slow_ema_period - 慢速移动平均线计算的周期数。
signal_period   - 信号线移动平均计算的周期数。
applied_price   - 应用的价格。它可以是 应用价格枚举 的任意值。    
shift           - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0)) return(0);

iOBV() – OBV指标

double iOBV(string symbol, int timeframe, int applied_price, int shift)

计算OBV指标(On Balance Volume indicator)。

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。    
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iOBV(NULL, 0, PRICE_CLOSE, 1);

iSAR() – SAR抛物线指标

double iSAR(string symbol, int timeframe, double step, 
            double maximum, int shift)

计算SAR抛物线指标

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
step      - 步长(增量),通常为0.02。
maximum   - 最大值,通常为0.2。     
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iSAR(NULL,0,0.02,0.2,0)>Close[0]) return(0);

iRSI() – RSI指标

double iRSI(string symbol, int timeframe, int period, 
            int applied_price, int shift)

计算RSI指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period        - 计算的周期数。
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。    
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>iRSI(NULL,0,14,PRICE_CLOSE,1)) return(0);

iRSIOnArray() – 基于数组计算RSI指标

double iRSIOnArray(double array[], int total, int period, int shift)

基于数值型数组中数据,计算RSI。不同于 iRSI() ,iRSIOnArray函数并不通过货币对名称、图表时段、请求价格的方式获取数据,而是要求价格数据必须事先准备好,再从左边到右边计算指标。为了能按照序列数组那样存取数组元素(即从右到左),你必须使用 ArraySetAsSeries 函数。

参数:

array[] - 需要计算数据的数组。 
total   - 要参与计算的元素个数。0意味着使用整个数组。 
period  - 计算的周期数。   
shift   - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iRSIOnArray(ExtBuffer,1000,14,0)>iRSI(NULL,0,14,PRICE_CLOSE,1)) return(0);

iRVI() – RVI指标

double iRVI(string symbol, int timeframe, int period, 
            int mode, int shift)

计算RVI指标

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。0表示当前图表的时间周期。
period    - 计算的周期数。 
mode      - 指标线的标识符。可以是 指标线标示符 里对应值  
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iRVI(NULL, 0, 10,MODE_MAIN,0);

iStdDev() – 标准差指标

double iStdDev(string symbol, int timeframe, int ma_period, 
               int ma_shift, int ma_method, int applied_price, 
               int shift)

计算标准差指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
ma_period     - MA计算的周期数。
ma_shift      - MA偏移量。 
ma_method     - MA方法。它可以是其中 任意移动平均计算方法。
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。    
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iStdDev(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,0);

iStdDevOnArray() – 基于数组计算标准差

double iStdDevOnArray(double array[], int total, 
                     int ma_period, int ma_shift, 
                     int ma_method, int shift)

基于数值型数组中数据,计算标准差。不同于 iStdDev() ,iStdDevOnArray函数并不通过货币对名称、图表时段、请求价格的方式获取数据,而是要求价格数据必须事先准备好,再从左边到右边计算指标。为了能按照序列数组那样存取数组元素(即从右到左),你必须使用 ArraySetAsSeries 函数。

参数:

array[]   - 需要计算数据的数组。 total - 要参与计算的元素个数。0意味着使用整个数组。 
ma_period - MA计算的周期数。
ma_shift  - MA偏移量。 
ma_method - MA方法。它可以是其中 任意移动平均计算方法。    
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iStdDevOnArray(ExtBuffer,100,10,0,MODE_EMA,0);

iStochastic() – 随机震荡指标(KDJ)

double iStochastic(string symbol, int timeframe, 
                   int %Kperiod, int %Dperiod, 
                   int slowing, int method, 
                   int price_field, int mode, int shift)

计算随机震荡指标(KDJ指标)。

参数:

symbol      - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe   - 时间周期。 可以 时间周期列举 任意值。0表示当前图表的时间周期。
%Kperiod    - %K线周期数。
%Dperiod    - %D线周期数。
slowing     - 减速值(Slowing value)。
ma_method   - MA方法。可以是任意的移动平均计算方法。   
price_field - 价格参数。可以是下列值:
              0:Low/High 或者 1:Close/Close  
mode        - 指标线的标识符。可以是 指标线标示符 里对应值  
shift       - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
    return(0);

iWPR() – WPR指标(%R)

double iWPR(string symbol, int timeframe, int period, int shift)

计算WPR指标(%R指标)。

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period        - 计算的周期数。   
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iWPR(NULL,0,14,0)>iWPR(NULL,0,14,1)) return(0);

MQL4技术指标相关函数(三)

MQL4不仅可以计算当前图表中任何指标,还可以计算任何有效的货币对/图表时段的数据。如果请求数据(货币对名称/图表时段不同于当前图表)来自其他图表,出现这种情况如果相应的图表没有在客户端内打开,数据需要从服务器上下载。这种情况下,错误信息ERR_HISTORY_WILL_UPDATED(4066-历史数据正在更新中)将被放置于 last_error 变量中,需要再次请求更新数据(参见 ArrayCopySeries() 范例)。

 

iForce() – 强力指标

double iForce(string symbol, int timeframe, int period, 
              int ma_method, int applied_price, int shift)

计算强力指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period        - 计算的周期数  
ma_method     - MA方法。它可以是其中 任意移动平均计算方法
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。  
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iForce(NULL, 0, 13,MODE_SMA,PRICE_CLOSE,0);

iFractals() – 分型指标

double iForce(string symbol, int timeframe, int mode, int shift)

计算分型指标。

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
mode          - 指标线的标识符。可以是 指标线标示符 里对应值  
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iFractals(NULL, 0, MODE_UPPER, 3);

iGator() – 鳄鱼振荡指标

double iGator(string symbol, int timeframe, 
              int jaw_period, int jaw_shift, 
              int teeth_period, int teeth_shift, 
              int lips_period, int lips_shift, 
              int ma_method, int applied_price, 
              int mode, int shift)

计算比尔.威廉斯的鳄鱼振荡指标。 振荡指标在鳄鱼红线和蓝线(上部柱状图)之间以及红线和绿线(下部柱状图)之间显示是不同的。

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
jaw_period    - 蓝线平均周期(鳄鱼的下颌)
jaw_shift     - 蓝线偏移量
teeth_period  - 红线平均周期(鳄鱼的牙)
teeth_shift   - 红线偏移量
lips_period   - 绿线平均周期(鳄鱼的嘴唇)
lips_shift    - 绿线偏移量
ma_method     - MA方法。可以是任意的移动平均计算方法。
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。
mode          - 指标线的标识符。可以是以下任意值
                  MODE_GATORJAW - 鳄鱼下领(蓝色)指标线,
                  MODE_GATORTEETH - 鳄鱼牙(红色)指标线,
                  MODE_GATORLIPS - 鳄鱼嘴唇(绿色)指标线。   
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double jaw_val=iGator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_UPPER, 1);

iIchimoku() – Ichimoku云图指标

double iIchimoku(string symbol, int timeframe, int tenkan_sen, 
                 int kijun_sen, int senkou_span_b, 
                 int mode, int shift)

计算Ichimoku云图指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
tenkan_sen    - Tenkan-sen指标线的计算周期。 
kijun_sen     - Kijun-sen指标线的计算周期。
senkou_span_b - Senkou Span B指标线的计算周期。
mode          - 指标线的标识符。可以是 iIchimoku指标线标示符 里对应值  
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double tenkan_sen=iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, 1);

iBWMFI() – BWMFI指标

double iBWMFI(string symbol, int timeframe, int shift)

计算比尔.威廉斯的市场促进指数指标。

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iBWMFI(NULL, 0, 0);

iMomentum() – 动量指标

double iMomentum(string symbol, int timeframe, int period, 
                 int applied_price, int shift)

计算动量指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period        - 计算的周期数  
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。  
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iMomentum(NULL,0,12,PRICE_CLOSE,0)>iMomentum(NULL,0,20,PRICE_CLOSE,0)) return(0);

iMomentumOnArray() – 基于数组计算动量指标

double iMomentum(double array[], int total, int period, int shift)

基于数值型数组中数据,计算动量指标。不同于 iMomentum() ,iMomentumOnArray函数并不通过货币对名称、图表时段、请求价格的方式获取数据,而是要求价格数据必须事先准备好,再从左边到右边计算指标。为了能按照序列数组那样存取数组元素(即从右到左),你必须使用 ArraySetAsSeries 函数。

参数:

array[]       - 需要计算数据的数组。
total         - 要参与计算的元素个数。0意味着使用整个数组。 
period        - 计算的周期数    
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iMomentumOnArray(mybuffer,100,12,0)>iMomentumOnArray(mubuffer,100,20,0)) return(0);

MQL4技术指标相关函数(二)

MQL4不仅可以计算当前图表中任何指标,还可以计算任何有效的货币对/图表时段的数据。如果请求数据(货币对名称/图表时段不同于当前图表)来自其他图表,出现这种情况如果相应的图表没有在客户端内打开,数据需要从服务器上下载。这种情况下,错误信息ERR_HISTORY_WILL_UPDATED(4066-历史数据正在更新中)将被放置于 last_error 变量中,需要再次请求更新数据(参见 ArrayCopySeries() 范例)。

 

iBullsPower() – 牛力指标

double iBullsPower(string symbol, int timeframe, int period, 
                   int applied_price, int shift)

计算牛力指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
period        - 计算的周期数。 
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iBullsPower(NULL, 0, 13,PRICE_CLOSE,0);

iCCI() – CCI指标

double iCCI(string symbol, int timeframe, int period, 
                   int applied_price, int shift)

计算CCI指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
period        - 计算的周期数。 
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iCCI(NULL,0,12,PRICE_TYPICAL,0)>iCCI(NULL,0,20,PRICE_TYPICAL,0)) return(0);

iCCIOnArray() – 基于数组计算CCI指标

double iCCIOnArray(double array[], int total, int period, int shift)

基于数值型数组中数据,计算CCI指标。不同于 iCCI() ,iCCIOnArray函数并不通过货币对名称、图表时段、请求价格的方式获取数据,而是要求价格数据必须事先准备好,再从左边到右边计算指标。为了能按照序列数组那样存取数组元素(即从右到左),你必须使用 ArraySetAsSeries 函数。

参数:

array[]     - 需要计算数据的数组。
total       - 要参与计算的元素个数。0意味着使用整个数组。
period      - 计算的周期数。 
shift       - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iCCIOnArray(ExtBuffer,total,12,0)>iCCI(NULL,0,20,PRICE_TYPICAL, 0)) return(0);

iCustom() – 自定义指标

double iCustom(string symbol, int timeframe, string name, 
               ..., int mode, int shift)

计算指定的自定义指标并返回它的值。自定义指标程序文件(*.EX4文件)需要编译;并且自定义指标程序文件必须放在 terminal_directory\experts\indicators 目录内。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
name      - 自定义指标编译过的程序名。
...       - 参数设置(如果需要)。传递的参数和他们的顺序必须与自定义指标外部参数声明的顺序和类型一致。
mode      - 指标线索引。可以从0到7;仁且必须与 SetIndexBuffer函数 使用的索引一致。   
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iCustom(NULL, 0, "示例Ind",13,1,0);

iDeMarker() – DeMarker指标

double iDeMarker(string symbol, int timeframe, int period, int shift)

计算DeMarker指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
period        - 计算的周期数。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

 double val=iDeMarker(NULL, 0, 13, 1);

iEnvelopes() – Envelopes包络线指标

double iEnvelopes(string symbol, int timeframe, int ma_period, 
                  int ma_method, int ma_shift, int applied_price, 
                  double deviation, int mode, int shift)

计算Envelopes包络线指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
ma_period     - MA计算的周期数。
ma_method     - MA方法。它可以是任意的 移动平均方法枚举值。
ma_shift      - MA偏移量。 
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。
deviation     - 与主线的百分比偏差。 
mode          - 指标线的标识符。可以是 指标线标示符 里对应值。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iEnvelopes(NULL, 0, 13,MODE_SMA,10,PRICE_CLOSE,0.2,MODE_UPPER,0);

iEnvelopesOnArray() – 基于数组计算包络线指标

double iEnvelopesOnArray(double array[], int total, int ma_period, 
                         int ma_method, int ma_shift, 
                         double deviation, int mode, int shift)

基于数值型数组中数据,计算Envelopes包络线指标。不同于 iEnvelopes() ,iEnvelopesOnArray函数并不通过货币对名称、图表时段、请求价格的方式获取数据,而是要求价格数据必须事先准备好,再从左边到右边计算指标。为了能按照序列数组那样存取数组元素(即从右到左),你必须使用 ArraySetAsSeries 函数。

参数:

array[]       - 需要计算数据的数组。
total         - 要参与计算的元素个数。0意味着使用整个数组。
ma_period     - MA计算的周期数。
ma_method     - MA方法。它可以是任意的 移动平均方法枚举值。
ma_shift      - MA偏移量。 
deviation     - 与主线的百分比偏差。 
mode          - 指标线的标识符。可以是 指标线标示符 里对应值。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iEnvelopesOnArray(ExtBuffer, 0, 13, MODE_SMA, 0.2, MODE_UPPER,0 );

MQL4技术指标相关函数(一)

MQL4不仅可以计算当前图表中任何指标,还可以计算任何有效的货币对/图表时段的数据。如果请求数据(货币对名称/图表时段不同于当前图表)来自其他图表,出现这种情况如果相应的图表没有在客户端内打开,数据需要从服务器上下载。这种情况下,错误信息ERR_HISTORY_WILL_UPDATED(4066-历史数据正在更新中)将被放置于 last_error 变量中,需要再次请求更新数据(参见 ArrayCopySeries() 范例)。

 

iAC() – 加速震荡指标

double iAC(string symbol, int timeframe, int shift)

计算比尔.威廉斯的加速震荡指标

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

  double result=iAC(NULL, 0, 1);

iAD() – 离散指标

double iAD(string symbol, int timeframe, int shift)

计算离散指标。

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

  double result=iAD(NULL, 0, 1);

iAlligator() – 鳄鱼指标

double iAlligator(string symbol, int timeframe, 
                  int jaw_period, int jaw_shift, 
                  int teeth_period, int teeth_shift, 
                  int lips_period, int lips_shift, 
                  int ma_method, int applied_price, 
                  int mode, int shift)

计算比尔.威廉斯的鳄鱼指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
jaw_period    - 蓝线平均周期(鳄鱼的下颌)
jaw_shift     - 蓝线偏移量
teeth_period  - 红线平均周期(鳄鱼的牙)
teeth_shift   - 红线偏移量
lips_period   - 绿线平均周期(鳄鱼的嘴唇)
lips_shift    - 绿线偏移量
ma_method     - MA方法。可以是任意的移动平均计算方法。
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。
mode          - 指标线的标识符。可以是以下任意值
                MODE_GATORJAW - 鳄鱼下领(蓝色)指标线,
                MODE_GATORTEETH - 鳄鱼牙(红色)指标线,
                MODE_GATORLIPS - 鳄鱼嘴唇(绿色)指标线。   
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double jaw_val=iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, 1);

iADX() – ADX指标

double iADX(string symbol, int timeframe, int period, 
            int applied_price, int mode, int shift)

计算ADX指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period        - 计算的周期数
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。
mode          - 指标线的标识符。可以是 指标线标示符 里对应值。   
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iADX(NULL,0,14,PRICE_HIGH,MODE_MAIN,0)>iADX(NULL,0,14,PRICE_HIGH,MODE_PLUSDI,0)) return(0);

iATR() – ATR指标

double iATR(string symbol, int timeframe, int period, int shift)

计算ATR指标

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
period    - 计算的周期数。 
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iATR(NULL,0,12,0)>iATR(NULL,0,20,0)) return(0);

iAO() – 动量震荡指标

double iAO(string symbol, int timeframe, int shift)

计算比尔.威廉斯的动量震荡指标

参数:

symbol    - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。 
shift     - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

  double result=iAO(NULL, 0, 1);

iBearsPower() – 熊力指标

double iBearsPower(string symbol, int timeframe, int period, 
                   int applied_price, int shift)

计算熊力指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
period        - 计算的周期数。 
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

double val=iBearsPower(NULL, 0, 13,PRICE_CLOSE,0);

iBands() – 布林线指标

double iBands(string symbol, int timeframe, int period, 
              int deviation, int bands_shift, int applied_price, 
              int mode, int shift)

计算布林线指标

参数:

symbol        - 要计算指标数据的货币对名称。 NULL表示当前货币对。
timeframe     - 时间周期。 可以 时间周期列举 任意值。 0表示当前图表的时间周期。
period        - 计算的周期数。
deviation     - 与主线的偏差。
bands_shift   - 指标相对图偏移。
mode          - 指标线的标识符。可以是 指标线标示符 里对应值。 
applied_price - 应用的价格。它可以是 应用价格枚举 的任意值。 
shift         - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iBands(NULL,0,20,2,0,PRICE_LOW,MODE_LOWER,0)>Low[0]) return(0);

iBandsOnArray() – 基于数组计算布林线指标

double iBandsOnArray(double array[], int total, int period, 
                    int deviation, int bands_shift, 
                    int mode, int shift)

基于数值型数组中数据,计算布林线指标。不同于 iBands() ,iBandsOnArray 函数并不通过货币对名称、图表时段、请求价格的方式获取数据,而是要求价格数据必须事先准备好,再从左边到右边计算指标。为了能按照序列数组那样存取数组元素(即从右到左),你必须使用 ArraySetAsSeries 函数。

参数:

array[]     - 需要计算数据的数组。
total       - 要参与计算的元素个数。0意味着使用整个数组。
period      - 计算的周期数。
deviation   - 与主线的偏差。
bands_shift - 指标相对图偏移。
mode        - 指标线的标识符。可以是 指标线标示符 里对应值。  
shift       - 从指标缓冲区中获取值的索引(相对当前柱子向前移动一定数量周期的偏移量)。 

示例:

if(iBandsOnArray(ExtBuffer,total,2,0,MODE_LOWER,0)>Low[0]) return(0);
第 1 页,共 16 页12345...10...最旧 »
menu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loadermenu image pre-loader