A função não encontra a BuyPosition mais baixa - por quê?
Results 1 to 8 of 8

Thread: A função não encontra a BuyPosition mais baixa - por quê?

  1. #1
    Oi pessoal.

    Devo ter cometido um erro muito estúpido, mas não consigo descobrir sozinho.
    Eu fiz uma função para encontrar as ordens de compra/venda mais altas/mais baixas.
    Tudo funciona bem, mas o valor para o LowestBuy. A compra mais baixa sempre retorna o mesmo valor que a compra mais alta. PORQUE?
    Isso está me deixando louco!

    Código inserido/Variáveis ​​globais necessárias:* double HigherBuy = 0; double MenorCompra = 0; double MaiorVenda = 0; double MenorVenda = 0; */void GetOpenOrderPriceForMostRecent() {MaiorCompra = 0; MenorCompra = 0; MaiorVenda = 0; Venda mais baixa = 0; intTotaisPedidos; TotalEncomendas = EncomendasTotal(); for(int iii=TotalOrders-1;iiigt;=0;iii--) { OrderSelect(iii, SELECT_BY_POS); if(OrderSymbol() != Símbolo()) continue; if(OrderType() == OP_BUY OrderOpenPrice() gt; MaiorCompra) { MaiorCompra = OrderOpenPrice(); } if(OrderType() == OP_BUY OrderOpenPrice() lt; MenorCompra || OrderType() == OP_BUY MenorCompra == 0) { MenorCompra = OrderOpenPrice(); } if (OrderType() == OP_SELL OrderOpenPrice() gt; MaiorVenda) {MaiorVenda = OrderOpenPrice(); } if (OrderType() == OP_SELL OrderOpenPrice() lt; MenorVenda || OrderType() == OP_SELL MenorVenda == 0) { MenorVenda = OrderOpenPrice(); } } }

  2. #2

    Desculpe por não ser claro. Meu código original deu os resultados esperados para o LowestSell, mas não para o LowestBuy. Suas sugestões com os colchetes funcionam com ambos! Ainda estou me perguntando por que o LowestBuy não estava funcionando enquanto escrevi o código, mas o LowestSell estava. Eu gostaria de evitar esses problemas no futuro! Obrigado pela ajuda!
    Tem certeza de que o LowestSell estava funcionando conforme o esperado? Acredito que seu problema estava relacionado às regras de precedência e para ser sincero, sempre tenho dificuldades com precedência ao usar e ||.
    http://docs.mql4.com/basis/operations/rulesÉ por isso que sempre usarei colchetes, apenas para ter certeza de que obterei o resultado esperado. Eu entendo a precedência muito bem com multiplicação, adição e subtração. Por exemplo. Código inserido número inteiro = 2*2 2*2 1; Alerta(número); resultará em 9 porque o 1 é calculado por último Código Inserido int number = 2*2 2*(2 1); Alerta(número); resultará em 10 porque os colchetes garantem que (2 1) tenha precedência Isso me sugere que em seu código Inserido Código #91;color#93;#91;font#93; if(OrderType() == OP_BUY OrderOpenPrice() lt; MenorCompra || OrderType() == OP_BUY MenorCompra == 0)#91;/font#93;#91;/color#93; que LowestBuy == 0 é deixado de fora por conta própria, portanto, sempre faz parte da condição if. Em outras palavras, a condição if só será atendida se MenorComprar == 0 Melhor estar seguro e adquirir o hábito de sempre usar colchetes.

  3. #3
    Desculpe por não ser claro. Meu código original deu os resultados esperados para o LowestSell, mas não para o LowestBuy. Suas sugestões com os colchetes funcionam com ambos! Ainda estou me perguntando por que o LowestBuy não estava funcionando enquanto escrevi o código, mas o LowestSell estava. Eu gostaria de evitar esses problemas no futuro! Obrigado pela ajuda!

  4. #4
    Desculpe, minha culpa. Faltou um suporte. Tente isso, funcionou para mim quando testei. if(OrderType() == OP_BUY (OrderOpenPrice() lt; MenorBuy || (OrderType() == OP_BUY MenorBuy == 0))) e o mesmo para ordens de venda if (OrderType() == OP_SELL (OrderOpenPrice() lt; Venda mais baixa || (Tipo de pedido() == OP_SELL Venda mais baixa == 0)))

  5. #5
    Desculpe, não entendi muito bem. O que está e o que não está funcionando? O que cada variável retorna e o que você quer que elas retornem?

  6. #6
    Altere if(OrderType() == OP_BUY OrderOpenPrice() lt; MenorBuy || OrderType() == OP_BUY MenorBuy == 0) para if(OrderType() == OP_BUY (OrderOpenPrice() lt; MenorBuy || OrderType() == OP_BUY MenorCompra == 0)) e vice-versa para ordens de venda.

  7. #7
    Obrigada! Mas isso não está funcionando! Ainda assim, sua ideia parecia fazer sentido em alguns aspectos. Isso está fazendo o truque: Código Inserido if(OrderType() == OP_BUY (OrderOpenPrice() lt; LowestBuy || LowestBuy == 0)) A questão agora é: Por que o código original foi forfing para LowestSell, mas não para LowestBuy? Não faz sentido, mesmo que o problema seja resolvido...

  8. #8
    Obrigada. Isso faz sentido! Terá isso em mente para o futuro.

Permissões de Publicação

  • Não pode publicar novos tópicos
  • Não pode publicar respostas
  • Não pode publicar anexos
  • Não pode editar as suas publicações
  •  
  • Código BB está Ativo
  • Smilies estão Ativos
  • Código [IMG] está Ativo
  • Código [VIDEO] está Ativo
  • Código HTML está Desligado
O site da tradingintuitivo utiliza cookies
O site da tradingintuitivo utiliza cookies, alguns já foram definidos. Pode ler sobre a nossa utilização de cookies aqui. Por favor, clique no botão à direita para aceitar os nossos cookies. Se continuar a usar o site da tradingintuitivo, vamos supor que aceita os nossos cookies.