Bibliotecas: MT4Orders - página 27

 

Hi! :)

Estou tentando usar sua biblioteca. Modo MT5 Hedge build 1959, modo de teste.

A chamada OrderSelect(... , SELECT_BY_TICKET) retorna false para a ordem no histórico, embora a ordem esteja claramente presente nos registros do testador. Você pode sugerir como isso é possível?


 
Ilya Malev:

Hi! :)

Estou tentando usar sua biblioteca. Modo MT5 Hedge build 1959, modo de teste.

A chamada OrderSelect(... , SELECT_BY_TICKET) retorna false para a ordem no histórico, embora a ordem esteja claramente presente nos registros do testador. Você consegue imaginar como isso é possível?

Você deve ler este tópico para que eu não me repita mais uma vez.

O tíquete de uma posição MT4 fechada é igual ao tíquete de uma negociação MT5 fechada, para resumir. Há vários motivos totalmente válidos para isso. Em particular, leia sobre isso no cabeçalho da biblioteca. Ou melhor, é claro, leia o tópico sobre esse assunto.


Para entender melhor, faça todos os tipos de negociações complexas manualmente no MT5 e, em seguida, execute este script

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: Relatório

fxsaber, 2018.12.11 12:28 pm.

Estou ficando cansado dos relatórios MT5 de passes únicos. Portanto, adicionar essas três linhas ao final de qualquer consultor MT5
#define  REPORT_TESTER       // O testador registrará automaticamente os relatórios
#define  REPORT_BROWSER      // Criação de um relatório com inicialização do navegador - requer permissão de DLL.
#include <Report.mqh>  // https://www.mql5.com/pt/code/18801

abrirá um relatório normal do Hedge-Tester no final de uma única passagem, que mostrará posições na forma normal e até mesmo derrapagens.

Tente fazer isso, por exemplo, com Experts\Examples\Moving Average\Moving Average.mq5.


Para entender imediatamente a aparência do relatório, basta executar este script em sua conta

#define  REPORT_BROWSER      // Criação de um relatório com inicialização do navegador - requer permissão de DLL.
#include <Report.mqh> // https://www.mql5.com/pt/code/18801

void OnStart()
{
  REPORT::ToFile(); // Criar e abrir o relatório no navegador.
}


Tudo é relevante para o MT4 também.

Ou, conforme descrito acima, adicione as linhas apropriadas a qualquer Expert Advisor MT5 e veja o que o MT4Orders faz com relação ao histórico.
 
fxsaber:

Você deveria ler este tópico para que eu não tenha que me repetir mais uma vez.

O ticket de uma posição MT4 fechada é igual ao ticket de uma negociação MT5 fechada, em resumo. Há vários motivos totalmente válidos para isso. Em particular, leia sobre isso no cabeçalho da biblioteca. Ou melhor, é claro, leia o tópico sobre esse assunto.


Para entender melhor, faça todos os tipos de operações de negociação complexas manualmente no MT5 e, em seguida, execute este script

Ou, como escrito acima, adicione as linhas apropriadas a qualquer Expert Advisor do MT5 e veja o que o MT4Orders faz quando se trata de histórico.

Então, parece que ainda é impossível obter compatibilidade total entre o MT4 e o MT5? OK, obrigado pela dica, vou dar uma olhada nisso.

 
Ilya Malev:

Acontece que ainda é impossível obter compatibilidade total MT4 -> MT5? OK, obrigado pela dica, vou dar uma olhada nisso.

Sim, o código MT4 incorreto nem sempre funcionará no MT5.

 
fxsaber:

Sim, um código MT4 incorreto nem sempre funcionará no MT5.

Uma curva é aquela que calcula que o resultado do OrderSend do envio de uma ordem pendente permanecerá com o mesmo número depois que ela se tornar uma ordem a mercado, estou entendendo corretamente? )

Qual é a maneira mais fácil de resolver esse problema, sem retrabalhar a lógica do código original, você pode me dizer? Se eu mesmo não conseguir pensar em uma maneira mais rápida)

Em geral, esse comportamento não pode ser chamado de sistema de ordens MT4. Porque salvar tíquetes de ordem ao ativá-los no sistema MT4 é um de seus princípios básicos

 
Ilya Malev:

A curva é aquela que calcula que o resultado do OrderSend do envio de uma ordem pendente permanecerá no mesmo número depois que ela se tornar negociável, estou entendendo corretamente? )

Quando a ordem for executada, o tíquete de posição permanecerá o mesmo no MT5. Mas, ao fechar, não.

A curva é o uso do SELECT_BY_TICKET. Especialmente quando se trata de rastrear o evento "se minha posição foi fechada" dessa forma.

Em geral, esse comportamento não pode mais ser chamado de sistema de ordens do MT4. Porque salvar tíquetes de ordens quando eles são ativados no sistema MT4 é um de seus fundamentos

Tudo é salvo. Você só precisa experimentar.

 
fxsaber:

Quando uma ordem é executada, o tíquete de posição permanecerá o mesmo no MT5. Porém, no fechamento, ele não permanecerá.

A curva é o uso do SELECT_BY_TICKET. Especialmente quando se trata de rastrear o evento "se minha posição foi fechada" dessa forma.

