Características da linguagem mql5, subtilezas e técnicas - página 71

 

fxsaber:

Discussão do artigo "Visualizando a otimização da estratégia comercial no MetaTrader 5".

fxsaber, 2018.02.22 08:39

No modo frame, OnInit, OnDeinit, OnTick, OnTrade, OnTradeTransaction e OnTimer são ignorados. Apenas o OnChartEvent funciona.

Claro que, por causa do OnChartEvent, requer uma verificação obrigatória da bandeira do modo frame.

Onde é que conseguiu uma confiança tão implícita? :-)

 
Dennis Kirichenko:

Como pode ter tanta certeza? :-)

Da prática, claro.

 

Uma pergunta, então. O modo Frame é um modo que geralmente se refere a Testes ou não?

 
Dennis Kirichenko:

Uma pergunta, então. O modo Frame é um modo que geralmente se aplica aos testes ou não?

Indirectamente, é. É que neste modo o Expert Advisor só pode ser iniciado no Terminal pelo Testador.

 

ESTÁ BEM. E se o Expert Advisor tiver o manipulador OnTick(), então o quê, ele não funcionará em modo frame?

Imho, devemos esclarecer aqui que os manipuladores de frames são executados pelo próprio Terminal, enquanto tudo o que é usual para testes (OnTick(), OnTrade(), etc.) é passado para os agentes de teste. ), são passados a agentes de teste. Assim, o modo frame é um modo especial de teste composto, onde os agentes interagem com o Terminal.

Então, é assim...


Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos

Características da linguagem mql5, subtilezas e truques

fxsaber, 2018.02.22 09:22

Indirectamente, aplica-se. É que, neste modo, o EA só pode ser executado no Terminal pelo próprio Testador.


E porquê indirectamente? Por exemplo, a otimização normal também pode ser executada apenas no Testador.

 
Dennis Kirichenko:

ESTÁ BEM. E se o Expert Advisor tiver o manipulador OnTick(), então o quê, ele não funcionará em modo frame?

Imho, devemos esclarecer aqui que os manipuladores de frames são executados pelo próprio Terminal, enquanto tudo o que é usual para testes (OnTick(), OnTrade(), etc.) é passado para os agentes de teste. ), são passados a agentes de teste. Assim, o modo frame é um modo especial de teste composto, onde os agentes interagem com o Terminal.

É assim.



E porquê indirectamente? Por exemplo, a otimização normal só pode ser executada no Testador.

Porque é um Expert Advisor de combate, mesmo no modo frame. É por isso que precisamos verificar a bandeira da moldura no OnChartEvent, senão este tipo de problema pode acontecer.

sinput uint Range = 100;

#define  SETRANGE(A, START, STEP, END) ParameterSetRange(#A, true, A, START, STEP, END)

void OnTesterInit() { SETRANGE(Range, 0, 1, Range); }

void OnTesterDeinit() {}

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
  static const bool IsFrame = MQLInfoInteger(MQL_FRAME_MODE);
  
//  if (!IsFrame) // без этой проверки Терминал (не только Агент) начнет выставлять ордера на реальном счете во время запуска Оптимизации
    OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);
}


Esta parece ser a primeira vez que isto se exprime. O que significa que os Produtos de Mercado criam uma desagradável vulnerabilidade... E esta vulnerabilidade é muito difícil de contornar. E é muito difícil detectá-lo.

 
fxsaber:

Porque é uma EA de combate, mesmo em modo frame. Esta é a razão pela qual você precisa verificar a bandeira da moldura no OnChartEvent, caso contrário este tipo de problema pode acontecer

Esta parece ser a primeira vez que isto se exprime. O que significa que os Produtos de Mercado criam uma desagradável vulnerabilidade... E esta vulnerabilidade é muito difícil de contornar. Detectá-lo é igualmente difícil.

No entanto! Se for verdade, então, imho, é o funcionamento incorrecto do EA em modo Teste...

Muito bem feito por teres reparado!

 

Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação

Bugs, bugs, perguntas

fxsaber, 2018.02.27 08:01

Conclusão sobre EAs no OBJ_CHART

  • OnInit, OnDeinit, obra global de construção/destruição e OnChartEvent.
  • OnTimer, OnTick e OnBookEvent não funcionam.
  • Apenas CHARTEVENT_CHART_CHANGE e eventos personalizados são capturados.
  • Através do OnChartEvent+EventChartCustom EA é possível criar "eventos" para o OnTimer e OnTick, mas não para o OnBookEvent.

Portanto, é possível fazer com que qualquer Expert Advisor de negociação funcione (OnTimer + OnTick) em qualquer tipo de gráfico, incluindo o indicador apropriado(exemplo).

Lf OBJ_CHART é definido por CHART_IS_OBJECT.

 

Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação

Discussão sobre "Managed optimization: the annealing method" (Otimização gerenciada: o método de recozimento)

fxsaber, 2018.02.28 08:45

O arquivo tester_file só é lido se ele existia (conteúdo não importa) no momento da compilação.

Se o mq5 é compilado quando não havia arquivo correspondente, mesmo a sua existência posterior não será percebida no EX5.

Portanto, se você gerar um arquivo para tester_file no OnTesterInit, certifique-se de compilar o Expert Advisor com pelo menos um arquivo passado vazio.

Se a diretiva tester_file estiver presente, as caches do Optimizer não funcionam.

 
E você não pode incluir arquivos da pasta Files_Common via tester_file...
Razão: