bool IsOrderType(int type)
{
switch (type)
{
case OP_BUY:
case OP_SELL:
case OP_BUYLIMIT:
case OP_SELLLIMIT:
case OP_BUYSTOP:
case OP_SELLSTOP:
return (true);
}
return (false);
}
ところで、テスターでの作業の合理的な最適化ですが、最近使っているんです。
int FindLastOpenTime(int tip, int imagic)
{
int Res=-1;
int lOrderOpenTime=-1;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
if (IsTesting()) return (OrderTicket()); // тутif (lOrderOpenTime==-1) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
} elseif (lOrderOpenTime<OrderOpenTime()) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
}
}
return (Res);
}
ちなみに、この関数はFindLastOpenTimeという名前で、チケットを返します。
その方がいいのでしょうか?
datetime FindLastOpenTime(int tip, int imagic, int& ticket)
{
//...
}
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != imagic) continue; if (!(tip==-1 || isOrderType(tip))) continue;
ビクター ここはスイッチの方がいいと思うんですよね。スピード感があって、ビジュアルもいい。
ところで、テスターでの作業の合理的な最適化ですが、最近使っているんです。
ちなみに、この関数はFindLastOpenTimeという名前で、チケットを返します。
その方がいいのでしょうか?
ビクター、スイッチはこっちのほうがいいと思うんですよ、早くてわかりやすいし。
本当にスッキリしました。
TheXpert:
ちなみに、この関数はFindLastOpenTime, ...という名前です。
if (lOrderOpenTime<OrderOpenTime()) { lOrderOpenTime=OrderOpenTime(); Res=OrderTicket(); }
は-1ですぐ動き出すかもしれませんが、なぜ外付けのif...elseが必要なのかがよくわかりません。リターン、イミホは、本当に良いlOrderOpenTime、その後リターン-1は、エラーをキャッチすることができますです。は、このような使い方をするのが理にかなっているのでしょうか?
は、常に循環オペランドでそのような構築の論理を殺した。
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;
ヘルプを参照してください。
continue 文は、最も近い外部while 文またはfor 文の先頭に制御を移し、次の繰り返しを開始させる。この演算子はbreakの 反対語です。
ループを抜けるのか、continue 演算子と break 演算子が正反対の 場合、ループを抜けるのか・・・。
私にとっては、標準的なロジックの方が明確で理解しやすいのですが......。
パンクその2。ロジック(論理)と簡潔さには、ほとんど相関がありません。
MQLの典型的な例ですが、ちなみに、多くの人はこれを使うことに抵抗はありません。
これは論理ではない、論理の殺人だ。さらに、暗黙のエラーの温床になる可能性もあります。
パンクの位置がわからない?そして、なぜ2枚目なのか?2番目だとしたら、1番目はどこにあるのでしょうか?
オフィスやZIPがない人へ。
Dimaは、metaeditor.exeを持っていない人のために何かを追加しました :-)。
ビクター、改めておめでとうございます。