どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 121

 
hoz:

ここでは配列が望ましいということは既に理解しています)))そして、そのバリエーションでは、私が上に説明したものは正確ではないのですか? (純粋に興味のために。すでにすべてが明確になっていると思います)

そんなことをイメージしていました。それで...考える方向が...

int i_magic=123;
int OrdersMassive[7];
//+----------------------------------------------------------------------------+
int start() {
   FindOrders(OrdersMassive);
   int i, num=0;
   for (i=0; i<=7; i++) {
      Print("Количество "+GetNameOP(i)+" = "+OrdersMassive[i]);
      num+=OrdersMassive[i];
      }
   Print("Всего ордеров = "+(num-OrdersMassive[6]));
   return(0);
}
//+----------------------------------------------------------------------------+
void FindOrders(int &mass[]) {
   int i, t, k=OrdersTotal()-1;
   ArrayInitialize(mass,0);
   for (i=k; i>=0; i--) {
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderMagicNumber()!=i_magic)    continue;
      if (OrderSymbol()!=Symbol())        continue;
      t=OrderType();
      mass[t]=mass[t]+1;
      }
}   
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
   switch (op) {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("Buy Limit");
      case OP_SELLLIMIT: return("Sell Limit");
      case OP_BUYSTOP  : return("Buy Stop");
      case OP_SELLSTOP : return("Sell Stop");
      case 6           : return("Неторговое изменение баланса");
      default          : return("Не знаю, чё за тип такой...");
   }
}
//+----------------------------------------------------------------------------+

そして、あなたがそこに持っているもの、私は本当に見ていませんでした......

 
r772ra:

これはどうでしょう?

私のバージョンの機能はもっと短いものです.:)

//+----------------------------------------------------------------------------+
void FindOrders(int &mass[]) {
   int i, t, k=OrdersTotal()-1;
   ArrayInitialize(mass,0);   
   for (i=k; i>=0; i--) {
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderMagicNumber()!=i_magic)    continue;
      if (OrderSymbol()!=Symbol())        continue;
      t=OrderType();
      mass[t]=mass[t]+1;
      }
}   
//+----------------------------------------------------------------------------+
 
r772ra:

そうかもしれませんね。

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
      {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)   p++;
      if (OrderType() < 6)  t++;
       }
  pr ("FindOrders(): " + "t = " + t);
  pr ("FindOrders(): " + "p = " + p);
}

それもうまくいかない。そこに欠点があった。今はこんな感じです。

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
      }
      if (OrderType() < 6)
          t++;
      else 
      {
         pr("Позиций в рвнке нет!");
      }
      
      pr ("FindOrders(): " + "t = " + t);
      pr ("FindOrders(): " + "p = " + p);
   }
}

市場に注文がないときは、カウンターはゼロにならない。これはデタラメだ。ここで何が問題なのか?アルテムが書いたものを見てみる。

 
hoz:

それもダメなんです。そこに欠点があった。今はそういう時代なんです。

市場に注文がないときは、カウンターがゼロになることはない。これはデタラメだ。何が問題なのか、私にはわからない。アルテムが書いたものを見てみる。


これをループから外す。

pr ("FindOrders(): " + "t = " + t);
pr ("FindOrders(): " + "p = " + p);
これが情報のアウトプット なんですね。
 
r772ra:


これをループから外す

これが情報のアウトプットなんですね。


そうですね(苦笑)。さて、私の場合はどうだったかというとくだらないミスもある。C++で1ヶ月間掘り続けた。そして今、私はμlでこんな愚かな間違いを犯しています。脳が焼かれているのでしょう :(
 
一般的には、1ティック ごとに注文を検索しても問題ないのでしょうか?それとも、すべてのバーで実行するのが良いのでしょうか?どちらが良くてどちらが悪いのか、まだ頭に入っていません。
 
hoz:
一般的には、1ティックごとに注文を検索しても問題ないのでしょうか?それとも、すべてのバーで実行するのが良いのでしょうか?何が良くて、何が悪いのか、まだわかりません。
バーオープンによる監視中にバー内でポジションを決済した場合、エキスパートアドバイザーは次のバーがオープンするまでポジション 数の変更を知ることができません。
削除済み  
hoz:


t は全注文の数である。

pは 保留中の注文数

条件が成立している場合。

が真なら、tと pの 両方が増分されます。なぜなら、タイプ2から5の注文は、保留中の注文と注文の両方であるからです。つまり、両方のカウンターをインクリメントする必要があります。そして、その条件が成立した場合。

すると、保留中の注文はないが、成行注文はある。つまり、 t カウンター、つまり総注文数のカウンターを増やすということです。

そして、何もなければ、注文がないことを印刷します


t =OrdersTotal();

なぜ数えるのか? 数えたのか?

 

こんにちは!この関数のエラーをお探しですか?

未決済の注文は、発注から2日後に削除するという考え方です。

min=1440とした。

if(OrdersTotal()<1)
{return;
 }
  for(int i=OrdersTotal()-1;i>=0;i--)
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol())
       {
        if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
        {
          if(TimeCurrent()-OrderOpenTime()>min)            
            {
            OrderDelete(OrderTicket());
          return;
          }
        }
      }
    }
return;}
 
pako:



pakoさん、ありがとうございます。