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

 

HistóriaSelect é uma função muito cara. Mas o HistorySelectByPosition é ainda mais caro.

Por exemplo, se precisarmos de encontrar o primeiro negócio da posição fechada, podemos agir de duas maneiras

  1. Faça HistorySelectByPosition e depois encontre o negócio necessário a partir da pequena lista obtida. Mas esta lista é formada da seguinte forma Antes de mais nada, toda a história é formada (equivalente ao chamado do "infinito" HistorySelect). Depois há um FULL para loop através desta lista e apenas os negócios são selecionados, que têm um POSITION_IDENTIFIER apropriado.
  2. Faça o HistorySelect (você pode "infinito", mas é melhor usar um intervalo, se conhecido), então no for loop faça uma pausa, quando você alcançar o DEAL_ENTRY correspondente.

O segundo item poderia ser muito mais barato. Mas certamente não mais caro.

Chamada de históricoAs funções Calling HistorySelect* no testador são quase um desperdício de recursos computacionais. Portanto, você deve sempre tentar minimizar o número deles. Especialmente a HistóriaSelectByPosition.

 
Para contas Hedge no testador
Verificação da ativação de limitadores regulares no próximo tick.
Isto significa que o resultado do testador depende muito do tipo de conta.
 
fxsaber:
Para contas Hedge no testador Isso significa que o resultado do testador depende muito do tipo de conta.


Como se verificou em um dos fios vizinhos, o resultado do testador depende mesmo de o teste ser feito em um agente local ou em um dos agentes de uma rede distribuída.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Yury Kirillov:


Como se verificou em um dos fios vizinhos, o resultado do testador depende mesmo de o teste ser realizado no agente local ou em um dos agentes da rede distribuída.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Você descreveu um BAG, que não está no contexto deste tópico. O desvio de execução limite é a posição oficial.
 
fxsaber:
Você descreveu BAG, que não está no contexto deste tópico. A diferente execução dos limitadores é a posição oficial.

Concordo, só queria salientar que o testador está se tornando uma ferramenta cada vez mais imprevisível.
 
Yury Kirillov:

Concordo, só queria salientar que o testador está a tornar-se uma ferramenta cada vez mais imprevisível.
Nunca foi previsível, infelizmente.
 
fxsaber:
Isto significa que o resultado do testador é muito dependente do tipo de conta.
Isto só se aplica a instrumentos negociados em bolsa.
 
Todos os tipos padrão são compatíveis uns com os outros
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Resultado

1
1.23
 

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

Bugs, bugs, perguntas

fxsaber, 2017.04.10 16:53

Caros desenvolvedores, como se livrar dos Avisos nesta situação?
template <typename T>
T GetValue()
{
  T Res; // possible use of uninitialized variable 'Res'
  
  return(Res);
}

void OnStart()
{
  MqlTick Tick = GetValue<MqlTick>();
  int i = GetValue<int>();
}
Lifehack
template <typename T>
const T GetDefaultValue( void )
{
  struct STRUCT_TYPE
  {
    const T Value;
  };
  
  const STRUCT_TYPE Res = {0};
  
  return(Res.Value);
}

void OnStart()
{
  int i = GetDefaultValue<int>();
  MqlTick Tick = GetDefaultValue<MqlTick>();
  string Str = GetDefaultValue<string>();
}
 

Funções do rudimento (não necessário)

  • StringToDouble
  • StringToInteger
  • StringToTime
  • StringToColor
  • StringAdd
  • StringConcatenate
  • GetPointer

Razão: