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

 

アンドレイさん、こんにちは。

  1. 初値については、すでに3つの機能があります。
  2. また、チケットの機能もあります。その数は2つ。
    • GetTicketLastPos()- 最後にオープンしたポジションのチケット、または-1。
    • TicketNearPos()- 始値または0における、市場に最も近いポジションへのチケット。
アンドレイ これらの関数には、ロットサイズによる選択を除いて、必要なものがすべて揃っています。今後、ロットサイズ別に建値やチケットを取得できるような機能も作っていく予定です。

 
KimIV:

アンドレイさん、こんにちは。

  1. 初値については、すでに3つの機能があります。
  2. また、チケットの機能もあります。その数は2つ。
    • GetTicketLastPos()- 最後にオープンしたポジションのチケット、または-1。
    • TicketNearPos()- 始値または0における、市場に最も近いポジションへのチケット。
アンドレイ これらの関数には、ロットサイズによる選択を除いて、必要なものがすべて揃っています。今後、ロットサイズ別に建値やチケットを取得できるような機能も作っていく予定です。
おそらく、それらは私にとって冗長であり、次のオープンポジションの価格、最後のオープンポジション、市場に最も近い、などの不要な条件を取り除かなければならないのです。そして、それが必ずしも正しいとは限りません。また、これらの微妙な違いを正しく比較することで、より早く理解することができます。ありがとうございます、楽しみにしています。
 

GetOpenPriceByLot()関数です。

この関数は、ポジションまたは注文の開始価格をロットサイズごとに返します。考慮すべき位置の選択は、外部パラメータで指定する。

  • sy- 市場商品の名前。このパラメータが設定されている場合、この関数は指定された楽器の位置のみを考慮します。初期値」は、あらゆる市場商品を意味する。NULL 値は、現在の測定器を意味する。
  • op- 取引の操作、ポジション、または注文の種類。有効な値:OP_BUYOP_SELL、OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP、または-1。デフォルト値の- 1は、あらゆる取引操作を意味します。
  • mn- ポジションまたはオーダーの識別子、MagicNumber。デフォルトの値である- 1は、任意の識別子を意味する。
  • lo- Lot.初期0は任意のロットを 意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает цену открытия позиции или ордера по размеру лота.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
double GetOpenPriceByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  double p=0;
  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=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
        }
      }
    }
  }
  return(p);
}
ZS.GetOpenPriceByLot()関数をテストするスクリプトを添付して います。
ファイル:
 

GetTicketByLot()関数です。

この関数は、ポジションまたは注文のチケットをロットサイズ別に返します。考慮する位置の選択は、外部パラメータで指定する。

  • sy- 市場商品の名前。このパラメータを設定すると、この関数は指定されたシンボルの位置のみを考慮するようになります。初期値」は、あらゆる市場商品を意味する。NULL 値は、現在の測定器を意味する。
  • op- 取引の操作、ポジション、または注文の種類。有効な値:OP_BUYOP_SELL、OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP、または-1。デフォルト値の- 1は、あらゆる取引操作を意味します。
  • mn- ポジションまたはオーダーの識別子、MagicNumber。デフォルトの値である- 1は、任意の識別子を意味する。
  • lo- Lot.初期値0は 任意のロットを意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает тикет позиции или ордера по размеру лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
int GetTicketByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
  int i, k=OrdersTotal(), t;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((op<0 || OrderType()==op) && OrderType()<6) {
          if (lo==0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
        }
      }
    }
  }
  return(t);
}

ZS. GetTicketByLot()関数をテストするスクリプトを添付しています。


ファイル:
 

イゴールさん、こんにちは。

新しい機能、そして迅速な対応、本当にありがとうございました。すべてが非常に良い。この関数は、例えば、条件によるチケットの並び順を返すもので、外部変数で設定するか、使用しないかを選択することができます。ここのセリフがちょっと曖昧なんですよね。

