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

 
wishmast:

OrdersTotal()関数で 注文を検索すると-1と表示されるのはなぜか教えてください。

例:for (i=OrdersTotal()-1 ;i>=0; i--)

なぜOrdersTotal()でないのか?

この関数での注文のカウントは0から始まるのでしょうか、それとも1から始まるのでしょうか?つまり、注文が1件の場合、OrdersTotal()は0になるのか1になるのか?

ゼロから計算
 
wishmast:

OrdersTotal()関数で 注文を検索すると-1と表示されるのはなぜか教えてください。

例:for (i=OrdersTotal()-1 ;i>=0; i--)

なぜOrdersTotal()でないのか?

この関数での注文のカウントは0から始まるのでしょうか、それとも1から始まるのでしょうか?つまり、注文が1件の場合、OrdersTotal()は0になるのか1になるのか?

OrdersTotal()数量を表示します。つまり、注文が 1 件であればOrdersTotal() は 1 になりますが、注文のリストでは 0 から始まるレポートと なります

0 - 1次

1 - 2次

2 - 3番目

といった具合に。

そのため、リストの最後から検索を始めると、OrdersTotal() の総数から1を引 かなければならないのです。

 
Sergey Gritsay:

OrdersTotal()は数量を表示します。つまり、注文が1 つならOrdersTotal()は1になりますが、注文のリストではゼロから 始まります。

0 - 1次

1 - 2次

2 - 3番目

といった具合に。

そのため、リストの最後から検索を始めると、OrdersTotal() の総数から1を引 かなければならないのです。

しかし、最初の式から1を引かなければ、順序が1つであれば2回の繰り返しが起こるので、エラーにはなりません。1回で全部できるのに、2回繰り返す必要がないのであれば、-1、ですね。
 
wishmast:
しかし、最初の式で1を引かなければエラーにはなりません。もし、1つの順序があれば、2回の繰り返しが起こります。必要なことが1回で済むのに2回繰り返す必要がないのであれば、-1、ですね。
はい、その通りです。
 
Sergey Gritsay:
はい 正しい

ちょっと違うか。

プリフィックスデクリメントを 使用することができます。

for(int i = OrdersTotal(); i >= 0; --i)
 
trader781:
注文の山があるのだから、必要なものを取り出せばいいのでは?(正しいもの)を使って、好きなことをする? 例えば、順序(i-4)のように。
MT4テスターでしか動作しないため。または、1つのシンボルだけで、このEAだけで取引する場合。
 
Vitalie Postolache:
なぜなら、これはMT4テスターでしか動作しないからです。または、1つのシンボルだけで、このEAだけで取引する場合。

考えてみれば、EAはどのペアも同じで、口座残高だけが 共通している(切り替えは最後になる)

EAがマーケットオープンの条件を満たした注文にフィルターをかける。

どうしたものか

 
trader781:

考えてみれば、EAはどのペアも同じで、口座残高だけが 共通している(切り替えは最後になる)

EAのマーケットオープン条件を満たす全ての注文を対象に、シミュレーションを行う。

どうしたものか

さて、何が問題なのかは、すでに上記で説明されていますね。注文を自分のものだけとしてカウントし、合計金額で配列のインデックスを取ることができます - 私たちは空のセルを持つ配列を取得します。これは何のため?また、配列が空でなかった場合、「不要な」フィールドには不要なゴミが含まれることになり、エラーにつながる、お金の話になってしまう。
 
Vitalie Postolache:
さて、何が問題なのかは、すでに上記で説明されていますね。注文は自分のものだけをカウントし、配列のインデックスをとって合計数を計算するため、空のセルを含む配列になります。これは何のため?また、配列が空でなかった場合、「不要な」フィールドには不要なゴミが含まれることになり、エラーにつながる、お金の話になってしまう。

なるほど、そういうことだったんですね。

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

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


だろう?

 
条件を書くのを手伝ってください:口座の利用可能資金が 入金額の50%未満であれば{アクション} MT5