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

 
KimIV писал (а)>>

MQL4でのポインターは厄介です。直接のサポートはありません。ここの掲示板で、配列でやろうとした人がいたような気がします。これ以上ないくらい正確です。自分で探す。

MathRand()

プログラムで変更できるのは、配列の1次元目だけです。ArrayResize() 関数を使用します。2次元、3次元、4次元は厳密に設定する必要があります。

まあ、ポインターや動的配列のことも忘れよう...。

第5弾の言語を楽しみにしています...。

ありがとうございました・・・。



1つのグリッドで作業するのは、実装が簡単です。

面白いことに、私のアイデアでは1つのネットワークでは不十分で、ネットワークを切り替えるためのアルゴリズムを作りたかったのですが、ポインターを使えば難しいことではありません。

でも、ダメなんです...。...ハードコーディングするしかないでしょう。

 

SetTLineByAngle()関数です。

この関数は、トレンドラインのOBJ_TRENDBYANGLE オブジェクトを現在のチャート上の傾き角度で設定します。

  • cl- TRENDBYANGLEオブジェクトの色.必須パラメータです。
  • nm- オブジェクト名。デフォルト値である"" を渡すと、現在のバーのオープン時間が名前として使用されます。
  • t1- オブジェクト設定時間の最初の座標.デフォルト値 -0- 10本目のバーのオープン時間。
  • p1- 価格を設定するオブジェクトの最初の座標.初期値 -0- 10本目のバーの最小値。
  • t2- オブジェクト設定時間の第2座標.デフォルト値 -0- 現在のバーのオープン時間。
  • p2- オブジェクト設定価格の2番目の座標.このパラメータは、一種のスイッチです。つまり、時間/価格座標のペアを使用してトレンドラインが描かれ、トレンドラインの傾斜角度の値は無視されます。デフォルト値 -0- 傾き角によるトレンドライン構築。
  • an- 勾配角度(度).初期値 -0- 水平線。
  • ry- BOWプロパティのフラグ。 デフォルト値はFalse です。
  • st- 線のスタイル.有効な値は、STYLE_SOLID(デフォルト)、STYLE_DASHSTYLE_DOTSTYLE_DASHDOT です。
  • wd- 線幅.初期値は1 です。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=0, bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

SetTLineByAngle()の使用例です。

  1. 5本目のバーの最小値から45°の角度でオレンジ色の実線。
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. 13本目の棒の最小値から赤い点線の扇状に広がっている。
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

SetTLineByAngle()のテスト用スクリプトを添付します。

ファイル:
 

SetArrow()関数です。

この関数は、OBJ_ARROW オブジェクトアイコンを現在のチャートに設定します。

  • cd- アイコンコード。必須パラメータです。
  • cl- アイコンの色.必須パラメータです。
  • nm- オブジェクトの名前です。デフォルト値が転送された場合 -""、 現在のバーのオープン時間が名前として使用されます。
  • t1- オブジェクトの設定時間の最初の座標.デフォルト値 -0- 現在のバーのオープン時間。
  • p1- 価格を設定するオブジェクトの最初の座標.デフォルト値 -0- 現在のビッド価格。
  • sz- アイコンの大きさ.デフォルト値 -0
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 

SetArrow()の使用例です。

  • 9本目のバーの高値に左の金色のプライスマーカーが あります。
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • 2本目のバーの最大値で赤い右の価格マークが表示されます。
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3.2本目のバーの最大値の上にある青い矢印
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

SZY. SetArrow()関数をテストするスクリプトを添付します。

ファイル:
 
このスレッドから機能を収集し、私のウェブサイト上の別のセクションで、フォーラムとあなたのサイトへのリンクでそれらを投稿しても構わないですか?
 

一般的には、この記事の最初のページに「目次」があるとかっこいいと思います。機能一覧、説明、ページへのリンクが記載された表。あるいは、最初のページに1つの更新されたアーカイブを残し、説明は他のページで見ることができます。

そこで、xrustさんが提案されるのであれば、ここで繰り返されるのも良いのではないでしょうか。苦労した分、システム化のために :))

 
xrust писал (а)>>
...このスレッドから機能を収集し、私のサイトにそれらを掲示してもよろしいですか?

いいえ、しません...

 
xrust писал (а)>>
このブランチから機能を集めて、私のサイトに掲載してもよろしいですか?

inluder」ファイル(mqh)を作成し(おそらく「trade」と「other」の2つ)、その名前に合意して、「開発者」に強制的に配布物に含ませる。各EAの全員が車輪を再発明する必要がないように。

:)

 
今回もありがとうございました!ちょっと怠け者なので、手元で全部集めたいんです。もうひとつ、関数の構文や変数名を、いわば標準化するために、あなたと同じものを使っても構わないですか?