学習ロジック - ページ 12

 

ビクター ここはスイッチの方がいいと思うんですよね。スピード感があって、ビジュアルもいい。

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();
      } else if (lOrderOpenTime<OrderOpenTime()) {
         lOrderOpenTime=OrderOpenTime(); 
         Res=OrderTicket();
      }
   }
   return (Res);
}

ちなみに、この関数はFindLastOpenTimeという名前で、チケットを返します。

その方がいいのでしょうか?

datetime FindLastOpenTime(int tip, int imagic, int& ticket) 
{
   //...
}
 
TheXpert:

ビクター、スイッチはこっちのほうがいいと思うんですよ、早くてわかりやすいし。


本当にスッキリしました。
 

TheXpert:

ちなみに、この関数はFindLastOpenTime, ...という名前です。

という考え方です。
if (lOrderOpenTime<OrderOpenTime()) {
         lOrderOpenTime=OrderOpenTime(); 
         Res=OrderTicket();
      }
は-1ですぐ動き出すかもしれませんが、なぜ外付けのif...elseが必要なのかがよくわかりません。リターン、イミホは、本当に良いlOrderOpenTime、その後リターン-1は、エラーをキャッチすることができますです。
 
ええ、してませんよ。
 

は、このような使い方をするのが理にかなっているのでしょうか?

int Z[];

int Fn()
{
....
  int Z = 0;

  Z++;
....

return(Z);
}
start()
{
   .......
   Z[f]=3;
   ......
}
 
いや、中の論理z(小)。一般的には、こういうのはいじらない方がいいんですよ。
 

は、常に循環オペランドでそのような構築の論理を殺した。

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 演算子が正反対の 場合、ループを抜けるのか・・・。

私にとっては、標準的なロジックの方が明確で理解しやすいのですが......。

int FindLastOpenTime(int type, int imagic){int time = 0;
  for(int i = OrdersTotal() -1 ;i>=0;i--){
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
        if(OrderSymbol()==Symbol()){
           if(OrderType()==type){
              if(OrderMagicNumber()==magic){
                 if(OrderOpenTime()>time){
                    time=OrderOpenTime();
                 }
              }
           }
        }
     }
  }
  return(time);
}  
 
TheXpert:

パンクその2。ロジック(論理)と簡潔さには、ほとんど相関がありません。

MQLの典型的な例ですが、ちなみに、多くの人はこれを使うことに抵抗はありません。

これは論理ではない、論理の殺人だ。さらに、暗黙のエラーの温床になる可能性もあります。


パンクの位置がわからない?そして、なぜ2枚目なのか?2番目だとしたら、1番目はどこにあるのでしょうか?
 
Integer:
オフィスやZIPがない人へ。

Dimaは、metaeditor.exeを持っていない人のために何かを追加しました :-)。

 
Vinin:


ビクター、改めておめでとうございます。