라이브러리: 멀티 테스터 - 페이지 40

 
klycko 최적화 결과를 Excel 표와 최적화 캐시 파일로 출력하는 방법은 무엇인가요?
옵트 파일 읽기를 참조하세요.
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 최적화 결과를 Excel 스프레드시트로 출력하는 방법

프레임 작업에 대해읽어보세요.

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

TesterCache, 멀티테스터, 타입투바이트 라이브러리의 도움으로.
최적화 프로그램을 개발했지만 극복할 수 없는 오류가 있습니다.

현지화했습니다:
Run(Contr) 프로시저를 실행한 후;
다음 줄은 이 실행 중에 발견된 캐시에서 최적의 매개변수를 읽으려고 시도합니다.
그런 다음 이러한 매개 변수가 인쇄되고 스크립트가 중지됩니다.

다음은 이 코드입니다:

inNum=0;

Run(Contr); // 선택한 매개변수 값에 대해 최적화를 실행합니다.

prWrite = MTTESTER::SetSettings2(Sohran); // 저장된 설정을 로봇에 복원합니다.
prRead = MTTESTER::GetSettings(Contr); // 로봇 설정을 읽어 로봇을 제어합니다.
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);
Print("SettingEnd Odinar ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);

if(prRead && TypPar == 0) // 이중 파라미터에 대한 읽기 최적화 캐시

{ // 해당 최적화 입력 파라미터 읽기


int GLOC = MTTESTER::GetLastOptCache(Bytess);

Print("GLOC = ",GLOC);


const int Size = Cache.GetInputs(inNum,Paramas);
Print(Cache[inNum].ToString()); // 요청된 레코드의 통계를 출력합니다.
Print(Cache.Header.ToString()); // 캐시 최적화의 주요 데이터를 출력합니다.
Print("Paramas\n");
ArrayPrint(Paramas); // 최적화된 입력 파라미터를 인쇄합니다.
Print(Cache[GetMaxProfitPos(Cache)].ToString()); // 최대 수익이 발생한 기록의 통계를 인쇄합니다.

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // 최대 이익
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // 최대 수익이 있는 패스 수
int IndexMaxProfit = GetMaxProfitPos(Cache); // 파라미터 값을 가진 인덱스 배열
Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // 최대 수익에 도달한 파라미터 값입니다.

Alert("ProfitNow =",ProfitNow," ParamMax =",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);
반환합니다;



그러나 발견되어 출력된 매개 변수는 Run !!!! 을 실행하여 얻은 것이 아니라 이전의 일부 옵 파일에 해당합니다.
Cache.GetInputs(inNum,Paramas)에 잘못 액세스하고 있는 것일까요?

Run 프로시저 자체는 정상적으로 작동했으며 로그의 이전 출력에서 다음과 같습니다.

왜 여전히 캐시에서 새로운 데이터를 가져올 수 없나요?

어떤 조언이라도 미리 감사드립니다.

안부, 알렉산더
Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
klycko #:
int GLOC = MTTESTER::GetLastOptCache(Bytess);
옵트 파일을 바이트 배열로 받았습니다. 이제 이를 캐시에 넣어야 합니다.

트레이딩, 자동매매 시스템, 트레이딩 전략 테스트에 대한 포럼입니다.

라이브러리: 테스터 캐시

fxsaber, 2019.11.11 04:45 오후.

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

  if (Cache.Load(Bytes)) // 최적화 캐시를 읽습니다.
  {
 
fxsaber #:
바이트 배열로 된 옵트 파일을 받았습니다. 다음으로, 이를 캐시에 공급해야 합니다.

말씀하신 대로 수정했습니다:


문자열 Sohran,Contr;

MTTESTER::GetSettings(Sohran); // 로봇의 현재 초기 설정을 읽어서 Sohran에 임시 저장합니다.

prWrite = MTTESTER::SetSettings2(Odinar); // Odinar를 로봇 설정으로 설정합니다.

prRead = MTTESTER::GetSettings(Contr); // 방금 설정한 로봇 설정을 읽습니다.

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

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


Run(Contr[0]); // 선택한 Y 파라미터 값에 대한 최적화 실행

int GLOC = MTTESTER::GetLastOptCache(Bytess); // 옵 파일을 바이트 배열로 가져옵니다.

TESTERCACHE<ExpTradeSummary> 캐시;

bool CL = Cache.Load(Bytess); // Bytess 바이트 배열을 Cache에 공급합니다.

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // 최대 이익

int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // 최대 수익이 있는 패스 수

int IndexMaxProfit = GetMaxProfitPos(Cache); // 파라미터 값이 있는 배열의 인덱스 https://www.mql5.com/ru/forum/318998/page2#comment_13846951

Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // 최대 수익이 달성된 파라미터 값입니다.


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

반환합니다;



결과는 여전히 잘못되었습니다.

어떤 이유에서인지 이전 실행의 ProfitNow 및 ParamMax 데이터가 캐시에서 읽혀집니다.

안부, 알렉산더

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

어떤 이유로 이전 실행의 ProfitNow 및 ParamMax 데이터가 캐시에서 읽혀집니다.

최적화 후 이 스크립트에 올바른 값이 표시되나요?

그렇다면 최적화 직후에 옵트 파일이 준비되지 않은 것이 문제일 가능성이 높습니다. 실행 후 절전 모드로 전환해 볼 수 있습니다. 또는 실행이 제대로 작동하지 않습니다.

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

이 스크립트가 최적화 후 올바른 값을 표시하나요?

그렇다면 최적화 직후에 옵트 파일이 준비되지 않았을 가능성이 높습니다. 실행 후에 절전 모드로 전환해 볼 수 있습니다. 또는 실행이 제대로 작동하지 않습니다.

고마워요! 내일이 모든 것을 확인하겠습니다.

하지만 이제 새 매개 변수로 최적화를 설정하면 모든 것이 올바르게 작동한다는 것을 알았습니다.

그래서 요점은 테스터가 이전에 이미 작동했던 최적화를 다시 설정하면 실제로 다시 처리하지 않고 메모리에서 이전 결과를 검색한다는 것 같습니다.

테스터의 이러한 메모리를 미리 파괴하는 방법을 개발할 수는 없을까요?

 
klycko #:

따라서 테스터가 이전에 실행한 최적화를 다시 설정하면 실제로 다시 처리하지 않고 단순히 메모리에서 과거 결과를 검색한다는 것이 요점인 것 같습니다.

가설이 틀렸습니다. 문제는 여러분이 작성한 코드에 있습니다.

 
fxsaber #:

가설이 잘못되었습니다. 문제는 여러분이 작성한 코드입니다.

안녕하세요!


"문제는 내가 작성한 코드에 있다"는 말에 동의합니다. 오류는 그 안에 있으며 아직 수정 방법을 모르겠습니다.

그러나 실험적으로 실행을 실행하기 전에 모든 옵트 파일을 수동으로 제거하면 Run.

를 실행하기 전에 "C:\사용자\ASUSAppData\로밍\메타쿼츠\터미널\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" 폴더에서 모든 옵 파일을 수동으로 제거했습니다,

를 지우면 내 코드가 올바르게 작동하고 선택한 매개변수에 대해 최적화를 수행합니다.

이 폴더를 정리하지 않으면 테스터는 (변경되지 않은 동일한 데이터로) 반복 최적화를 수행하지 않고, 이 폴더에서 이미 존재하는

이 폴더에서 이미 존재하는 옵트 파일을 읽습니다. 이는 동일한 최적화를 수동으로 반복적으로 실행할 때 명확하게 확인할 수 있습니다.

실제 최적화는 처음 한 번만 수행된 다음 폴더에서 옵트 파일만 읽는 것을 볼 수 있습니다.

이렇게 반복적으로 읽으면 캐시의 내용이 업데이트되지 않는 것 같고, 이것이 제 코드에서 오류를 일으키는 원인인 것 같습니다.


해당 폴더를 지우면 오류를 해결하는 데 도움이 될 수 있습니다. 물론 이것은 나쁜 해결책이며 캐시에서 올바른 데이터를 복원 할 수 있다면 더 우아 할 것입니다.

하지만 어떻게 해야 할지 모르겠습니다. 지금은 이전 실제 최적화의 데이터가 캐시에 남아 있습니다(폴더에서 다시 읽은 데이터와 일치하지 않음).


안타깝게도 이 폴더는 MQL5에서 금지되어 있기 때문에 FolderClean을 사용하여 스크립트에서 정리할 수 없습니다.

이 폴더는 "샌드박스"에서 벗어나 있으며 전략 테스터에 의해서만 채워집니다.


C++를 사용하여 외부 애드온을 만들고 스크립트에서 실행해야 할 수도 있습니다.


안부, 알렉산더

 
실행 절차가 완벽하게 작동합니다. 설정을 작성하고 시작 버튼을 누릅니다. 모든 것이 정상입니다.