KimIV的有用功能 - 页 23

 

NumberOfBarCloseLastPos()函数。

该函数返回最后一个位置的收盘号码或-1。要考虑的位置的选择是由外部参数定义的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑这个仪器的位置。默认值--NULL 表示当前的市场工具。
  • tf- 时间框架。默认值0 表示当前的时间框架。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
附上一个测试NumberOfBarCloseLastPos()函数的脚本。
附加的文件:
 
 
 
KimIV:

DeleteOrders()函数。测试者版本。

函数DeleteOrders()的目的是删除挂单BuyLimit, BuyStop, SellLimit 和 SellStop。op- 交易操作的类型,挂单的类型。五个值中有一个是可能的。-1,OP_BUYLIMIT,OP_BUYSTOP,OP_SELLLIMIT或OP_SELLSTOP。默认值为-1意味着任何顺序。
mn
- MagicNumber,待定订单的识别号码。默认值-1意味着任何魔力。

你好。在第10页,该功能已被设定为应用。

我已经在我的专家顾问中应用它来删除挂单。或者说,我想用它。我把这个函数放在int start部分之外

我把它粘贴进去了。

if (isCloseLastPosByTake(NULL,OP_BUY, My order Buy ))   {
              DeleteOrders(NULL, -1,  My order Sell);   }

但是在编译的时候,我得到一个错误

'clDelete' - 未定义变量 C:{程序文件/MetaTrader - Alpari/experts\0005.mq4 (1155, 40)

我怎样才能消除这个错误?

而当我使用ClosePositions()函数--以市场价格平仓 时,一切都很正常--没有错误

/ 即使我只是插入DeleteOrders函数,还不应用它--这个错误仍然可以编译

 
Rita писал (а):
但当你编译它时,你会得到一个错误
'clDelete' - 未定义变量 C:\Program Files\MetaTrader - Alpari/experts\0005.mq4 (1155, 40)
我怎样才能消除这个错误? 这个'clDelete'是什么?

在附件的第10页,有一个文件test_DeleteOrders.mq4。

下载它并寻找其中的任何clDelete 引用。

 

下载了它,看了它!那么?事实证明,我所要做的只是设置关闭图标的颜色!这就是我的工作。

但现在又不尽然了。现在,这个错误已经消失了。但另一个错误出现了--在ClosePositions()函数处--以前没有出现过。

if (L_2Sell==true)                 {  
        ClosePositions(NULL, -1,Magic);
                                      }

ClosePosBySelect' -函数 没有定义 C:\Program Files\MetaTrader - Alpari/experts\0005.mq4 (905, 47)
而且附近没有脚本(第14页)可以检查

你能告诉我如何解决这个错误吗?

 
Rita писал (а):
ClosePosBySelect' - 函数没有定义 C:\Program Files\MetaTrader - Alpari/experts\0005.mq4 (905, 47)

这个错误意味着ClosePosBySelect()没有被定义

Rita 写道(a):
你能告诉我如何解决这个错误吗?
找到ClosePosBySelect()函数的代码并将其粘贴到你的EA文件中。请参看第13页。
 

很抱歉再次打扰您!我是一个很好的朋友。我把你指定的ClosePositions()函数放在ClosePosBySelect()旁边,编译后出现了六个错误我感到很生气!

我自己已经和其中的四个人打过交道。滑动,颜色,接近尝试的数量....,仍然有两个错误,-

声音文件 -

UseSound' - 未定义变量 C:\Program Files\MetaTrader - Alpari/experts\0005.mq4 (1002, 13)

NameFileSound' - 未定义变量 C:³ Files\MetaTrader - Alpari\experts\0005.mq4 (1002, 33)

我从哪里拿?我应该把它们放在哪里?

好吧,外部 bool UseSound = false;//关闭。

我将把它放在EXPERT'S PROPERTIES中,但什么是NameFileSound',我应该把它放在哪里?

**************************************************************************

找到了,并把它放在全球。

extern bool UseSound = false;//выключатель звука
extern string NameFileSound="alert.wav";

然后,编译器没有出现一个错误,而是又抛出了四个错误。

'GetNameOP' -函数 未定义

'ErrorDescription' - 函数未被定义

'else' - 意外的标记

'GetNameOP' - 函数未定义

这些错误似乎一直在无休止地出现。为了使用一个ClosePositions()函数,我不得不先创建另一个函数--ClosePosBySelect()。而另一个又需要一些声音--钟声和口哨声。而当我努力寻找这些完全不必要的铃声时,我得到了各种奇怪的错误--'其他'--意外的标记和其他错误。我甚至还没有开始使用这个功能。我只是把它放在其他的人中间!

你能告诉我怎样才能解决这些错误吗?我评论了所有这些GetNameOP。错误似乎已经消失了。但是,没有它们,功能会很好地工作吗?

 
Rita писал (а):
而在这里,编译器没有抛出一个错误,而是抛出了4个。
'GetNameOP' - 函数未定义

在附件testrSetOrder.mq4的第一页中

Rita 写道:
ErrorDescription' - 函数没有定义

在你的EA的代码中插入以下一行

#include <stdlib.mqh>.

Rita 写道:
'else' - 意外的令牌
当你按上述方法操作时,该错误将自行消失。
 

NumberOfBarOpenLastPos()函数。

该函数返回最后打开的位置的条数或-1。要考虑的位置的选择是由外部参数指定的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值--NULL 表示当前的市场工具。
  • tf- 时间框架。默认值0 表示当前的时间框架。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 意味着任何位置。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
HH. 附上一个测试NumberOfBarOpenLastPos()函数的脚本。
附加的文件: