MQLエキスパートへの質問 - ページ 10

 
FAQ:
注文が開いたらチェックをして、開いたらチェックで2つ目の注文を開いてもよいのですが・・・。

状況に応じて開き方を変える関数を2つ書いて、それぞれの最後に(別の関数になると思いますが)、どんな注文がいくつ開いていて、どんな注文が見逃されて開き直すかをチェックします。

もし、あなたがFXの 観点からEAの位置づけに詳しい方であれば、もっと詳しく知って、取引ロボットに使ってみたいと思われるかもしれません。改めてお礼を申し上げたい(詳細不明ですみません)。

 

おはようございます。

問題が発生しました。指定した楽器の「集計」ポジションの大きさを返す関数が見つかりません私はI.KIMのブランチを含むフォーラム全体を検索し、https://www.mql5.com/ru/forum/131859- がある - 私が必要とするものを除いて、たくさんのための異なる関数!。

例えば、EURの「買い」案件が複数ある場合、それらの合計金額を決定する方法を教えてください。

GetLot(EURUSD, OP_BUY, magic)

double GetLot(string sy="", int op=-1, int mn=-1) {// возвращает сувокупный размер поз.
   double   l=-1;
  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) {

              I = ------  ???????????
              ------ ????????????
              

            }
          }
        }
      }
    }
  }
  return(l);
}
 

疑問が晴れた!?ある機能が発見されました。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=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=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
それはないだろう )
 

どう間違っているのでしょうか?では、この関数は何を返すのでしょうか?

"たくさんのオープンポジション の合計を返す" - そう書いてありますね?

https://www.mql5.com/ru/code/9394

 
Rita:

"オープンポジションのロットの合計を返す" - 書かれていないのでしょうか?

そうなんです。決してポジションの総量では ありません。たくさん開いて確認することができます。
 

ロクに考慮する必要はない。というか、こうです。

必要なのは、これだ。もし、いくつかの売りと買いのポジションがある場合、私はカウンター(補償)ポジションを削除する必要があります - そう、一方向だけに残るように。

まず、すべての「ベイ」の合計を計算し、次にすべての「セル」の合計を計算したかったのです。その後、その差(つまり、どちらの総容量が大きいか)を求めます。そして、この「差」は市場に残すべきであり、-そして、反対のものはすべて取り除くべきなのだ

では、この関数GetAmountLotFromOpenPosは、ここでは動作しないのでしょうか?例えば、私が

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-すべての売りポジションのロット数の合計が返されるのでは?

 
Rita:

-彼女はすべての売りポジションのロットの合計を返してくれないのですか?

もしそうならごめんなさい、大丈夫です。月曜日まだ頭がフル回転していないのですが......)
 
Rita:

ロクに考慮する必要はない。というか、こうです。

必要なのは、これだ。もし、いくつかの売りと買いのポジションがある場合、私はカウンター(補償)ポジションを削除する必要があります - そう、一方向だけに残るように。

まず、すべての「ベイ」の合計を計算し、次にすべての「セル」の合計を計算したかったのです。その後、その差(つまり、どちらの総容量が大きいか)を求めます。そして、この「差」は市場に残すべきであり、-そして、その逆のものはすべて取り除くべきだ。

では、この関数GetAmountLotFromOpenPosは ここでは動作しないのでしょうか?例えば、私が

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-すべての売りポジションのロット数の合計が返されるのでは?

一般的な場合

SummLot = GetAmountLotFromOpenPos("0", OP_BUY, MagicNumber)- GetAmountLotFromOpenPos("0", OP_SELL, MagicNumber)です。

 
そう、それが「きれいな」バランスを得るためにやったことなのです。