Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 121

 
hoz:

Eu já entendi que a matriz é preferível aqui)))) E nessa variante, que descrevi acima, não é exata... (puramente por interesse. Acho que tudo já está claro)

Algo assim era o que eu tinha em mente. Então... a direção para pensar...

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("Не знаю, чё за тип такой...");
   }
}
//+----------------------------------------------------------------------------+

E o que você tem aí, eu realmente não olhei ...

 
r772ra:

Que tal isso?

Minha versão da função é mais curta ... :)

//+----------------------------------------------------------------------------+
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:

Talvez sim.

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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);
}

Também não funciona. Tive uma falha lá. É assim agora:

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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);
   }
}

Quando não há ordens no mercado, os balcões não vão a zero. Isso é uma besteira. O que está errado aqui? Vou ver o que a Artem escreveu.

 
hoz:

Também não está funcionando. Tive uma falha lá. É assim que as coisas são agora:

Quando não há ordens no mercado, os balcões não chegam a zero. Isso é uma besteira. O que está errado aqui, eu não sei. Vou ver o que a Artem escreveu.


Tire isto do laço.

pr ("FindOrders(): " + "t = " + t);
pr ("FindOrders(): " + "p = " + p);
Presumo que esta é a saída da informação.
 
r772ra:


Tirar isto do laço

Presumo que esta é a saída da informação.


Certo. (risos) Bem, o que aconteceu comigo. Alguns erros bobos. Estive cavando em C++ por um mês. E agora eu tenho erros tão bobos em µl. Meu cérebro deve estar queimado :(
 
Em geral, é possível procurar por pedidos em cada carrapato? Ou é melhor executar em todos os bares? Ainda não tenho isso na minha cabeça, o que é melhor em um caso e no outro.
 
hoz:
Em geral, é possível procurar por pedidos em cada carrapato? Ou é melhor executar em todos os bares? Eu ainda não sei o que é melhor em um caso e o que é melhor em outro.
Se uma posição for fechada dentro de um bar durante o monitoramento pela abertura do bar, o Conselheiro Especialista não saberá das mudanças no número de posições até que o próximo bar abra.
 
hoz:


t é o número de todos os pedidos.

p é o número de ordens pendentes

Se a condição for verdadeira:

é verdade, então tanto t como p são incrementados, já que qualquer ordem do tipo 2 a 5 é tanto uma ordem pendente como uma ordem. Isto significa que devemos incrementar os dois balcões. E se a condição for verdadeira:

Então não há nenhuma ordem pendente, mas há uma ordem de mercado. Isso significa que vamos aumentar o contador t, ou seja, o contador do número total de pedidos.

E se não houver nada, então imprimiremos que não há pedidos


t = OrderTotal();

por que contar???? contou???

 

Olá! à procura de erros nesta função.

A idéia é que as ordens pendentes que não tenham sido abertas devem ser apagadas dois dias após terem sido colocadas.

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:



Obrigado, pako.