KimIV的有用功能 - 页 27

 
SamMan писал (а)>>

正是如此。而且,代码越小,就越容易理解。我不能忍受字体在2-3个屏幕上被 "涂抹"。一个功能应该全部在屏幕上,没有翻转。这就是为什么我赞成紧凑性。


我也无法忍受他们 :) 。我的功能适合在屏幕上。


而且,你有很多可有可无的连贯性,顺便又把读者的注意力从你身上引开,这样可以吗?


那么,降低函数的复杂性是编写好代码的基本条件之一。

如果你喜欢这种方式,你有两个选择。

1.你已经习惯了一种糟糕的代码风格,你自己也在使用它,没有什么好的结果,当你不得不写一个真正的基本代码时,你会明白我的正确性。至少在你切换到MQL5时是这样。

2 而我认为这只是关于你的--你使用这段代码,因为你无法正确地写你自己的代码,作为一个程序员你什么都不是,那么你就没有权利判断和讨论我对这个主题的作者的帖子。我更多的是在向作者致辞。

我为我的帖子向作者道歉,我白写了,因为我反正不会使用这段代码,因为我有自己的libc,有我需要的一切。而且因为在这么长的时间里,没有明确的负面反馈,这意味着作者的代码是令人满意的。只是无法忍受:),对不起。

 
TheXpert писал (а)>>

我为我的帖子向作者道歉,我白写了,因为我反正不会使用这段代码,因为我有自己的libc,有我需要的一切。而且因为在这么长的时间里,没有明确的负面反馈,这意味着作者的代码是令人满意的。只是无法忍受:),对不起。

我为自己的写作表示歉意,但我无法忍受。如果你因为一个人的意见而离开支部,你将是徒劳的。特别是作者说谢谢你。

我认为如果一个相同的任务可以由2个(或更多)代码来解决,那就更好了。如果你认为你的代码更好,你可以分享你解决相同任务的代码。

通常情况下,看到别人是如何对同样的东西进行编码的,但风格不同。你可以学到很多东西。

P.S. 伊戈尔,感谢你的工作。

 
的确,安德烈,你不应该这样认为。保持简单!也不要害怕把我推下去。我不会介意你为我的工作做出贡献或发表你自己的东西。
 

ArraySearchDouble()函数。

该函数使用一个双数类型的值搜索一个数组元素,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果为正数,则停止搜索。

  • m- 搜索该元素的数组。
  • e- 双重类型的值,将在数组m 中找到。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
附上一个测试ArraySearchDouble()函数的脚本。
附加的文件:
 

ArraySearchInt()函数。

该函数通过一个int 类型的值搜索一个数组元素,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果为正数,则停止搜索。

  • m-int类型 的元素数组,在其中进行搜索。
  • e-int 类型的值,将在数组m 中找到。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchInt(int& m[], int e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
附上一个测试ArraySearchInt()函数的脚本。
附加的文件:
 

ArraySearchString()函数。

该函数搜索一个数组元素的字符串 类型的值,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果为正数,则停止搜索。

  • m- 类型为字符串 的元素数组,在其中进行搜索。
  • e- 字符串类型的值,它将在数组m 中找到。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.03.2008                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchString(string& m[], string e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
附上一个测试 ArraySearchString() 函数的脚本。
附加的文件:
 
KimIV писал (а)>>
的确,安德烈,你不应该这样理解。>> 要简单!也不要害怕把我推下去。如果你能做出贡献,纠正我的东西或发表你自己的东西,我不会介意。

好吧,我对事情的看法略有不同,正如我已经写过的,我认为全局性的普遍性是一种邪恶,也就是说,代码至少应该为你所写的东西定制一点,以达到最大的简单性和便利。这就是为什么我认为在这里公布我自己的代码没有任何意义。


当然,如果你不介意的话,我可以充当你的代码的审查员,并提供你自己的版本,或者只是给出评论。



SZZH:谢谢你的支持,说实话,我没有想到你会有这样的反馈。

 
KimIV писал (а)>>

ArraySearchDouble()函数。

该函数使用一个双数类型的值搜索一个数组元素,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果为正数,则停止搜索。

  • m- 搜索该元素的数组。
  • e- 类型为double的值,将在数组m 中找到。
附上一个测试ArraySearchDouble()函数的脚本。

双重性是一个棘手的事情,你的代码在某些情况下可能工作不正确。

这里有一个可能的变通办法

int ArraySearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ // на то, что я перемещаю скобки не обращайте внимания, мне так читабельней
  for (int i = 0; i < ArraySize(array); i++) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}

而如果你想做同样的事情,但要从头开始。

int ArrayRevertSearchDouble(double& array[], double value, double precision = 0.00000000001) 
{ 
  for (int i = ArraySize(array) - 1; i >= 0; i--) 
  {
    if (array[i] > value - precision && array[i] < value + precision) return(i);
  }
  return(-1);
}
 
TheXpert писал (а)
当然,如果你不介意的话,我可以充当你的代码的审查员,并提供我自己的版本,或者只是给出评论。
很好!对事物有一个全面的看法对每个人都有好处。我,首先 :-)
 

有一天,我在写一个EA,我需要根据之前交易的结果和同一交易的手数来改变手数大小。结果发现,我没有一个函数可以返回最后一个平仓的手数。这里有一个更正...

GetLotLastClosePos()函数。

该函数返回最后平仓的手数,或-1。要考虑的位置的选择是由外部参数定义的。

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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderCloseTime()) {
                o=OrderCloseTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
HH. 附上一个测试GetLastClosePos()函数的脚本。
附加的文件: