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 701

 

Resolvido desta forma:

int nday;

 if(OrdersTotal()==0)

 {

  double lot=(AccountBalance()/ MinLot)*0.01;

  if(center>Ask && pokupaem>0 && prodaem<1 && prodaem1<1 && SelBuyDaily==Vhodim1 && proverka==1)

  {

   x=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,Komment,Magic,0,Blue);

   nday=DayOfYear();

  }

  if(OrderSelect(x,SELECT_BY_TICKET)==true)

 {

  if((OrdersTotal()>0 && OrderCloseTime()==0 && OrderType()==OP_BUY) && (nday<DayOfYear() || OrderOpenTime()<iTime(NULL,0,0)))

  {

   if(pokupaem>0 && prodaem<1 && Ask+atr<OrderOpenPrice() && proverka==1)

   {

    x=OrderSend(Symbol(),OP_BUY,OrderLots()*Ml,Ask,3,0,0,Komment,Magic,0,Blue);

    nday=DayOfYear();

   }

  }

 }

 

Pela primeira vez tentei escrever uma abertura de posição no laço, pois não descarto a abertura em outros pares também.

Mas, por alguma razão, nada se abre no ciclo! Eu realmente preciso de um laço especial para abri-los! É verdade, eu só verifiquei isso no testador!

Eu escrevi uma normal:

    optal = OrdersTotal();
    for(op = optal-1; op >= 0; op--) 
    { 
      if(OrderSelect(op,SELECT_BY_POS,MODE_TRADES))
      { 
        if(OrderSymbol() != Symbol()) continue;
        if(OrderMagicNumber() != magic) continue; 
// и т.д.

O que há de errado para abrir pedidos, posições? Obrigado por sua ajuda!

 
borilunad:

Pela primeira vez tentei escrever uma abertura de posição no laço, pois não descarto a abertura em outros pares também.

Mas, por alguma razão, nada se abre no ciclo! Eu realmente preciso de um laço especial para abri-los! É verdade, eu só verifiquei isso no testador!

Eu escrevi uma normal:

O que há de errado para abrir pedidos, posições? Obrigado pela ajuda!



Até que não haja ordens, o ciclo não terá início. Qual é o objetivo do ciclo em geral?
 
borilunad:

Pela primeira vez tentei escrever uma abertura de posição no laço, pois não descarto a abertura em outros pares também.

Mas, por alguma razão, nada se abre no ciclo! Eu realmente preciso de um laço especial para abri-los!

Eu escrevi uma normal:

O que há de errado para abrir pedidos, posições? Obrigado pela ajuda!

O laço é executado mais rapidamente do que o fio comercial é liberado. É por isso que devemos adicionar um loop de atraso enquanto(!IsTradeContextBusy()) Sleep(100);
 
valeryk:


O loop não começará até que não haja ordens! Qual é a finalidade do laço em geral?


Obrigado! Foi o que eu pensei! Portanto, se, por exemplo, eu quiser abrir no primeiro par, é suficiente sem um laço, mas com if(OrdersTotal == 0). E quando eu quiser abrir outra ordem do mesmo ou de outro par, preciso de um laço, e ele funcionará! Vou tentar agora!

Acho que terei que mudar muitas coisas na abertura, mas, em princípio, entendo como devo fazer! Obrigado!

 

Alguma lógica perniciosa, na verdade. Eu não olhei com cuidado na primeira.... Por que precisamos de OrdensTotal() ao abrir ordens?

Bem, se precisarmos abrir várias ordens no loop, o loop deve ser organizado de acordo com o número de ordens necessárias. E se precisarmos apoiar constantemente este número, temos que usar outras regras.

Por exemplo, precisamos abrir 7 pedidos.

for(int i = 0; i < 7; i++)
{
while(!IsTradeContextBusy()) Sleep(100); // Ожидание освобождения торгового потока

int ticket = OrderSend(Symbol(), ..............); // Открытие ордера
if(ticket > 0) Print("Открылся ордер № ", i, " ticket - ", ticket); // Проверка пропусков при открытии.
}
Mas esta é uma variante curta. Uma boa idéia seria acrescentar o tratamento de erros ao abrir pedidos
 
AlexeyVik:

Alguma lógica perniciosa, na verdade. Eu não olhei de perto na primeira.... Por que precisamos de OrdensTotal() ao abrir ordens?

Bem, se precisarmos abrir várias ordens no loop, o loop deve ser organizado de acordo com o número de ordens necessárias. E se precisarmos apoiar constantemente este número, temos que usar outras regras.

Por exemplo, precisamos abrir 7 pedidos

Mas esta é uma variante curta. Uma boa idéia seria acrescentar o tratamento de erros ao abrir pedidos
!

Obrigado! Mas eu preciso de um laço para que as corujas não vejam outros pares! Lidarei com os erros mais tarde! Eu até fiquei feliz quando o erro 130 apareceu no registro, isso significa que funciona! Os erros são tratados em minhas funções externas! Mais uma vez, obrigado!
 
borilunad:

Obrigado! Mas eu preciso de um laço para que as corujas não vejam outros pares! Lidarei com os erros mais tarde! Eu até fiquei feliz quando o erro 130 apareceu no registro, então está funcionando! Os erros são tratados em minhas funções externas! Mais uma vez, obrigado!
Essa é a perniciosidade da lógica. A coruja não pode não ver outros pares. Ela pode e deve ser forçada a não processar os PEDIDOS de outros símbolos que já estão abertos. E na função OrderSend(............), você deve escrever um certo Symbol() ou em um formato de texto, por exemplo "EURUSD"... o que quer que você coloque lá será aberto. Ou tente abrir...
 
AlexeyVik:

Alguma lógica perniciosa, na verdade. Eu não olhei com cuidado na primeira.... Por que precisamos de OrdensTotal() ao abrir ordens?

Bem, se precisarmos abrir várias ordens no loop, o loop deve ser organizado de acordo com o número de ordens necessárias. E se precisarmos apoiar constantemente este número, temos que usar outras regras.

Por exemplo, precisamos abrir 7 pedidos

Mas esta é uma variante curta. Uma boa idéia seria acrescentar o tratamento de erros ao abrir pedidos

Esta é uma boa maneira de verificar se podemos abrir até oito pedidos de uma só vez. Prometeram-nos, mas ainda ninguém os verificou.
 
Vinin:

Uma boa maneira de testar a capacidade de abrir até oito pedidos em um único tick. Prometeram-nos, mas ainda ninguém os verificou.

Eu não entendo...