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

 
KimIV >> :

IIFc()関数。

...

足りない三項演算子を作ろうとすると?

スコア、ありがとうございます。できる限り中括弧をつける癖のある私には、とても便利そうです。

 
CMEPTHiK писал (а)>>
V.Yakimkinの本を読んでいました。"Forex market - your way to success "で、"(DJI x Nikkei)の差分... "のような行に出会いました。 イゴール、教えてください、これをインジケータの形で実装し出力することは可能ですか?

差分はROCインジケータが 示す速度である。

 

イゴール、カウンターポジションを意識したクローズなど、全ポジションを一括でクローズする機能は隠してないんですか?

つまり、まずカウンターポジションのロットの不一致を考慮して、可能な限りすべてのカウンターポジションを決済し、次に負けているもの、利益を上げているもの......という具合です。

 
alexx_v писал(а)>>

イゴール、カウンターポジションを意識したクローズも含め、全てのポジションを一度にクローズする機能は、書庫にあるのでしょうか?

すなわち、まず、たくさんの反対ポジションのミスマッチを考慮して、可能な限りすべての反対ポジションを決済し、次に、負けているもの、利益を上げているもの......という具合です。

いや、まだ持っていないんです。

 

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

日付の間にクローズ(削除)されたポジションや注文が履歴に存在するかどうかのフラグを返します。関数ExistInHistoryCloseBetween() は、以下のパラメータを受け付ける。

  • sy- 市場商品の名前。""- 任意のシンボル、NULL- 現在のシンボル。初期値は"" である。
  • op- 貿易業務。有効な値:-1OP_BUYOP_SELLOP_BUYLIMITOP_BUYSTOPOP_SELLLIMITOP_SELLSTOP。デフォルト値-1- 任意の操作。
  • mn- 取引識別子、MagicNumber。デフォルト値-1- 任意のマジックナンバー。
  • d1- ポジション終了時刻(注文削除待ち)。初期値は0-任意の閉時間(削除)です。時間d 1はd2より 短くなければならない。
  • d2- ポジション終了時刻 (注文の削除待ち).デフォルト値 -0- 任意のクローズ(削除)時間。時間d 2は時間d1より 長くなければならない。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : закрытой (удалённого) между датами.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая операция)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время закрытия             ( 0   - любое время закрытия)           |
//|    d2 - время закрытия             ( 0   - любое время закрытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryCloseBetween(string sy="", int op=-1, int mn=-1,
                                datetime d1=0, datetime d2=0) {
  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=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderCloseTime() && ( d2==0 || d2>=OrderCloseTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

ExistInHistoryCloseBetween()の使用例です。

  1. 現在のチャートシンボルで 昨日決済されたポジション、または昨日MagicNumber=0で削除された注文があるかどうか
    datetime d1=iTime(NULL, PERIOD_D1, 1);
    datetime d2=iTime(NULL, PERIOD_D1, 0)-1;
    Message( IIFs( ExistInHistoryCloseBetween(NULL, -1, -1, d1, d2), "Есть", "Нет"));
  2. 過去3時間以内に決済(削除)されたポジションや注文があること。
    datetime d1=TimeCurrent()-3*60*60;
    Message(IIFs(ExistInHistoryCloseBetween("", -1, -1, d1), "Есть", "Нет"));
  3. 過去5分間にEURの買いが決済されたかどうか
    datetime d1=TimeCurrent()-5*60;
    Message( IIFs( ExistInHistoryCloseBetween("EURUSD", OP_BUY, -1, d1), "Да", "Нет"));

追伸:ExistInHistoryCloseBetween()関数をテストするスクリプトを添付します。

 

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

日付の間にポジションまたは注文のオープン(セット)が履歴に存在するかどうかのフラグを返します。ExistInHistoryOpenBetween() 関数は、以下のパラメータを受け付ける。

  • sy- 楽器の名前です。""- 任意の文字、NULL- 現在のシンボル。初期値は"" である。
  • op- 貿易業務。有効な値:-1OP_BUYOP_SELLOP_BUYLIMITOP_BUYSTOPOP_SELLLIMITOP_SELLSTOP。デフォルト値-1- 任意の操作。
  • mn- 貿易業務の識別子、MagicNumber。デフォルト値-1- 任意のマジックナンバー。
  • d1- ポジション開始時間 (注文の発注待ち).初期値は0-任意のオープニング(設定)時間です。d1 時間はd2 時間より短くする必要があります。
  • d2- ポジションがオープンする時間(注文の保留)。デフォルト値は0- 任意のオープン(設定)時間です。時間d 2は時間d1より 長くなければならない。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : открытой (установленного) между датами.                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время открытия             ( 0   - любое время открытия)           |
//|    d2 - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryOpenBetween(string sy="", int op=-1, int mn=-1,
                               datetime d1=0, datetime d2=0) {
  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=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderOpenTime() && ( d2==0 || d2>=OrderOpenTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

こんにちは。

イゴール、バーを好きな色に塗る方法を教えてくれませんか?

最初から言っておく。私は、ゾーン・トレーディング(ウィリアムズのB-marketの4番目の次元)のためのインジケータを書いています。バーの色を緑、赤、グレーのいずれかにする必要があります。

インジケータを書いたら、こんな感じになりました。

これは私が望んでいることではありません。真ん中に色をつけるバーの作り方。シェーディング方法として、2つの座標を持つ矩形を使用しています。そこで問題なのが、矩形の開始と終了の座標をどう選ぶかだ。

ヒントをください。

以下は、インジケーターのコードです。

ファイル:
zonetrade.mq4  6 kb
 
Duke3D писал(а)>>

...
バーの真ん中にぴったりと
影をつける方法を教えてください。

Heiken Ashiのインジケータを見てみましょう。そのソースコードはMetaTrader 4に含まれています。

 

関数 ExistInHistoryToDay()。

本日オープン(設定)したポジションまたはオーダーの履歴の中の存在フラグを返します。関数ExistInHistoryToDay() は、以下のパラメータを受け取る。

  • sy- 楽器の名前です。""- 任意のシンボル、NULL- 現在のシンボル。初期値は"" である。
  • op- 貿易業務。有効な値:-1OP_BUYOP_SELLOP_BUYLIMITOP_BUYSTOPOP_SELLLIMITOP_SELLSTOP。デフォルト値-1- 任意の操作。
  • mn- 貿易業務の識別子、MagicNumber。デフォルト値-1- 任意のマジックを使用します。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня|
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-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 ( op<0 || OrderType()== op) {
          if ( mn<0 || OrderMagicNumber()== mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return( True);
          }
        }
      }
    }
  }
  return( False);
}