Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 90

 
Vitaly Muzichenko:

Obrigado, por alguma razão não funciona dessa forma com o lote.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

Como eu devolvo o lote da décima quarta parada de venda no snapshot lot= 0,03?

 
Marina Korotkih:

Obrigado, por alguma razão não funciona dessa forma com o lote.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();
  double r=MarketInfo(sy, MODE_MINLOT);
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots()) {
                r=OrderLots();
  }}}}}}}
  return(r);
}
Este é o mínimo, se você precisa do pedido mais recente, então eu o farei agora
 
Vitaly Muzichenko:

Este é o mínimo, se você precisa do pedido mais recente, então eu o farei agora

Aqui está procurando o lote mais distante do preço

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
datetime t=0;
double r=-1,l=0;
if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderOpenPrice() || r==-1) {
                r=OrderOpenPrice();
                l=OrderLots();
  }}}}}}}
  return(l);
}
 
Marina Korotkih:

Obrigado, por alguma razão não funciona dessa forma com o lote.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

Como eu devolvo o lote da décima quarta parada de venda no snapshot lot= 0,03?



Não a função funciona corretamente, por que o valor de retorno não é 1 e 14 ordens, mas sim 2?

é um testador?

Funciona corretamente para mim.

 
Vitaly Muzichenko:

Aqui está procurando o lote mais distante do preço


Obrigado, isso faz sentido. Encontrei-a, agora você pode descobrir tudo o que precisa saber sobre ela )

 
Alekseu Fedotov:

Não a função funciona corretamente, por que o valor de retorno não é 1 e 14 ordens, mas sim 2?

é um testador?

Funciona corretamente para mim.

Você tem que classificar por preço, porque não pode procurar por tamanho, a grade pode ser mista, e você encontrará a maior ou a menor, mas não a primeira e não a última.
 
Marina Korotkih:

Obrigado, isso faz sentido. Encontrei-a, agora você pode descobrir tudo o que precisa saber sobre ela )

Para saber todas as informações sobre um pedido ou uma posição, é melhor fazer isso com um bilhete

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}
 
Alekseu Fedotov:

...por que o valor de retorno não é 1 e 14 ordens, mas sim 2?


Porque eu o chamo assim

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
 
Vitaly Muzichenko:

Para saber os detalhes completos de um pedido ou posição, é melhor fazê-lo a partir do bilhete

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}

Mas para fazer isso, primeiro precisamos saber o bilhete do último pedido 14

Então a ordem ainda tem que ser pesquisada primeiro, como na primeira função?

Ou apenas substituir SELECT_BY_POS por SELECT_BY_TICKET

 
Marina Korotkih:

Mas para fazer isso, você deve primeiro descobrir o bilhete do último pedido 14

Então a ordem ainda precisa ser pesquisada primeiro, como na primeira função?

Ou apenas substituir SELECT_BY_POS por SELECT_BY_TICKET

Depende do que você precisa verificar. Na verdade, podemos descobrir tudo aqui, selecionar o pedido por preço e depois escrever os parâmetros necessários para ele e devolver tudo.

Usar loops mais uma vez não é uma boa idéia, portanto, é melhor realizar tudo em um loop; não é perceptível no comércio real, mas os testes no testador funcionarão por um longo tempo. Entretanto, tudo depende da tarefa, alguém escreve programas para o testador, e alguém para o comércio, de modo que você pode usar mais de um ciclo.

P.S. Se o Expert Advisor for um pipsqueak, é claro, é melhor não usar um único ciclo)
Razão: