Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 66
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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:
Por que você acha que é por causa da matriz?
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 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?
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"...
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.
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.
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.
{
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);
}
}
}
OK, aqui está uma visão simplificada.
Se a matriz é local, onde devo colocá-la? Obviamente não no ontik.
{
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);
}
}
}
{
// 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