Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 642

 
paylesss:

Obrigado! Reiniciar o computador ajudou! É uma pena, tenho estado aqui sentado toda a manhã))

Agora, o mais relevante é a construção do terminal e seria desejável recordar o que se fez para que as variáveis globais falhassem. Se for possível repetir a situação, isso seria óptimo.

 
Kirill Andreev:

escreveu uma coruja, mas por alguma razão a paragem de reboque não está a funcionar. Qual poderia ser a razão?

para o fazer funcionar é necessário colocá-lo no OnTick
 
Vladislav Andruschenko:
Tem de ser colocado no OnTick para que funcione.
Obrigado, vou tentar!!!
 

Olá.

Por favor, ajude, quero modificar todas as posições excepto a última, a mais "jovem". Onde é que adiciono ou subtraio um?


 int i; total = OrdersTotal();
          for(i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }
 
mila.com:

Olá.

Por favor, ajude, quero modificar todas as posições excepto a última, a mais "jovem". Onde é que adiciono ou subtraio um?



 int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }


 
-Aleks-:
int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }

Tem a certeza de ter mostrado uma forma fiável de falhar a última posição na lista?

Se negociar de forma realista, não está preocupado que a triagem se possa tornar subitamente dependente?

Ainda assim, IMHO, precisamos aqui de dois ciclos - no primeiro, procuramos a posição mais fresca ao abrir a hora, no segundo, modificamos todos, excepto aquele cujo bilhete foi encontrado no primeiro ciclo.

 
mila.com:

Olá.

Por favor, ajude, quero modificar todas as posições excepto a última, a mais "jovem". Onde é que adiciono ou subtraio um?


Eu fá-lo-ia.

/********************Script program start function********************/
void OnStart()
{
 int i, t1, t2, clTicket, total = OrdersTotal();
  datetime d1, d2;
   double v1, v2, clVolume;
    for(i = total-1; i > 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t1 = OrderTicket();
         d1 = OrderOpenTime();
        v1 = OrderLots();
       }
      else continue;
        if(OrderSelect(i-1, SELECT_BY_POS))
         {
          t2 = OrderTicket();
           d2 = OrderOpenTime();
          v2 = OrderLots();
         }
        else continue;
        clTicket = d1 > d2 ? t1 : t2;
       clVolume = d1 > d2 ? v1 : v2;
      if(!OrderClose(clTicket, clVolume, OrderClosePrice(), 100)) // закрывает независимо от типа ордера OP_BUY или OP_SELL
       Print("фигня кака-та");
    }
}/********************************************************************/

Não a tenho verificada e não consigo decidir se terei uma "lacuna" na minha lista de encomendas quando fechar a encomenda seguinte.

Se alguém for capaz de explicar a possibilidade de aparecer uma tal "lacuna", ficaria grato...

Como um seguro, inserimos mais um; se houver uma lacuna, uma encomenda será simplesmente ignorada. Parece-me que sim.

 
Alexey Viktorov:

Eu fá-lo-ia.

Infelizmente, isto não foi testado e não consigo descobrir se existe um "buraco" na lista de encomendas após a próxima encomenda ser fechada.

Se alguém for capaz de explicar a possibilidade de aparecer uma tal "lacuna", ficaria grato...

Como seguro, insere-se outra continua; se houver uma lacuna, simplesmente salta uma encomenda. Parece-me que é assim.

Originalmente, a pergunta era sobre saltar a última encomenda. E é por aí que se começa.

Tem de o fazer desta forma:

for(int i = total-2; i >= 0; i--)

Então não haverá lacunas após a eliminação e a encomenda mais recente será ignorada.

 
Alexey Kozitsyn:

A questão original era saltar a última encomenda. É por aqui que se começa.

Tem de o fazer desta forma:

Então não haverá saltos após a eliminação e a encomenda mais recente será ignorada.

Não a última da lista, mas a mais "jovem" de cada vez.

Embora eu seja igualmente irreflectido. A questão é sobre modificação e estou a escrever perto... E se simplesmente o modificar, não haverá buracos na lista de encomendas... Poderá apenas precisar de adicionar variáveis e atribuir-lhes valores, e DEVE verificar os parâmetros para evitar o erro #1. Bem, Mila pode tratar dela própria.

 
Alexey Kozitsyn:

A questão original era saltar a última encomenda. É por aqui que se começa.

Tem de o fazer desta forma:

for(int i = total-2; i >= 0; i--)

Então não haverá saltos após a eliminação e a encomenda mais recente será saltada.

Como pode ter a certeza de que não haverá uma dependência de classificação, e que falhará a ordem errada?

Mais uma vez, para encontrar com fiabilidade exactamente a última encomenda, esta deve ser identificada pela sua hora de abertura, e não pela sua posição na lista.