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

 
trader781:

Eu sei em teoria porque isso aconteceu, então minha pergunta é: podemos falar brevemente sobre o uso de arrays?

Onde você precisa rubricar, apagar e processar para fazê-los funcionar?

P.S

quando o google banido parece algo parecido com isto:

O que o faz pensar que se trata de uma matriz?
 
Alexey Viktorov:
Por que você acha que é por causa da matriz?
Porque isto nunca aconteceu antes, e se aconteceu, cometi um erro em algum lugar, e é por isso que estou vindo aqui. Você mesmo poderia fazer isso, mas isso leva muito mais tempo.
 
trader781:

necessidade

1) criá-lo em algum lugar (em uma área global, como função, em onit ou ontic?)

2) escreva cada bilhete nele ao enviar uma ordem, dando-lhe um número em ordem

3) puxe-os de lá conforme necessário através do número

4) Ao fechar toda a grade, redefinir os parâmetros para zero

Não é necessário mantê-lo sempre na memória. Quando você precisa encontrá-la, você precisa chamar a função com uma matriz local onde você colocará todas as ordens/posições no loop, classificará a matriz como você precisa, selecionará as ordens necessárias a partir dela, fará o que precisar com elas, e quando você sair da função, você esquecerá aquela matriz local. E da próxima vez que você voltar a chamar a função, ela irá classificar as ordens/posições que estarão lá no momento de tal chamada, e fazer o mesmo com elas. E você não precisa de uma matriz global que você tem que monitorar e controlar constantemente.
 
Artyom Trishkin:
Não é necessário guardá-lo na memória o tempo todo. Quando você precisa encontrá-la, você chama a função com uma matriz local dentro dela onde você colocará todas as ordens/posições no loop, classificará a matriz como você precisa, selecionará as ordens necessárias a partir dela, fará o que precisar com elas, e quando você sair da função, você esquecerá aquela matriz local. E da próxima vez que você voltar a chamar a função, ela irá classificar as ordens/posições que estarão lá no momento de tal chamada, e fazer o mesmo com elas. E você não precisa de uma matriz global que você tem que observar e controlar constantemente.

Eu não sei quanto mais barato. Cada situação tem sua própria solução. Não há nenhum evento OnTradeTransaction() na MQL4, mas temos que acompanhar "nossas" encomendas de alguma forma... É aqui que a matriz variável global vem a calhar.

Imagine que há vários Expert Advisors correndo por conta, um deles tem cálculos pesados e o outro tem um grande número de pedidos... Como funcionaria com cálculos pesados? Esta EA terá que pesquisar uma quantidade enorme de pedidos? Você não pode passar sem uma busca em geral, mas deve minimizar este procedimento.

E para determinar se a ordem está fechada ou não? Percorrer toda a história? Não é muito caro?

 
trader781:
Eu nunca cometi este tipo de erro antes, mas se cometi, cometi um erro, é por isso que estou perguntando aqui. Eu mesmo poderia fazer isso, mas isso leva muito mais tempo.

Como vocês entenderam pelo meu posto anterior, eu uso arrays com bastante freqüência e nunca tive nenhum problema com eles. Uma vez eu escrevi uma EA que abriu mais de 2000 pedidos cujos bilhetes foram armazenados em uma matriz e não houve nenhum problema. Não acredito que os problemas apareçam por causa da matriz. Também não posso acreditar que erro possa ter causado tais problemas.

Lembro-me do filme "It Can't Be"... "Não é a cerveja que mata as pessoas, é a água que mata as pessoas"...

 
Alexey Viktorov:

Eu não sei quanto mais barato. Cada situação tem sua própria solução. Não há nenhum evento OnTradeTransaction() na MQL4, mas temos que acompanhar "nossas" encomendas de alguma forma... É aqui que a matriz variável global vem a calhar.

Imagine que há vários Expert Advisors correndo por conta, um deles tem cálculos pesados e o outro tem um grande número de pedidos... Como funcionaria com cálculos pesados? Esta EA terá que pesquisar uma quantidade enorme de pedidos? Não se pode passar sem uma busca em geral, mas seria bom minimizar este procedimento.