if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6)))

ここでは、if 文の条件、すなわち、外部変数<0であれば、どのオーダータイプも利用できる、または、関数呼び出しに例えばOP_BUYと書けば、OP_BUYのオーダーから選択されることをチェックしています。この条件は明確ですが、さらに&&で 書かれた同等の条件として、OrderType()は保留中の注文の範囲、つまり1から5までの範囲でなければならないというものがあります。私たちのOP_BUY型はこの範囲に含まれないので、演算子の条件はfalseでなければならず、制御はif-else演算子に続く演算子、つまり私には言い難いのですが、巻き線のボディ矢印の後ろのどこかに渡されなければなりません。ここでは、成行注文の条件と、同種の保留注文の機能を別に指定するのが良いように思います。つまり、成行注文から選択したいが、その種類が分からない場合、外部変数<0を取り、0から1までの条件を書き込む関数を指定する。 保留注文も同様である。そこで、この便利な条件を使うときは、注文の種類のカテゴリーごとに別の関数を使うべきだという結論に達しました。

また、ライブラリの接続に問題があります。検索して読んでみたのですが、私が書いているEAをコンパイルする際に接続がエラーになります。私はまだこれに対処する時間がなく、収益性の高いExpert Advisorをより速く書きたいので、必要な3つのライブラリをすべてコピーして特殊関数start()の後に添付し、それらのグローバル変数を EAのグローバル変数に配置し、それらへの参照をコメントアウトしています。あまり便利ではありませんが、効果はあります。
 
00007:

ここのセリフがちょっと曖昧なんですよね。

if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6)))

ありがとうございました。修正されました...これは、コピー、つまり指値と逆指値注文 でのみ動作するように意図された別の関数のプリフォームを使用することの結果です。

00007:

また、ライブラリの接続に問題があります。検索して読みましたが、私が書いているExpert Advisorをコンパイルする際に、接続でエラーが発生します。私はそれを理解する時間がなく、収益性の高いExpert Advisorをより速く書きたいので、必要な3つのライブラリをすべてコピーして特殊関数start()の後に添付し、それらのグローバル変数をグローバルEA変数に置き、それらへの参照をコメントアウトしています。あまり便利ではありませんが、効果はあります。

ちなみに、私はMQHファイルという形で自分のライブラリは使っていません。私は通常、必要な機能をEAにコピーします。つまり、私の標準的な既製のEAは、1つのMQ4ファイルです。必要なものはすべてこのファイルの中にある。たしかに、コードには繰り返しの部分がありますね。ただし、機能のバージョンについては問題ありません。

 

ところで、各関数のテストスクリプトが用意されていますが、そこには必要な追加関数がすべて含まれており、関数と一緒にEAに追加するだけで1つのファイルにまとまり、余計なものは何もありません。機能はシンプルで便利ですが、許可を得て、ポジション用とストップ用を2つずつ、計4つ自分用に作ってみようと思います。私のEAのデリケートな要求に対して、より普遍的なものになるはずです。でも今は、こんなに簡単にできるんだ、と思っています。イゴール ありがとうございました。

アンドレイさん、こんにちは。

 

TimeOpenFirstPos()関数です。

この関数は、最初のオープンポジションの時刻を返す。考慮すべき位置の選択は、外部パラメータで指定する。

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

こんにちは

SetRegression()(https://www.mql5.com/ru/forum/107476/page35)チャンネルにfoebaを追加する方法です。

 
gince:

こんにちは

SetRegression()(https://www.mql5.com/ru/forum/107476/page35)チャンネルにfoebaを追加する方法です。

ダック、簡単だよ。

  1. フィボラインの最初のポイントを設定する(どこから来るか計算する)。
  2. どのバーで2点目を取るか決める。
  3. 次に、EquationDirect() を使って価格を求めます。
  4. 2点の座標が得られたら、SetTLine() 関数で2点を通る直線を引きます。