Bibliotecas: MultiTester - página 40

 
klycko resultados da otimização em uma tabela do Excel e no arquivo de cache de otimização?
Consulte leitura de arquivos de opção.
How to open cache optimization file (.opt), MT5
How to open cache optimization file (.opt), MT5
  • 2020.07.30
  • DDamasceno
  • www.mql5.com
Hi, Is there a way to open Metatrader 5 optimization cache file (folder -> tester/cache/) with another software and export the data in...
 
klycko resultados de otimização em uma planilha do Excel

Leia sobre como trabalhar com quadros.

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Функции для организации собственной обработки результатов оптимизации в тестере стратегий. Могут вызываться при оптимизации в агентах тестирования...
 
Boa tarde!

Com a ajuda das bibliotecas TesterCache, MultiTester e TypeToBytes.
Desenvolvi um programa de otimização, mas há um erro insuperável nele.

Eu o localizei:
Depois de executar o procedimento Run(Contr);
As linhas a seguir tentam ler os melhores parâmetros do cache encontrados durante a execução desse Run.
Em seguida, esses parâmetros são impressos e o script é interrompido.

Este é o código:

inNum=0;

Run(Contr); // Executa a otimização nos valores do parâmetro selecionado

prWrite = MTTESTER::SetSettings2(Sohran); // Restaurar as configurações salvas no robô
prRead = MTTESTER::GetSettings(Contr); // Ler as configurações do robô para controlá-las
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);
Print("SettingEnd Odinar ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);

if(prRead && TypPar == 0) // Ler o cache de otimização para parâmetro duplo

{ // Ler os parâmetros de entrada otimizados correspondentes


int GLOC = MTTESTER::GetLastOptCache(Bytess);

Imprimir ("GLOC = ",GLOC);


const int Size = Cache.GetInputs(inNum,Paramas);
Print(Cache[inNum].ToString()); // Imprimir estatísticas do registro solicitado
Print(Cache.Header.ToString()); // Imprime os principais dados de otimização do cache
Print("Paramas\n");
ArrayPrint(Paramas); // Imprima seus parâmetros de entrada otimizados
Print(Cache[GetMaxProfitPos(Cache)].ToString()); // Imprimir as estatísticas do registro com lucro máximo

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Lucro máximo
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Número da passagem com lucro máximo
int IndexMaxProfit = GetMaxProfitPos(Cache); // Índice da matriz com o valor do parâmetro
Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // O valor do parâmetro no qual o lucro máximo é atingido

Alert("ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);
return;



No entanto, os parâmetros encontrados e impressos correspondem a algum arquivo opt anterior, e não ao que foi obtido com a execução do Run !!!!
Talvez eu esteja acessando Cache.GetInputs(inNum,Paramas) incorretamente?

O procedimento Run em si funcionou bem, de acordo com as impressões anteriores no registro.

Por que ainda não é possível obter dados novos do Cache?

Agradeço antecipadamente por qualquer orientação.

Atenciosamente, Alexander
Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
klycko #:
int GLOC = MTTESTER::GetLastOptCache(Bytess);
Você recebeu o arquivo opt em uma matriz de bytes. Em seguida, você precisa alimentá-lo no cache.

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

Bibliotecas: TesterCache

fxsaber, 2019.11.11 04:45 pm.

void OnStart()
{
  uchar Bytes[];
  
  MTTESTER::GetLastOptCache(Bytes);
  
  TESTERCACHE<ExpTradeSummary> Cache;

  if (Cache.Load(Bytes)) // Ler o cache de otimização.
  {
 
fxsaber #:
Você recebeu um arquivo opt em uma matriz de bytes. Em seguida, você precisa alimentá-lo no Cache.

Eu o corrigi como você disse:


string Sohran,Contr;

MTTESTER::GetSettings(Sohran); // As configurações iniciais atuais do robô são lidas para serem salvas temporariamente em Sohran.

prWrite = MTTESTER::SetSettings2(Odinar); // Define Odinar para as configurações do robô

prRead = MTTESTER::GetSettings(Contr); // Ler as configurações do robô que acabaram de ser definidas.

Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);

Print("SettingBeg OdinarContr ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);


Run(Contr[0]); // Executa a otimização nos valores do parâmetro Y selecionado

int GLOC = MTTESTER::GetLastOptCache(Bytess); // Obtém o arquivo opt na matriz de bytes do Bytess

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytess); // Alimenta a matriz de bytes do Bytess no Cache

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Lucro máximo

int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Número da passagem com lucro máximo

int IndexMaxProfit = GetMaxProfitPos(Cache); // Índice da matriz com o valor do parâmetro https://www.mql5.com/ru/forum/318998/page2#comment_13846951

Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // O valor do parâmetro no qual o lucro máximo foi obtido


Alert("CL=",CL," GLOC = ",GLOC," GLOC," ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);

Retorno;



O resultado ainda está errado.

Por algum motivo, os dados ProfitNow e ParamMax de alguma execução anterior são lidos do cache.

Atenciosamente, Alexander

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
Arquivos anexados:
 
klycko #:

Por alguma razão, os dados ProfitNow e ParamMax de alguma execução anterior são lidos do cache.

Esse script mostra os valores corretos após a otimização?

Se sim, é provável que o problema seja o fato de o arquivo opt não estar pronto logo após a otimização. Você pode tentar colocar Sleep depois de Run. Ou o Run não está funcionando corretamente.

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
fxsaber #:

Esse script mostra os valores corretos após a otimização?

Se sim, o problema provavelmente é que o arquivo opt não está pronto logo após a otimização. Você pode tentar colocar Sleep depois de Run. Ou o Run não está funcionando corretamente.

Obrigado! Vou verificar tudo isso amanhã.

Mas agora descobri que, se eu definir a otimização com um novo parâmetro, tudo funcionará corretamente.

Portanto, parece-me que a questão principal é que o testador, se você redefinir uma otimização que já funcionou anteriormente, não a processa novamente, mas apenas recupera o resultado anterior da memória.

Não seria possível inventar algo para destruir essa memória do testador com antecedência?

 
klycko #:

Portanto, parece-me que o ponto principal é que o testador, se você redefinir uma otimização executada anteriormente, não a processa novamente, mas simplesmente recupera o resultado anterior da memória.

Suas hipóteses estão erradas. O problema está no código que você escreveu.

 
fxsaber #:

Suas hipóteses estão erradas. O problema é o código que você escreveu.

Boa tarde!


Concordo com você que "O problema está no código que escrevi". O erro está nele, e ainda não sei como corrigi-lo.

No entanto, descobri experimentalmente que, se você remover manualmente todos os arquivos opt antes de executar o Run.

da pasta "C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

então meu código funciona corretamente e executa a otimização no parâmetro selecionado.

Se essa pasta não for limpa, o testador não executará otimizações repetidas (com os mesmos dados inalterados), mas lerá

o opt-file já existente dessa pasta. Isso pode ser visto claramente quando se executa repetidamente a mesma otimização manualmente.

É possível observar que a otimização real é executada apenas na primeira vez e, em seguida, lê apenas o arquivo opt da pasta.

Essa leitura repetida não parece atualizar o conteúdo do cache, e é isso que está causando o erro no meu código.


Limpar essa pasta pode ajudar a resolver o erro. É claro que essa é uma solução ruim, e seria mais elegante poder restaurar os dados corretos no cache.

Mas não sei como fazer isso. Por enquanto, os dados da otimização real anterior estão pendurados no cache (não correspondem à releitura da pasta).


Infelizmente, essa pasta não pode ser limpa do script usando o FolderClean, porque isso é proibido na MQL5.

Ela está fora da "sandbox" e é preenchida apenas pelo Strategy Tester.


Talvez você deva criar algum complemento externo por meio do C++ e executá-lo a partir do script.


Atenciosamente, Alexander

 
O procedimento Run funciona perfeitamente. Ele grava as configurações e pressiona o botão Iniciar. Tudo está normal.