E o que é que isto tem a ver com a posição se eu perguntar ao OrderTotal() quantas encomendas são actualmente colocadas?
E solicito esta informação em OnTrade(), o momento em que a encomenda existe não pode ser perdido.
Mas, de facto, acontece que este momento é perdido de qualquer maneira e os pedidos são processados ou quando a encomenda ainda não está presente ou quando já está presente.
Mas o momento em que ele existe não é detectado em OnTrade(), ou então, o OrderTotal() reside.
Todas as operações na plataforma de negociação e análise do MetaTrader 5 são assíncronas, e todas as alterações na conta de negociação são reportadas independentemente umas das outras. Por conseguinte, não deve tentar seguir um único evento de acordo com a regra "Um pedido - Um evento de negociação". Se quisermos determinar exactamente o que mudou após o evento de Comércio, precisamos de analisar todos os negócios, posições e ordens em cada chamada do manipulador OnTrade e compará-los com o estado que tínhamos antes do evento aparecer.
Isto significa que a ordem, que está a tentar apanhar, provavelmente já precisa de ser procurada usando o HistoryOrdersTotal
Isto significa que a ordem que está a tentar apanhar já deve provavelmente ser procurada usando o HistoryOrdersTotal
Oriento-me por este artigo. Gostaria de saber a resposta à pergunta: como é possível que um evento comercial falhe o momento em que uma encomenda é feita mas ainda não foi executada?
Os eventos comerciais são gerados pelo servidor nos seguintes casos
Alterações nas encomendas activas,
mudanças de posição,
alterações nos ofícios,
mudanças na história do comércio.
Suspeito que OrderTotal() falhe. Mas não o posso provar com esta funcionalidade.
Embora como opção não rejeite que OrderTotal() esteja a levar dados não para onde eu penso que estão (ou seja, não no servidor).
Estou a seguir este artigo. Gostaria de saber a resposta à pergunta: como é que um evento comercial perde o momento em que uma encomenda foi efectuada mas ainda não foi executada?
Simplesmente, quando chega um evento comercial, a encomenda já foi colocada e já foi executada. É por isso que não está na história e já está em vigor.
Rosh: Quando o evento de Comércio chega, a encomenda já foi colocada e executada. Por conseguinte, esta ordem ainda não foi colocada entre as activas e já apareceu na história.
Sim, sim, os meus pensamentos estão a flutuar à volta desta resposta.
Gostaria de responder assim, no momento em que a ordem é colocada, o servidor gera um evento de "negócios" e envia-o para o terminal, quando o terminal o recebe, é feito um pedido no código para o número de ordens, mas no momento em que este pedido chega ao servidor, o servidor já executou a ordem.
Algo como "Nenhuma parte da memória usada foi libertada após o programa ter sido terminado". Em particular, uma mensagem semelhante ocorre quando um programa cria um objecto dinâmico utilizando o novo operador, mas não o elimina posteriormenteutilizando o operador de eliminação.
papaklass: ... no separador "Especialistas" aparece esta mensagem. Não é um erro, é um aviso. Um aviso sobre o quê?
Bem, eu não disse "erro". Que seja um "aviso". Já disse a minha versão com um exemplo. Dê outra vista de olhos à discussão a partir daqui (sobre fugas na linha - leia até ao fim da página): https://www.mql5.com/ru/forum/1111/page345#comment_54616
Poderá ter de ir à CBO, com detalhes da sua situação.
Porque é que o compilador não define como a segunda variável b?
E em geral, como é que lido com esta situação?
#property script_show_inputs// m[a].Column[b]inputint A=11;
inputint B=3;
#define a A//#define b B // тут раскоментировать#define b 3// тут закоментировать// размер одного элемента 4 байтаstruct ArrWe
{
float Column [b];
};
voidOnStart()
{
ArrWe m[11]; // тут вместо "11" хочу использовать "a"Print("Размер структуры ArrWe ",sizeof(ArrWe));
Print("Количество элементов 1-го измерения ",sizeof(m)/sizeof(ArrWe));
Print("Количество элементов 2-го измерения ",sizeof(ArrWe)/4);
Print("Размер массива из 11 ArrWe ",sizeof(m));
}
Talvez, precisamos do PositionTotal()?
E o que é que isto tem a ver com a posição se eu perguntar ao OrderTotal() quantas encomendas são actualmente colocadas?
E solicito esta informação em OnTrade(), o momento em que a encomenda existe não pode ser perdido.
Mas, de facto, acontece que este momento é perdido de qualquer maneira e os pedidos são processados ou quando a encomenda ainda não está presente ou quando já está presente.
Mas o momento em que ele existe não é detectado em OnTrade(), ou então, o OrderTotal() reside.
Para evitar reclamar da imperfeição do código, aqui está o código MetaQuotes com o meu aperfeiçoamento do guião no Expert Advisor.
Adicionada a função OnTrade() e colocado o código de script no OnInit().
Nem uma única impressão exibe uma mensagem de que existe uma encomenda.
Só posso responder a isto com um artigo Eventos comerciais no MetaTrader 5:
Заключение
Todas as operações na plataforma de negociação e análise do MetaTrader 5 são assíncronas, e todas as alterações na conta de negociação são reportadas independentemente umas das outras. Por conseguinte, não deve tentar seguir um único evento de acordo com a regra "Um pedido - Um evento de negociação". Se quisermos determinar exactamente o que mudou após o evento de Comércio, precisamos de analisar todos os negócios, posições e ordens em cada chamada do manipulador OnTrade e compará-los com o estado que tínhamos antes do evento aparecer.Só posso responder a isto com o artigo " Trading Events in MetaTrader 5":
Isto significa que a ordem que está a tentar apanhar já deve provavelmente ser procurada usando o HistoryOrdersTotalOriento-me por este artigo. Gostaria de saber a resposta à pergunta: como é possível que um evento comercial falhe o momento em que uma encomenda é feita mas ainda não foi executada?
Os eventos comerciais são gerados pelo servidor nos seguintes casos
Suspeito que OrderTotal() falhe. Mas não o posso provar com esta funcionalidade.
Embora como opção não rejeite que OrderTotal() esteja a levar dados não para onde eu penso que estão (ou seja, não no servidor).
Estou a seguir este artigo. Gostaria de saber a resposta à pergunta: como é que um evento comercial perde o momento em que uma encomenda foi efectuada mas ainda não foi executada?
Quando o evento de Comércio chega, a encomenda já foi colocada e executada. Por conseguinte, esta ordem ainda não foi colocada entre as activas e já apareceu na história.
Sim, sim, os meus pensamentos estão a flutuar à volta desta resposta.
Gostaria de responder assim, no momento em que a ordem é colocada, o servidor gera um evento de "negócios" e envia-o para o terminal, quando o terminal o recebe, é feito um pedido no código para o número de ordens, mas no momento em que este pedido chega ao servidor, o servidor já executou a ordem.
Não tenho qualquer outra explicação.
Os eventos comerciais são gerados pelo servidor nos seguintes casos:
Suspeito que OrderTotal() falhe. Mas não o posso provar com esta funcionalidade.
Compreendi correctamente que a lista de ordens activas inclui tanto as ordens activas pendentes como as ordens para abrir uma posição?
O que é que isto significa?
... no separador "Especialistas" aparece esta mensagem. Não é um erro, é um aviso. Um aviso sobre o quê?
Bem, eu não disse "erro". Que seja um "aviso". Já disse a minha versão com um exemplo. Dê outra vista de olhos à discussão a partir daqui (sobre fugas na linha - leia até ao fim da página): https://www.mql5.com/ru/forum/1111/page345#comment_54616
Poderá ter de ir à CBO, com detalhes da sua situação.
Encontrei uma "confusão".
Porque é que o compilador não define como a segunda variável b?
E em geral, como é que lido com esta situação?