MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 558

 

それだ、自分のミスを見つけたんだ。疑問に思ったことを声に出さないと、どうして間違ったのか、後で理解できない人もいます。

残念ながら、どうやら私もその一人のようです。(((

 

チケット番号の ことでしょうか

落とし穴はありますか?

 
Decromor:

ごあいさつ


オーダーは、OrderSelectコマンドを使用して、その番号でアクセスすることができます。

質問、既存のオーダーの数を事前に把握することで、全てをスルーすることはできないのでしょうか?例えば、新しい注文を開けるときに、この番号を記憶しておくことができます。

この番号は1から順番に割り当てられると理解しています。どのようなニュアンスが考えられるでしょうか。

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

  1. このオーダーは、オーダーリストのインデックス(ループ内で試す場合)、またはチケット(事前に分かっている場合)で対処することができます。
  2. 好ましくない - 何らかの障害(Expert Advisorの再起動、端末の再起動、システム障害など)が発生した場合、記憶したチケットが失われる可能性があります。そのため、端末のグローバル変数 か、ファイルに保存する必要がある。これは実現可能ではあるが、毎回のティックで検索するのではなく、必要なときだけ検索する通常の検索よりも困難である。
  3. いいえ、1番から順番に、テスターのみです。
  4. どういたしまして。
 
Artyom Trishkin:
  1. オーダーリスト内のインデックス(ループ内検索時)、またはチケット(事前に分かっている場合)で参照することができます
  2. 好ましくない - 何らかの障害(EAの再起動、端末の再起動、システム障害など)が発生した場合、記憶したチケットが失われる可能性があります。そのため、端末のグローバル変数 か、ファイルに保存する必要がある。これは実現可能ではあるが、毎回のティックで検索するのではなく、必要なときだけ検索する通常の検索よりも困難である。
  3. いいえ、1番から順番に、テスターのみです。
  4. お願いします。

OnInit()のコードでOrdersTotal()のループを実行し、未決済注文に関するすべての情報、特にOrderTicket()を収集することは可能でしょうか。

string orders[][3];

int OnInit() {
   for (int n = OrdersTotal() + 1; n >= 0; n--) {              
      if (OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) {
         int i = (ArraySize(orders) / 3);
         ArrayResize(orders, i + 1);
         orders[i][0] = IntegerToString(OrderTicket());
         orders[i][1] = IntegerToString(OrderType());
         orders[i][2] = DoubleToString(OrderOpenPrice(), Digits);   
      } 
   }
   return(INIT_SUCCEEDED);
}


TPやSPで注文が自動決済された場合、その注文のデータを取得することは可能ですか?

 
Decromor:

OnInit()本体でプログラムを実行し、OrdersTotal()ループで未決済注文の情報、特にOrderTicket()をすべて収集することは可能でしょうか。


TPやSPで注文が自動決済された場合、その注文のデータを取得することは可能ですか?

  1. はい、できます。それから?注文内容は時間の経過とともに変化する可能性があり、初期化時に収集した情報は古くなります。
  2. 最後に閉じたオーダーを探し出し、それに関する必要な情報を得る必要があります。
 
Artyom Trishkin:
  1. できます。それから?オーダーは時間と共に変化し、初期化時に収集した情報も古くなります。
  2. 最後に決済された注文を探し、その注文に必要なすべての情報を取得する必要があります。

BUY、SELL時に必要なデータを配列に保存し、この配列をロールして価格に応じて必要な変更(SLをBreakevenに移動、逆張り後にクローズ注文など)、チケット経由で必要なオーダーにアドレスします。

しかし、私はTPとSLを持つ注文を持っており、それは私の知らないうちに閉じるかもしれません。最後のクローズドオーダーを1ティック ごとに調べて、配列の中から探して修正するというオプションは好きではありません。

"注文は時間の経過とともに変化し、初期化時に収集した情報は古くなります。" これは、注文を締め切るということでしょうか。

私が見る唯一のオプションは、tickで2つのループをループすることです、私の注文とOrdersTotal() と私はそれが好き ではありません。

"しかし、通常のブルートフォースよりも複雑で、毎回のティックでは行わず、必要なときだけ行う" このアルゴリズムを共有してください。

 
Decromor:

OnInit()本体でプログラムを実行し、OrdersTotal()ループで未決済注文の情報、特にOrderTicket()をすべて収集することは可能でしょうか。


TPやSPで注文が自動決済された場合、その注文のデータを取得することは可能ですか?

そして、なぜこれをすべて文字列に変換する必要があるのでしょうか。文字列型 なのか?

 
Decromor:

OnInit()本体でプログラムを実行し、OrdersTotal()ループで未決済注文の情報、特にOrderTicket()をすべて収集することは可能でしょうか。


TPやSPで注文が自動決済された場合、その注文のデータを取得することは可能ですか?

struct SOrders
{
     int ticket,
         type;
     double price;
} orders[];

int OnInit() {
   for (int n = 0; n < OrdersTotal(); n++)
   {              
      if(!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
      int i = ArraySize(orders);
      if(ArrayResize(orders, i+1) < i+1) continue;
      orders[i].ticket = OrderTicket();
      orders[i].type   = OrderType();
      orders[i].price  = OrderOpenPrice();
   }
   return(INIT_SUCCEEDED);
}
 
Konstantin Nikitin:
初めて知る情報、ありがとうございます。
 
Alexey Viktorov:

なぜこれを文字列に変換するのか?文字列型

なぜなら、例えばチケットはInt型、価格はDouble型であり、配列は1つの型にしかならないからです。