[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 364

 
Verifiquei este código agora em uma conta real, tudo está bem, modifiquei todas as ordens de mercado, mas a única coisa que não toquei foram as ordens pendentes. Qual é o problema? O que você acha?
 
Noterday:
Verifiquei este código em minha conta real, está tudo bem, modifiquei todas as ordens de mercado, mas deixei as ordens pendentes intocadas. Qual é o problema? O que você acha?


Na condição

         if(cmd==OP_BUY || cmd==OP_SELL)

e no estado

if(cmd==OP_BUY)
 
Eu não entendo :(
 
Noterday:
Eu não entendo :(

Há também uma frase no nome do roteiro que diz apenas ordens de mercado. Remover essas condições para ordens de mercado, então as condições para ordens de mercado e pendentes serão atendidas - isso é tudo. Não, não é tudo - leia com atenção - exigências e limitações. ...e certifique-se de acrescentar estes requisitos mínimos a seus pedidos pendentes para que eles também sejam atendidos.
 
KONDOR:


Portanto, não tenho nenhuma dessas linhas, não seleciono o tipo EM TUDO, mas modifico TODAS as que tenho, quer estejam pendentes ou no mercado.
 
Noterday:
Portanto, não tenho nenhuma linha desse tipo, não seleciono o tipo EM TODOS, modifico TODOS, seja ela pendente ou de mercado.

Estou escrevendo para ler cuidadosamente: " FreezeLevel distance restriction".

As ordens de mercado não são fechadas se os valores StopLoss ou TakeProfit violarem os requisitos dos parâmetros FreezeLevel.
As ordens do mercado StopLoss ou TakeProfit não podem ser modificadas se os valores StopLoss ou TakeProfit violarem os requisitos do parâmetro StopLevel.
A eliminação e modificação de ordens pendentes não são realizadas se o preço em aberto declarado da ordem violar os requisitos do parâmetro FreezeLevel.
 

E pronto, o erro estava lá:

if (OrdersTotal()!=0)
  {
   
   bool   modify;
   int    Done=0;
   for (i = 1; i <= OrdersTotal(); i++)
      {
       if (OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES) == true)
         {
          Stop = OrderStopLoss();
          Take = OrderTakeProfit();
          Print("Пробую модифицировать ",i," ордер (#",OrderTicket(),")");
          modify = OrderModify(OrderTicket(),0,SL,TP,0,0);                          <<<--------------------- во втором параметре OrderModify нужно ставить не ноль а Orderopenprice()
          if (modify==true) Done++;
          if (modify==false)
            {
             int error = GetLastError();
             Print("                 Неудача... Ошибка ",error);
             Sleep(5000);
            }
         }
       }
    Alert("Модифицировано  ",Done,"  из  ",OrdersTotal());
    Sleep(10000);
   }
 
Noterday:
Portanto, não tenho nenhuma dessas linhas, não seleciono o tipo EM TUDO, modifico TODAS, seja pendente ou de mercado.


Também na condição de que este

( cmd==OP_BUYLIMIT || cmd==OP_SELLSTOP)

mudar igualmente sob a ordem a ser selecionada (mudar a condição de definição do tipo de ordem para uma destas:

Constante Valor Descrição
OP_BUY 0 Posição de compra.
OP_SELL 1 Posição de venda.
OP_BUYLIMIT 2 Posição de limite de compra pendente.
OP_SELLLIMIT 3 Vender limite de posição pendente.
OP_BUYSTOP 4 Posição de parada de compra pendente.
OP_SELLSTOP 5 Posição de parada de venda pendente.
e já então você verifica o cumprimento dos "Requisitos e Restrições Comerciais" desta ou daquela ordem selecionada, cada tipo de ordem selecionada tem seus próprios requisitos e restrições... e aqui o roteiro é apenas para ordens do mercado... Edite por analogia e pronto - você tem todas as informações. De forma calma, cuidadosa e metódica.

 
Sim, tudo foi originalmente escrito corretamente, o erro estava no material acima. OBRIGADO A TODOS! =)))
 
É possível acelerar o processo de teste?