[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 525

 
Desculpe. Você pode imaginar que o último adendo não está logado?
//----
   for ( i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
    if( OrderMagicNumber( )==2000 
    &&OrderSymbol()==Symbol()&&
    OrderTakeProfit( )==OrderClosePrice(        )&&wremjapomnim<OrderCloseTime( ) ||
   OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()
   &&OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )){
   Alert ("нашли MODE_HISTORY");
 for ( i=OrdersTotal();i>0;i--)  {
 Alert ("паследний цикл",i);
  OrderSelect(i-1,SELECT_BY_POS );
  if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
  || OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol())  { 
  Alert ("OrderTicket( )",OrderTicket( )); 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); 
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }}}}                              
   

Especificamente, a linhaAlerta ("OrderTicket( )",OrderTicket( )); o que poderia significar que o último ciclo não está concluído!!!

Aqui está o registro. Antes, eu freqüentemente reescrevia o código, muitas vezes encontrava erros, acho que4108 e 4050, agora não há erro! Sim, bem, de qualquer forma, não está funcionando!

 

Sim, bem, acho que é aí que as coisas se complicam.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

É isso mesmo, s... O que eu fiz de errado na fila?


 
Por golly, eu não sei, uma condição como condição.
 
Dimka-novitsek:

Sim, bem, acho que é aí que as coisas se complicam.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

É isso mesmo, s... O que eu fiz de errado na fila?


|| é executado primeiro, depois &&
 
ilunga:
somente por este ponto poderia ser uma ordem remota pendente e o resultado seria incomum ;)

Não entendo, não está apagado que estou selecionando aqui, não histórias de moda. OK, não é necessário, isso é mais tarde.
 

-AAH!!! Por isso, vou colocar os dois lados!!! OBRIGADO!!!!!

Whew!!!

Ok, vou tomar um banho. Está quente.

 
Dimka-novitsek:

Eu não entendo, não estou eliminando os apagados, não as histórias de moda. Ok, não é necessário, isso é mais tarde.

Suponha que temos 1 ordem pendente para apagar e chegamos à linha (para facilidade de leitura, eu a quebrei pelo operador)

OrderDelete(OrderTicket( ));
Alert ("OrderDelete-vse",  GetLastError( ) );
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse",  GetLastError( ) );
 C=0;

Portanto, temos esta ordem:

1) nós o apagamos, e ao fazer isso:

a) temos sorte e é eliminado

b) não pode ser apagado porque o preço está muito próximo/o servidor está sobrecarregado/ a Internet está baixa/etc. Mas nós vamos em frente de qualquer forma.

2) se algo der errado, nós o anotamos

3) fechar a ordem (pendente!!! que eliminamos no primeiro ponto!!!!)

resultado... Eu não posso prever 100%, mas parece outro erro

4) exibir uma mensagem sobre o assunto

 
Dimka-novitsek:

Bem, sim, é aí que as coisas se complicam.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

É tão certo se... O que eu estraguei na fila?

Vamos colocar as coisas desta maneira... Para que ninguém leve um tiro e você não seja mandado embora... :))

Vamos começar em ordem. Primeiro, encontraremos a última posição fechada e nos certificaremos de que ela seja fechada na tomada:

   int j=-1;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for (int i=0; i<OrdersHistoryTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=Symbol())     continue;
         if (OrderType()>1)               continue;
         if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
            if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
               }
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

Isto:

// Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

Esta será sua lição de casa... :)

 
THANK YOU!!!!!!
 
Escrita legal!!!!