Tudo é salvo. Você só precisa experimentar.

Bem, eu tentei. É claro que eu estava falando sobre o número do tíquete após o fechamento. Eles diferem bastante, ou seja, toda a numeração da ordem está flutuando. Eu abro a ordem número 59(o resultado do OrderSend), ativo e fecho, depois imprimo os números do histórico com o OrderPrint e obtenho números no histórico de 1 a 13. Infelizmente, isso não pode ser chamado de sistema MT4. Não há nada na documentação do MT4 que diga que SELECT_BY_TICKET não pode ser usado para rastrear o evento "se minha posição foi fechada", você já inventou isso. No MT4, isso era bastante normal (embora eu não discuta que não é o melhor estilo de programação, mas não escrevemos bibliotecas para um mundo perfeito, ou o que =)).

Além disso, não se trata de verificação de fechamento aqui, infelizmente isso seria fácil de corrigir. Trata-se do fato de que muitos sistemas organizam os pedidos em grupos com base em algum atributo e, em seguida, analisam o resultado para tomar outras decisões. E todo esse grupo de sistemas (nos quais lembrar os tíquetes e analisá-los no histórico é, em princípio, impossível) não funcionará com a sua biblioteca. Se você adicionar todos os outros sistemas que simplesmente "monitoram o evento de fechamento da minha posição" por meio de SELECT_BY_TICKET, obterá várias exceções.
 
Ilya Malev:

Bem, foi assim que tentei. É claro que eu estava falando sobre o número do tíquete após o fechamento. Eles diferem bastante, ou seja, toda a numeração dos pedidos está flutuando. Abri a ordem número 59 (resultado do OrderSend), ativei e fechei, depois imprimi os números do histórico com o OrderPrint e obtive números no histórico de 1 a 13. Infelizmente, isso não pode ser chamado de sistema MT4. Não há nada na documentação do MT4 que diga que o SELECT_BY_TICKET não pode ser usado para rastrear o evento "se minha posição foi fechada", você já inventou isso. No MT4, isso era bastante normal (embora eu não argumente que esse não é o melhor estilo de programação, mas não estamos escrevendo bibliotecas para um mundo perfeito, ou o que =)).

A preguiça de ler o tópico é familiar.

  • É basicamente impossível escrever uma biblioteca de modo que o tíquete de uma posição fechada corresponda ao tíquete quando ela foi fechada. Essa é uma limitação arquitetônica do MT5.
  • É uma limitação muito boa, pois força a interrupção da prática idiota de escrever consultores MT4 desonestos.
Há uma regra simples. Se você vir SELECT_BY_TICKET em um Consultor Especialista MT4, isso significa que há 95% de código incorreto. O armazenamento de tíquetes de qualquer tipo é quase sempre uma lógica distorcida que não resiste a nenhuma aplicação de combate.

 
fxsaber:

A preguiça de ler o tópico é familiar.

  • Em princípio, é impossível escrever uma biblioteca de modo que o tíquete de uma posição fechada coincida com o tíquete de quando ela foi fechada. Essa é uma limitação arquitetônica do MT5.
  • É uma limitação muito boa, porque força a interrupção da prática idiota de escrever consultores MT4 desonestos.
Há uma regra simples. Se você vir SELECT_BY_TICKET em um Consultor Especialista MT4, isso significa que há 95% de código incorreto. O armazenamento de tíquetes de qualquer tipo é quase sempre uma lógica distorcida que não resiste a nenhuma aplicação de combate.

Por que ler o tópico? Eu já descobri tudo.

Imagine um EA criando várias grades de ordens simultâneas, cada uma com sua própria lógica, dependendo dos resultados de ordens anteriores da série. Seria muito mais fácil armazenar os tíquetes em uma matriz do que implementar qualquer outra lógica. Ao mesmo tempo, o único caso em que essa lógica não resistirá à "aplicação de combate" é uma queda de energia instantânea, e exatamente no momento em que o Expert Advisor deve gravar o resultado da próxima operação de negociação no arquivo com seus dados. Isso é praticamente impossível quando se negocia em um VPS (ou na presença de um no-break).

 
Ilya Malev:

Por que ler a discussão, eu já tinha entendido tudo.

Imagine um EA criando várias grades de ordens simultâneas, cada uma com sua própria lógica, dependendo dos resultados de ordens anteriores da série. Seria muito mais fácil armazenar os tíquetes em uma matriz do que implementar qualquer outra lógica. Ao mesmo tempo, o único caso em que essa lógica não resistirá a uma "aplicação de combate" é....

Há muitos casos em que ela não resistirá a isso. Cada ordem de grade gerará dezenas de posições, e cada posição, fechada pelo mesmo TP, gerará dezenas de posições fechadas.

A biblioteca foi criada para aqueles que sabem como escrever EAs de combate no MT4, não para brinquedos de demonstração. Combate é entrar no OnTick do zero todas as vezes.

Não tenho argumentos para você, todos eles estão no fórum. Você discordará de mim, com certeza. Mas isso não é tão ruim quanto os consultores corruptos do MT4.


Talvez alguém intervenha nesse diálogo e aponte, com links ou pensamentos de voz, por que o mundo é tão real.