Erros, bugs, perguntas - página 734

 
Vitya:
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.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
Arquivos anexados:
 

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.
Isto significa que a ordem, que está a tentar apanhar, provavelmente já precisa de ser procurada usando o HistoryOrdersTotal
 
Rosh:

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 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).

 
Urain:

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.

Não tenho qualquer outra explicação.

 
Urain:

Os eventos comerciais são gerados pelo servidor nos seguintes casos:

  • Mudança nas ordens 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.

Compreendi correctamente que a lista de ordens activas inclui tanto as ordens activas pendentes como as ordens para abrir uma posição?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
papaklass:

O que é que isto significa?

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.

 

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?

#property script_show_inputs

// m[a].Column[b]
input int A=11;
input int B=3;

#define a A
//#define b B // тут раскоментировать
#define b 3   // тут закоментировать

// размер одного элемента 4 байта
struct ArrWe
{
  float Column [b];
};

void OnStart()
{
  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));
}
Razão: