KimIVの便利な機能 - ページ 27

 
SamMan писал (а)>>

その通りです。そして、コードが小さければ小さいほど、理解しやすくなります。2-3画面でフォントが「にじむ」のは我慢できない。機能は、反転せずに画面上にすべて表示される必要があります。だから、私はコンパクト化に賛成なんです。


私も耐えられないです :) .私の機能は、画面の中に収まっています。


また、オプションのコンティニュアスがたくさんあって、それがまた読者の注意を引いてしまうのですが、大丈夫でしょうか?


さて、関数の複雑さを軽減することは、良いコードを書くための基本的な条件の一つです。

もし、この方法が好きなら、2つの選択肢があります。

1.あなたは悪いコードスタイルに慣れていて、それを自分で使っている、何も良いことはありません。少なくとも、MQL5に乗り換えたときは。

2 そして、これはまさにあなたのことだと思うのですが、あなたは自分のコードをまともに書けないからこのコードを使い、プログラマーとして何も表現せず、そしてこのスレッドの筆者に私の投稿を判断し議論する権利はないのです。すべて、筆者が宛てたものだ。

作者への投稿をお詫びします。どうせこのコードを使うことはないでしょうから、必要なものはすべて自分で揃えたlibcがあるので、無駄な書き込みをしてしまいました。また、これだけ長い間、明らかにネガティブなフィードバックがなかったということは、作者のコードが満足のいくものであったということでしょう。ただ、我慢できなかっただけです :) 、ごめんなさい。

 
TheXpert писал (а)>>

作者への投稿をお詫びします。どうせこのコードを使うことはないでしょうから、必要なものはすべて自分で揃えたlibcがあるので、無駄な書き込みをしてしまいました。そして、これだけ長い間、明確に否定的なフィードバックがなかったということは、作者のコードが満たされているということです。ただ、我慢できなかったのです :) 、ごめんなさい。

書いていて申し訳ないのですが、我慢ができませんでした。一人の意見で支店を辞めては元も子もない。特に作者からは「ありがとう」と言われた。

1つのタスクを2つ(またはそれ以上)のコードで解決できるといいと思います。同じタスクを解決するコードで、より良いと思うものがあれば、それを共有することができます。

同じものを別の人がどのようにコーディングしたかを見ることがよくあります。多くのことを学ぶことができます。

P.S. イゴール、お疲れ様でした。

 
確かに、アンドレイ、そんな風に受け取ってはいけない。シンプルにそして、私を押し倒すことを恐れないでください。私の作品に何か投稿していただいても、ご自分の作品を投稿していただいてもかまいません。
 

ArraySearchDouble()関数です。

説明: double 型の値を用いて配列の要素を検索し、見つかった要素のインデックスまたは-1 を返す。この関数は,1つの要素のみを検索し,結果が正であれば検索を停止します.

  • m- 要素が探索される配列.
  • e- 配列m に含まれる double 型の値.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 を返す。この関数は,1つの要素のみを検索し,結果が正であれば検索を停止します.

  • m- 検索を行うint 型の 要素の配列.
  • e- 配列m に含まれる,int 型の値.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 を返す。この関数は,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()関数です。

説明: double 型の値を用いて配列の要素を検索し、見つかった要素のインデックスまたは-1 を返す。この関数は,1つの要素のみを検索し,結果が正であれば検索を停止します.

  • m- 要素が探索される配列.
  • e- 配列m に含まれる double 型の値.
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()関数をテストするスクリプトを添付します。
ファイル: