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

 

ArrayMax()関数を使用します。

この関数は、配列の最大要素の値を返します。

  • xdouble 型の要素の配列であり、その中で要素の最大値を探索する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение максимального элемента массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMax(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMaximum(x)]);
  else {
    Print("ArrayMax(): Массив пуст!");
    return(0);
  }
}
追伸:ArrayMax()関数をテストするスクリプトを添付します。
ファイル:
 

ArrayMin()関数を使用します。

この関数は、配列の最小要素の値を返します。

  • x-double 型の要素の配列.この中で,要素の最小値が探索されます.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение минимального элемента массива.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMin(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMinimum(x)]);
  else {
    Print("ArrayMin(): Массив пуст!");
    return(0);
  }
}
ZS. ArrayMin()関数をテストするスクリプトを添付します。
ファイル:
 

こんにちは、フォーラムで貴社のジグザグ機能をいくつか見つけました。これはまさに私が必要としているものです。この関数の機能を確認しようと思い、コメントでこの関数を呼び出すだけのExpert Advisorを作りました。ジグザグバーの番号=ソレ。問題は、この機能では、ジグザグがゼロバー上にない場合、そのバー番号しか表示されないことです。ジグザグがゼロバー上にある場合は、直前のジグザグのバーを表示します。そして、ゼロバーで表示させる必要があります。つまり、新しいジグザグが出現したタイミングを知りたいのです。

Expert Advisorのコードは以下の通りです。

int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
GetExtremumZZBar ();
 Comment("бар зигзага = ", GetExtremumZZBar());         //Просто проверяю работоспособность функции
//----
   return(0);
  }
//+------------------------------------------------------------------+
int GetExtremumZZBar(string sym="EURUSD", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sym=="") sym=Symbol();
  double zz;
  int    i, k=iBars(sym, tf), ke=0;
 
  for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
 
Climber писал (а)>>

は、ジグザグがゼロバー上にない場合にのみ、そのバー番号を表示します。
ジグザグがゼロバー上にある場合は、直前のジグザグのバーを表示します。
そして、ゼロバーで表示させる必要があります。つまり、新しいジグザグが出現したタイミングを知りたいのです。

いいゼロバー補正

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 
TheXpert писал (а)>>

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

賢い人はたくさんいるが、賢くて優しい人は少ない。一方、あなたは自分のライブラリーを公開せず、自分の方がうまくコーディングできると考えていますが、イゴールは自分の作品のほとんどを無料で公開しています。

 
khorosh писал (а)>>

賢い人はたくさんいるが、賢くて優しい人は少ない。あなたは自分のライブラリーを公開せず、自分の方が良いコードを書くと思っているのに、イゴールは自分の作品のほとんどすべてを無料で公開しているのです。

その理由はすでに書きました。なぜなら、私のコードは完全に普遍的なものではないからです。投稿できるものがあれば、必ず投稿します

 

ArrayAvg()関数を使用します。

この関数は、配列要素の平均演算値を返します。

  • x-double 型の要素を要素とする配列.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает среднее аримфетическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvg(double& x[]) {
  double s=0;
  int    i, k=ArraySize(x);

  for (i=0; i<k; i++) s+=x[i];
  if (k>0) s/=k; else Print("ArrayAvg(): Массив пуст!");

  return(s);
}
P.S. ArrayAvg() 関数をテストするスクリプトを添付します。
ファイル:
 
KimIV писал (а)>>

いいは、ゼロバーで補正されています。

ありがとうございました。職場のインターネットの調子が悪く、先ほどお礼を言うことができませんでした。

 

ArrayAvGeom()関数を使用します。

この関数は,配列要素の幾何平均を返します。

  • x-double 型の要素を要素とする配列.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает среднее геометрическое элементов массива.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayAvGeom(double& x[]) {
  double s=1, k=ArraySize(x);
  int    i;

  for (i=0; i<k; i++) s*=x[i];
  if (k>0) s=MathPow(s, 1/k); else Print("ArrayAvGeom(): Массив пуст!");

  return(s);
}
ArrayAvGeom()関数をテストするスクリプトを添付します。
ファイル:
 
KimIV писал (а)>>

ArrayAvGeom()関数を使用します。

この関数は,配列要素の幾何平均を返します。

  • xdouble 型の要素からなる配列である。
ZS. ArrayAvGeom()関数をテストするスクリプトを添付しています。

KimIV , ファンクションありがとうございます!

モードを計算するために同じような関数を書くことは現実的でしょうか?