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

 

TimeOpenLastPos()関数です。

この関数は、最後のオープンポジションの時刻を返します。考慮すべき位置の選択は、外部パラメータによって定義される。

  • sy- 市場商品の名前。このパラメータを設定すると、この機能はこの楽器のポジションのみを考慮します。初期値」は、あらゆる市場商品を意味する。NULLの 場合、現在の測定器を意味する。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。デフォルト値-1 は任意の位置を意味する。
  • mn- 位置の識別子,MagicNumber.デフォルト値-1 は、任意の識別子を意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает время открытия последней открытой позиций.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(t);
}
ZS. TimeOpenLastPos()関数をテストするスクリプトを添付します。
ファイル:
 
Prival:
バックルームにバブルソート機能はあるか

利用できませんが、10分ほどで作れました

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Выполняет пузырьковую сортировку элементов массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    a - массив элементов                                                    |
//+----------------------------------------------------------------------------+
void BubbleSort(double& a[]) {
  double t;
  int    i, j, n=ArraySize(a);

  for (i=n-1; i>0; i--) {
    for (j=0; j<i; j++) {
      if (a[j]>a[j+1]) {
        t=a[j];
        a[j]=a[j+1];
        a[j+1]=t;
      }
    }
  }
}
ZS. BubbleSort()関数をテストするスクリプトを添付します。
ファイル:
 

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

この関数は、最後の2つのフラクタル間のバーの数または-1を 返します。フラクタルが取り出される市場商品と時間枠は、パラメータで設定されます。

  • sy- 市場商品の名前。デフォルトは"" またはNULLで、現在の市場銘柄の場合。
  • tf- 時間枠 (バーごとの分数).デフォルト値0 は、現在のタイムフレームを意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.06.2008                                                     |
//|  Описание : Возвращает количество баров между двумя последними фракталами. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int BarsBetweenLastFractals(string sy="", int tf=0) {
  double fu=0, fd=0;
  int    i, nu=0, nd=0;

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=2; i<100; i++) {
    fu=iFractals(sy, tf, MODE_UPPER, i);
    if (fu!=0) {
      if (nu==0) nu=i;
    }
    fd=iFractals(sy, tf, MODE_LOWER, i);
    if (fd!=0) {
      if (nd==0) nd=i;
    }
    if (nu>0 && nd>0) return(MathAbs(nu-nd));
  }
  Print("BarsBetweenLastFractals(): Фракталы не найдены");
  return(-1);
}
ZS. BarsBetweenLastFractals()関数をテストするスクリプトを添付します。
ファイル:
 

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

この関数は、最後のポジションが閉じられてから何秒後かを返す。考慮する位置の選択は、パラメータで指定する。

  • sy- 市場商品の名前。このパラメータが設定されている場合、この機能は指定された計器の位置のみを考慮します。デフォルト値である」は、あらゆる市場商品を意味する。NULL 値は、現在の測定器を意味する。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子,MagicNumber.デフォルトの値である- 1は、任意の識別子を意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  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 (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
追伸:SecondsAfterCloseLastPos()関数をテストするスクリプトを添付します。
ファイル:
 

こんにちは

アドバイスもあります。

ある時刻になると両サイドに注文を出すEAがあるのですが

1つ目の注文がトリガーされたときに2つ目の注文が自動的に削除されるようにするにはどうしたらよいか、指南してください。

または微調整

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

 
aceventura:

こんにちは

アドバイスもあります。

ある時刻になると両サイドに注文を出すEAがあるのですが

1つ目の注文がトリガーされたときに2つ目の注文が自動的に削除されるようにするにはどうしたらよいか、指南してください。

または微調整

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

キムアイビー

イゴール指は足りていますか?

 
aceventura:

こんにちは

アドバイスもあります。

ある時刻になると両サイドに注文を出すEAがあるのですが

1つ目の注文がトリガーされたときに2つ目の注文が自動的に削除されるようにするにはどうしたらよいか、指南してください。

または微調整

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

まず、この支店の注文数を関数で取り、「= 1」、「< 2」、「= 奇数」を返したら、この支店から「注文を閉じる」関数を呼び出します。

 
Vinin:

キムアイビー

イゴール指は足りていますか?

たぶん、ないと思います...。人差し指とグリップの2つしかないんですけど...。彼

 
SergNF:

まずこのブランチで注文数の関数を取り、「= 1」「< 2」「= 奇数」を返したら、このブランチから「注文を閉じる」関数を呼び出します。

EAはペアごとに異なる設定になっているため、注文数量の 機能は動作しません。そして、異なるペアに同時に注文を設定します。そして、2つのペアと1つのトリガーに対して4つの注文が出された場合、そのうち3つの注文を削除し、それぞれの反対側の注文を削除します。