Como verificar se o pedido foi fechado? Percorrer toda a história? Não é muito caro?

Tudo pode ser resolvido.

Por exemplo, há muito tempo criei uma classe que monitora tudo isso. Você pode criar/eliminar objetos de classe dinamicamente para cada símbolo, magik, período, ou todos para uma conta ou uma combinação deles - você pode escolher. Qualquer ciclo de busca necessário já é realizado em um novo tick uma vez, e há todos os dados necessários. É claro que há casos em que é impossível passar sem mais um ciclo, mas é o segundo ciclo adicional por carrapato. E não ter um laço separado em cada função é um desperdício terrível de recursos.

 
Artyom Trishkin:

Tudo é solvível.

Eu, por exemplo, já fiz há muito tempo uma aula que cuida de tudo isso. Você pode criar/eliminar objetos de classe dinamicamente para cada símbolo, magik, período, ou todos para uma conta, ou combinações deles - você pode escolher. Qualquer ciclo de busca necessário já é realizado em um novo tick uma vez, e há todos os dados necessários. É claro que há casos em que é impossível passar sem mais um ciclo, mas é o segundo ciclo adicional por carrapato. E não ter um laço separado em cada função é um desperdício terrível de recursos.

Bem, ninguém argumenta com isso. Tornou-se ainda mais conveniente com o advento das estruturas.
 
Artyom Trishkin:
Não é necessário mantê-lo sempre na memória. Quando você precisar encontrá-la, você deve chamar a função com uma matriz local dentro dela, onde você colocará todas as ordens/posições no loop, classificará a matriz como você precisar, selecionará as ordens necessárias a partir dela, fará o que precisar com elas, e quando você sair da função, você esquecerá aquela matriz local. E da próxima vez que você voltar a chamar a função, ela irá classificar as ordens/posições que estarão lá no momento de tal chamada, e fazer o mesmo com elas. E você não precisa de uma matriz global que você tem que monitorar e controlar constantemente.

OK, aqui está uma visão simplificada.

Se a matriz é local, onde você quer colocá-la? Obviamente não no ontik.

void OnTick()
{  

       if(FindLastOType()==OP_BUY)  //+------ если последний покупка
           {
            if(Ask<=FindLastOrderOpenPrice()-Step*Point())//+------------если ордер в минус
              {
               TotalClose();
              }
            else
            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
              }        
           }  
}

 
trader781:

OK, aqui está uma visão simplificada.

Se a matriz é local, onde devo colocá-la? Obviamente não no ontik.

void OnTick()
{  

       if(FindLastOType()==OP_BUY)  //+------ если последний покупка
           {
            if(Ask<=FindLastOrderOpenPrice()-Step*Point())//+------------если ордер в минус
              {
               TotalClose();
              }
            else
            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
              }        
           }  
}

Por favor, leia o que é uma função. Então você entenderá que o conjunto declarado no corpo funcional será local - fora da vista do resto do programa.
 
bool WriteToFile(int FileHandle,string DataToWrite)
  {
// Receives the number of bytes written to the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
   int BytesWritten[1]={0};

// Get the length of the string
   int szData=StringLen(DataToWrite);

// Do the write
   WriteFile(FileHandle,DataToWrite,szData,BytesWritten,0);

// Return true if the number of bytes written matches the expected number
   return (BytesWritten[0] == szData);
  }

Quero escrever uma linha para um arquivo com traduções para uma nova linha, mas não funciona, este código é daquihttps://www.mql5.com/en/forum/118999

este código escreve uma linha com espaços após cada letra, eu preciso de um substituto para FileWrite() mas ele funciona

Reading and writing files anywhere on disk using CreateFileA() etc.
Reading and writing files anywhere on disk using CreateFileA() etc.
  • www.mql5.com
There are frequent questions in this forum (e.g...
Razão: