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

 
dzhini:

Ótimo, está tudo aqui. Postado ontem à noite, mas o fio já foi bastante longe com explicações sobre o que é um mágico e como está preparado ))))

Por favor, me dê uma resposta à minha pergunta.

Minha EA estabelece o BUYLIMIT e o SELLLLIMIT em determinados momentos. Gostaria de fazê-lo apagar as ordens pendentes (OP_BUY ou OP_SELL) em uma direção quando a ordem for aberta.

Esta era a minha variante:


Fica melhor assim:

void start(){
  .....

  for(int i=OrdersTotal() -1;i>=0;i--) 
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
     {
      if(CalculateCurrentOrders(Symbol())>0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_SELLLIMIT);} // (1) 
      if(CalculateCurrentOrders(Symbol())<0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_BUYLIMIT);} //(2) 
      if(TimeCurrent() - OrderOpenTime()>=HowManyHours*60*60) {ClosePendingOrder(OP_BUYLIMIT);ClosePendingOrder(OP_SELLLIMIT);} //(3) 
     } 
   ....

}

Sem entrar na lógica, a ausência de colchetes e a organização incorreta da OrderSelect() são imediatamente aparentes

 
eddy:

por que não fazer essas perguntas agrupadas tematicamente e acrescentar a possibilidade de fazer perguntas ali mesmo? isso seria um questionário normal.

E se você acrescentar a possibilidade de adicionar não apenas perguntas, mas também tarefas, com códigos/artigos como respostas, você obtém o que eu proponho - uma estrutura diferente do site que inclui todo o seu conteúdo existente

Roman, o trabalho preparatório foi feito há muito tempo, a ideologia FAQ foi previamente desenvolvida e será publicada em um ramo especial, a base técnica foi acordada com a administração.
Aguarde a liberação do ramo para ver como ele coincide com suas idéias e, se necessário, você pode desenvolver e implementar seu projeto se ele estiver dentro de seu poder.
 
Sergey_Rogozin:

Fica melhor assim:

Sem entrar na lógica, a falta de aparelho encaracolado e a organização incorreta da OrderSelect() são imediatamente aparentes

Você pode explicar o que está errado com OrderSelect() . Porque, como escrevi antes, se eu fizer a retirada de pedidos na direção de comércio já aberto, tudo vai sem problemas. Também não há problemas em remover todos os pedidos em tempo estritamente definido.
 
dzhini:
Por favor, explique o que está errado com OrderSelect() . Porque, como escrevi antes, se eu fizer a remoção de pedidos na direção de comércio já aberto, tudo vai sem problemas. Também não temos problemas para remover todas as encomendas em um determinado momento.
Sem ver o código, é difícil dizer definitivamente. Talvez a OrderSelect() funcione como está, se você não precisar selecionar por símbolo, mágico, tipo de operação, etc.
 

Esta é essencialmente uma tentativa de fazer uma prática para o futuro, de trabalhar com diferentes conjuntos de pedidos (não apenas dois).

Quando o ciclo de visualização de pedidos está em execução, a EA corre bastante bem até o alerta, mas não quer trabalhar corretamente com a função excluir:

void ClosePendingOrder(int ORDERType)
{
 while(!IsTradeAllowed()) Sleep(100);
 if(OrderType()==ORDERType)
 {
 if(OrderSymbol()==Symbol())
 { 
 if(!OrderDelete(OrderTicket(),CLR_NONE))
   Print("Order close error",GetLastError());
return;
      }
    }
}
 
granit77:
a ideologia da FAQ é pré-desenhada e a base técnica foi acordada com a administração.
veja como combina com suas idéias e, se necessário, você pode desenvolver seu próprio projeto
Recebi a resposta: "tudo já foi pensado e acordado com a administração (ou seja, não há como mudá-lo), se algo não corresponde às suas idéias, você pode fazer as suas"?
 
eddy:
Entendi a resposta corretamente: "Tudo já foi pensado e acordado com a administração (ou seja, não há como mudá-lo), se algo não se encaixa em suas idéias - você pode fazer suas próprias idéias"?
"Tudo já foi roubado antes de você")))
 
dzhini:

Esta é essencialmente uma tentativa de fazer uma prática para o futuro, de trabalhar com diferentes conjuntos de pedidos (não apenas dois).

Quando o ciclo de visualização de pedidos está em execução, a EA vai bem antes do alerta, mas não quer trabalhar corretamente com a função excluir:

Parece que tudo está no lugar. Eu não sei.
 
Sergey_Rogozin:

Como isto funciona: ClosePendingOrder(OP_SELLLIMIT);} // (1) ?

Seu código.

O código da função para apagar uma ordem é dado na própria mensagem... Talvez eu não tenha entendido a pergunta, mas vou tentar explicá-la como a entendi:

A para loop estabelece uma enumeração de todas as ordens em aberto disponíveis e ordens pendentes. ClosePendingOrder( OP_SELLLIMIT ) - seleciona desta lista aqueles que correspondem ao símbolo da moeda e ao parâmetro OP_SELLLIMIT . Assim que encontrar estas correspondências, ele elimina esta ordem pendente.

 
dzhini:

Eu dei o código para a função de ordem de exclusão nessa mesma mensagem. Talvez eu não tenha entendido a pergunta, mas vou tentar explicar como a entendi:

A para loop estabelece uma enumeração de todas as ordens em aberto disponíveis e ordens pendentes. ClosePendingOrder( OP_SELLLIMIT ) - seleciona desta lista aqueles que correspondem ao símbolo da moeda e ao parâmetro OP_SELLLIMIT . Assim que encontrar estas correspondências, ele elimina esta ordem pendente.

Eu já descobri isso. A princípio, só olhava de forma desatenta.

Eu não vejo o erro.