MetaTrader 5 Strategy Tester: bugs, bugs, sugestões para melhorias - página 47

 
traveller00:

Construir 2280. Bolsa, mercado de futuros. Todo o historial é carregado, mas os testes são feitos offline. O iBarShift funciona de forma estranha nos indicadores. E o mesmo código funciona bem no guião. É um insecto ou estou a perder alguma coisa?

Existe um tal código. Essencialmente, percorre todos os símbolos da análise do mercado e exibe oiBarShift. O mesmo código funciona bem no guião. O indicador produz -1 para todos os símbolos, excepto para o actual (no gráfico do qual está a correr) com o erro de que não há histórico. Ao mesmo tempo, na segunda corrida, carrega a história e mostra-a normalmente.

A disponibilidade dos dados no indicador não é garantida, pelo que se deve verificar o sucesso da sua recuperação. Se falhar, então tente de novo naOnCalculate. Referir-se aos dados no OnInit não é uma boa ideia.


#property indicator_separate_window

void OnInit()
{
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  static bool printed = false;
  
  if( !printed ){
    printed = TryToPrint();
  }
  return 0;
}

bool TryToPrint(){


  datetime Time[];
  ArraySetAsSeries(Time, true);
  Print("try");
  if( CopyTime(_Symbol,_Period,0,1,Time) != 1 )return false;

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  
  bool fail = false;
  if( Shift < 0 )fail = true; 
  string toprint = "Symbol="+_Symbol+", Shift="+(string)Shift;
  
  

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    
    if( Shift < 0 )fail = true;
    toprint = toprint + "\r\n" + "Symbol="+SymbName+", Shift="+(string)Shift;

  }
  if( !fail ) Print( toprint );
  
  return !fail;
}
 

O nome do servidor nem sempre é exibido nos registos de cache.


 
Em formato tst, a hora das trocas/ordens é apenas em segundos (data/hora). Não há milissegundos.
 
É correcto que o ficheiro tst não seja gerado para uma tal EA?
input int i = 0;

void OnInit() {}


Que condição deve ser preenchida para criar uma cache de passagem única?

 
fxsaber:
É correcto que o ficheiro tst não seja gerado para uma tal EA?


Que condição deve ser preenchida para criar uma cache de passagem única?

Sim, correcto.

Se não houver trocas, o ficheiro tst não é guardado

 
Slava:

Sim, é isso mesmo.

Se não houver trocas, o ficheiro tst não é guardado

Obrigado.

 
Vou repetir a minha pergunta (aparentemente perdeu-se):

Desenvolvedores, uma pergunta para si. É possível personalizar os parâmetrosdo algoritmo genético? Por exemplo, para estabelecer critérios de paragem e de mutação?

Encontro frequentemente situações em que uma paragem ocorre antes dos extremos serem alcançados.

Também uma pergunta. Pretende implementar outros métodos, por exemplo, o recozimento simulado?

 
Olá a todos, mudaram de mt4 para mt5 e não compreendem como guardar os ficheiros do conjunto no testador. Pode, por favor, aconselhar. Só consegui encontrar como salvar o ini e optar
 

Eu dirijo o robô no testador. Eu negoceio com um certo símbolo. Eu entro pelo OnTimer e aceito a cotação do SymbolInfoTick.

Se eu usar símbolos diferentes (quando negoceio com o mesmo símbolo), então, por alguma razão, os resultados são muito diferentes. Pode ser que alguém tenha enfrentado este problema? Estou actualmente a estudar este comportamento com mais detalhe.

PS. Cada carraça é baseada numa execução real e perfeita sem atrasos
 

Já descobri. Se estiver interessado, para poupar recursos da CPU, verifico a TimeCurrent no OnTimer e se não mudou desde a última actualização, nada precisa de ser feito. Se não houver citações, o estatuto é o mesmo. Se rastrear sessões de negociação, é uma operação muito consumidora.

Tudo funciona bem para múltiplos símbolos. Mas quando há apenas dois deles - tudo depende de citações, que vêm e começam a mudar o tempo de abertura de posições e outras coisas. Como resultado, os resultados notestador de estratégias são diferentes.

PS. Em geral, irei verificar os estados dos símbolos individualmente através deSymbolInfoTick
Razão: