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

 
trader781:

再度ここにコードを書く必要がないように、投稿844を書き直しました。

0サイズの配列については、0は整数であったり、ブール値の偽証に相当するものであったり、空虚であったり、開始点であったりします。

ゼロというのは関係ないんです。配列のサイズを ゼロにすると、ゼロジンジャーと呼んで、ゼロになります。つまり、配列は0になる。
 
trader781:

再度ここにコードを書く必要がないように、投稿844を書き直しました。

0サイズの配列については、0は整数かもしれないし、ブール値の偽証に相当するかもしれないし、空虚かもしれないし、出発点かもしれません。

あと、正しいコードを正しい記事に挿入させるのは勘弁してください。

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct myorder
  {
   int               Ticket;
   double            orderopenprice;
   int               ordertype;
   double            profit;
   double            stoploss;
   double            lot;
  };
myorder orders[];

int    i;
int    Magic=444;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   CalcOrders();

  }
//+------------------------------------------------------------------+
void CalcOrders()
  {
   int count1=0;

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
        {
         count1++;
         ArrayResize(orders,count1);
         orders[count1-1].Ticket=OrderTicket();
         orders[count1-1].lot=OrderLots();
         orders[count1-1].orderopenprice=OrderOpenPrice();
         orders[count1-1].ordertype=OrderType();
         orders[count1-1].profit=OrderProfit();
         orders[count1-1].stoploss=OrderStopLoss();
        }
     }
   ArraySort(orders,WHOLE_ARRAY,0,MODE_ASCEND);

  }
//+------------------------------------------------------------------+

では、どのような配列で記入し、どのようなフィールドでソートしているかを見てみましょう。そして、最も重要なことは、なぜこの選別が必要なのか、ということです。そのポイントは何でしょうか?

 
Artyom Trishkin:

そして、正しいコードを正しいメッセージに貼り付けさせるのは勘弁してください。

А теперь поглядите какой массив вы заполняете и по какому полю его сортируете. И, главное - зачем нужна эта сортировка? Какой в ней смысл?

注文の配列を、ゼロの値から昇順に並べ替 えます。

例えば、20件の注文があり、そのうち18件はかなり偶然に数ピップス上がったので、すぐに手仕舞いした場合

 
trader781:

注文の配列を、ゼロの値から昇順に並べ替 えます。

例えば、20件の注文があって、そのうちの18件が絶対に偶然に2、3ポイント上がって、すぐに手で閉じたとします。

どうしてもチケットでソートしたい場合は、2つのアレイを作る必要があります。一つは構造体の配列、もう一つは二次元の配列で、一次元目にオーダーチケット、二次元目に構造体の配列にオーダー情報が格納されているインデックスであるカウンターインデックスが格納されています。そして、これらのアレイを1つのループで同時に埋める。

あなたはずっとこの問題を解こうとしていたので、あなたが到達しようとした目的さえ覚えていません。そして、おそらく他のすべての人たちも。

私の記憶が正しければ、注文の一覧から一定の数を選択する必要があります。それで何が問題なんだ?単純な一次元配列を作ってソートして、orderSelect(array[required], SELECT_BY_TICKET) すればいいだけなのに...。であれば、この注文はどうとでもできる。

 
Alexey Viktorov:

どうしてもチケットでソートしたい場合は、2つのアレイを作る必要があります。一つは構造体配列、もう一つは二次元配列で、一次元目に注文券、二次元目に構造体配列の注文情報が格納されているインデックスであるカウンタインデックスが格納されています。そして、これらのアレイを1つのループで同時に埋める。

あなたはずっとこの問題を解こうとしていたので、あなたが到達しようとした目的さえ覚えていません。そして、おそらく他のすべての人たちも。

私の記憶が正しければ、注文の一覧から一定の数を選択する必要があります。それで何が問題なんだ?単純な一次元配列を作ってソートして、orderSelect(array[required], SELECT_BY_TICKET) すればいいだけなのに...。そうすれば、この注文はどうにでもなる。

そこで何をすればいいのか、私も覚えていません。でも、いいこともあるんですよ。

関数の中で別のローカル配列が必要で、それをソートして、ソートした配列からグローバル配列を埋めなければならないのです。

 
Alexey Viktorov:

どうしてもチケットでソートしたい場合は、2つのアレイを作る必要があります。一つは構造体配列、もう一つは2次元配列で、1次元目に注文券、2次元目に構造体配列の注文情報が格納されているインデックスであるカウンタインデックスが格納されている。そして、これらのアレイを1つのループで同時に埋める。

あなたはずっとこの問題を解こうとしていたので、あなたが到達しようとした目的さえ覚えていません。そして、おそらく他のすべての人たちも。

私の記憶が正しければ、注文の一覧から一定の数を選択する必要があります。それで何が問題なんだ?単純な一次元配列を作ってソートして、orderSelect(array[required], SELECT_BY_TICKET) すればいいだけなのに...。であれば、この注文は好きにすればいい。

いや、違うやり方や配列を避ける方法がたくさんあることは理解しています。すでに1つの配列があるのに、なぜ2つ必要なのでしょうか?
 
trader781:
いや、別にアレイを使わずにやる方法がたくさんあるのは理解しています。構造体が1つなのに、なぜ2つなのか?

なぜなら、単純な配列は配列の最初の次元の値でソートされ、構造体の配列は どのようにソートさ れるのか、私にはわからないからです。

でも、面白い質問ですね...。今度は、構造体の配列をソートしてみます。

 
Alexey Viktorov:

なぜなら、単純な配列は配列の最初の次元の値でソートされますが、構造体の配列は どのようにソートされる のか、私には わからないからです。

でも、面白い質問ですね...。今度は、構造体の配列をソートしてみます。

構造的に何のためにあるのか、まったくわからないんです。mqのプログラムは1つのファイルに書かれ、配列は1つのスクロールで処理され、1つの画面に収まるようになっています。この場合、スポーツ的な面白さを追求するための構造とは?
 
Alexey Viktorov:

なぜなら、単純な配列は配列の最初の次元の値でソートされますが、構造体の配列は どのようにソートさ れるのかが全く分からないからです。

質問は面白いけれども...。構造体の配列を整理してみようと思います。

何なのか、何についてなのか、さっぱりわからない

でも、せっかく話題になったのだから、捨てるのもバカらしい。また、クラスの配列もあります。

 
Vitaly Muzichenko:
なぜ構造という形で必要なのか、全く理解できない。mqのプログラムは1つのファイルに書かれ、配列は1つのスクロールで処理され、1画面に収まる。この場合、スポーツ的な面白さを追求するための構造とは?

私たちはスポーツのためにすべてを書きます。まず、何がどのように機能するのかを理解し、より効果的な書き方を考えるようになります。


構造体配列のソートについては、予想通り、実験に失敗しました。コンパイル時にすでに「式は効果 なし」と表示されていた