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

 
traveller00:
Bild 2280, mas este era também o caso nas versões anteriores. Se eu executar um script ou um EA para depuração, abre-se uma nova janela do primeiro símbolo da visão geral do mercado no período de 1H. E se eu precisar de depurar não no primeiro símbolo ou em outro período de tempo? Há alguma forma de o fazer sem apagar todos os símbolos para que o símbolo certo venha primeiro?
Ir para as definições do terminal. Aí pode seleccionar o símbolo a depurar.
 
Artyom Trishkin:
Ir para as definições do terminal. Há aí uma selecção de símbolos para depuração.

Artyom, estás enganado. Estas são definições ME, não definições terminais.


Precisa de trabalhar menos))))

 
Artyom Trishkin:
Ir para as definições do terminal. Aí pode seleccionar um símbolo para depuração.

Já está, obrigado. Sou novo no MT5, ainda não sei tudo.

 
Alexey Viktorov:

Artyom, estás enganado. Estas são definições ME, não definições terminais


Deve trabalhar menos))))

Sim, erro meu... Por vezes, quando se escreve de um telemóvel, nem se consegue olhar...
 

Construir 2280. Existem 4 processadores no computador. Existem 2 MT5s em funcionamento. O primeiro está a executar um script longo, o terminal64.exe está a comer 100% de 1 processador, resultando numa carga total de 25%. O segundo MT5 está a executar a optimização genética. Existem 4 agentes pelo número de processadores como padrão. O primeiro lote de trabalhos recebe todos os 127. As restantes tarefas são recebidas e executadas por 2 agentes, os 2 restantes ficam pendurados no final e nem sequer são recebidos. Se eu os forçar a incapacitar, eles juntam-se ao trabalho. Até que a optimização comece de novo. Se se mata primeiro o MT5, a situação permanece a mesma. Se reiniciar o segundo MT5 depois disso, não haverá problema. Será isto um equilibrista de carga tão complicado ou um insecto algures? Se o primeiro, então não é muito bom, porque acaba por carregar a 75% (primeiros agentes MT5+2) e ainda assim deve ser tratado pelas prioridades do vento.

P.S. Parece não estar necessariamente relacionado com a carga da CPU. Só começou a genética depois de reiniciar, nada mais correndo, também 2 agentes eram preguiçosos até eu os desligar/ligar. Se eu mantiver apenas 3 agentes activos e desactivar 1, ainda 2 estão atrasados, apenas 1 está a funcionar.

P.P.S. Se houver 6 processadores, então há 3.
 

Construir 2280. Depurou o indicador, realizado passo a passo no depurador. Em linha

StartTime = iTime(Symbols[0], _Period, Pos + PosAddon);

debugging caiu. Algo como erro crítico, a depuração parou. No registo diz

           crash -->  000000 B7250C38B1 038424 B8000000    add        eax, [rsp+0xb8]
                      000000 B7250C38B8 89442460          mov        [rsp+0x60], eax
                      000000 B7250C38BC 448 B4C2460        mov        r9d, [rsp+0x60]
                      000000 B7250C38C1 49 B8010000000000  mov        r8, 0x1
                                       0000
                      000000 B7250C38CB 488 B542468        mov        rdx, [rsp+0x68]
                      000000 B7250C38D0 48 B9E8DD4220B700  mov        rcx, 0xb72042dde8
                                       0000
                      000000 B7250C38DA 49 FF96580F0000    call       qword near [r14+0xf58]  ; #11037 (terminal64.exe)
        
        00: 0x000000B7250C38B1

Acontece novamente, mas raramente. Desconhecido para mim, nada mudou muito entre a depuração.

 

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?

#property indicator_separate_window

void OnInit()
{
  datetime Time[];
  ArraySetAsSeries(Time, true);
  CopyTime(_Symbol,_Period,0,1,Time);

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  Print("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]);
    Print("Symbol="+SymbName+", Shift="+(string)Shift);
  }
}

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[])
{
  return 0;
}

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, aparentemente carrega a história e já a mostra normalmente.

 
traveller00:

o mesmo código funciona bem no guião. É um insecto ou estou a perder alguma coisa?

Ao contrário do guião, o indicador funciona de forma assíncrona - não espera que a história esteja pronta.

 
fxsaber:

Ao contrário do guião, o indicador funciona de forma assíncrona - não espera que o histórico esteja pronto.

Bem, toda a história está lá. Como disse, funciona offline, toda a história já está descarregada a partir do servidor. Ou será que precisa de outra coisa?

 
traveller00:

Bem, toda a história está lá. Como eu disse, ele está a trabalhar offline, toda a história já está descarregada do servidor. Ou será que precisa de outra coisa?

Em teoria, claro, é necessário trazer tudo à tona desde o início frio. Na prática, porém, não gosto de indicadores, por isso não posso dizer com certeza.