Я для себя нашел корявенькое решение- тестирую на М1 по ценам закрытия, при этом в настройках эксперта ставлю нужный ТФ (мой советник это позволяет). На данной стадии меня это устраивает.
А вообще похоже на проблемы тестера.
Я решил посмотреть что же происходит поподробнее. Для чего добавил в ЕА запись лога в событиях OnInit, OnDeinit, OnTick.
CKuklovodExp* Exp;
int g_hFile=INVALID_HANDLE;
ulong g_tick_no=0;
//+------------------------------------------------------------------+
struct SYSTEMTIME {
ushort wYear;
ushort wMonth;
ushort wDayOfWeek;
ushort wDay;
ushort wHour;
ushort wMinute;
ushort wSecond;
ushort wMilliseconds;
};
#import "Kernel32.dll"
void GetLocalTime(
SYSTEMTIME& lpSystemTime
);
uint GetCurrentThreadId(void);
#import
string STToString(void)
{
SYSTEMTIME ST;
GetLocalTime(ST);
return(IntegerToString(ST.wDay,2,'0')+"."+IntegerToString(ST.wMonth,2,'0')+"."+IntegerToString(ST.wYear,4,'0')+" "+IntegerToString(ST.wHour,2,'0')+":"+IntegerToString(ST.wMinute,2,'0')+":"+IntegerToString(ST.wSecond,2,'0'));
}
string ThIdToString(void)
{
return(IntegerToString(GetCurrentThreadId(),8));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
g_hFile=FileOpen("Kuklovod_"+ThIdToString()+".log",FILE_READ | FILE_WRITE | FILE_TXT | FILE_ANSI | FILE_SHARE_WRITE | FILE_COMMON,'\t',CP_ACP);
if (g_hFile != INVALID_HANDLE)
{
FileSeek(g_hFile,0,SEEK_END);
FileWriteString(g_hFile,STToString()+"\t"+ThIdToString()+"\t OnInit() Entry\n");
FileWriteString(g_hFile,STToString()+"\t"+ThIdToString()+"\t "+string(e_open_on_fly)+" "+string(e_tp_on_fly)+" "+string(e_sl_on_fly)+" "+string(e_wpr_period)+"\n");
}
EventSetTimer(60);
Exp=new CKuklovodExp;
//---
bool res=true;
do {
if (!(res=res && Exp.TradeSettings(e_lev_sl,e_lev_tp,e_lev_open_min,e_lev_open_max,e_open_on_fly,e_tp_on_fly,e_sl_on_fly)))
break;
if (!(res=res && Exp.Kit(e_kit)))
break;
if (!(res=res && Exp.Magic(e_magic)))
break;
if (!(res=res && Exp.Lot(e_lot)))
break;
if (!(res=res && Exp.ReadConfig()))
break;
if (!(res=res && Exp.CreateInd(e_timeframe,e_depth,e_wpr_period)))
break;
}
while (false);
if (!res)
return(INIT_FAILED);
if (g_hFile != INVALID_HANDLE)
{
FileSeek(g_hFile,0,SEEK_END);
FileWriteString(g_hFile,STToString()+"\t"+ThIdToString()+"\t OnInit() success\n");
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
if (CheckPointer(Exp) == POINTER_DYNAMIC)
delete Exp;
if (g_hFile != INVALID_HANDLE)
{
FileSeek(g_hFile,0,SEEK_END);
FileWriteString(g_hFile,STToString()+"\t"+ThIdToString()+"\t OnDeinit() End\n");
FileClose(g_hFile);
}
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (g_hFile != INVALID_HANDLE)
{
FileSeek(g_hFile,0,SEEK_END);
FileWriteString(g_hFile,STToString()+"\t"+ThIdToString()+"\t Tick#: "+string(g_tick_no++)+"\n");
}
//---
Exp.OnTick();
}
Запускаем оптимизацию по трем параметрам типа bool:
ED 0 23:38:13.674 Tester complete optimization started
IQ 0 23:38:13.674 Tester size of initial task batch is 4
CS 0 23:38:13.705 Core 1 agent process started
GG 0 23:38:13.705 Core 1 connecting to 127.0.0.1:3000
HP 0 23:38:13.705 Core 2 agent process started
CH 0 23:38:13.705 Core 2 connecting to 127.0.0.1:3001
PM 0 23:38:17.245 Core 1 connected
GL 0 23:38:17.249 Core 1 authorized (agent build 1596)
EH 0 23:38:17.263 Core 2 connected
OP 0 23:38:17.268 Core 2 authorized (agent build 1596)
JJ 0 23:38:17.523 Core 1 common synchronization completed
PE 0 23:38:18.136 Core 2 common synchronization completed
MQ 2 23:38:26.204 Core 2 pass 5 tested with error "history processing error (tester bar time error)" in 0:00:00.078
DL 2 23:38:26.204 Core 2 pass 6 tested with error "task rejected by tester agent" in 0:00:00.000
OP 2 23:38:26.204 Core 2 pass 7 tested with error "task rejected by tester agent" in 0:00:00.000
В логе ЕА:
27.05.2017 23:38:18 2988 OnInit() Entry
27.05.2017 23:38:18 2988 false false false 20
27.05.2017 23:38:18 2988 OnInit() success
27.05.2017 23:38:18 2988 Tick#: 0
... //--skiped
27.05.2017 23:38:26 2988 Tick#: 5423
27.05.2017 23:38:26 2988 OnDeinit() End
27.05.2017 23:38:26 2988 OnInit() Entry
27.05.2017 23:38:26 2988 true false false 20
27.05.2017 23:38:26 2988 OnInit() success
27.05.2017 23:38:26 2988 Tick#: 0
//--tester thread crash
Лог тестера дальше:
HJ 2 23:38:26.272 Core 1 pass 1 tested with error "history processing error (tester bar time error)" in 0:00:00.062
LE 2 23:38:26.272 Core 1 pass 2 tested with error "task rejected by tester agent" in 0:00:00.000
OI 2 23:38:26.272 Core 1 pass 3 tested with error "task rejected by tester agent" in 0:00:00.000
В логе ЕА:
27.05.2017 23:38:18 3660 OnInit() Entry
27.05.2017 23:38:18 3660 false false true 20
27.05.2017 23:38:18 3660 OnInit() success
27.05.2017 23:38:18 3660 Tick#: 0
...
27.05.2017 23:38:25 3660 Tick#: 5423
27.05.2017 23:38:25 3660 OnDeinit() End
27.05.2017 23:38:26 3660 OnInit() Entry
27.05.2017 23:38:26 3660 true false true 20
27.05.2017 23:38:26 3660 OnInit() success
27.05.2017 23:38:26 3660 Tick#: 0
//--tester thread crash
Лог тестера дальше:
LL 0 23:38:26.287 Core 2 connection closed
QK 0 23:38:26.375 Core 1 connection closed
ER 0 23:38:27.272 Core 1 connecting to 127.0.0.1:3000
QL 0 23:38:27.272 Core 2 connecting to 127.0.0.1:3001
II 0 23:38:27.272 Core 1 connected
ON 0 23:38:27.273 Core 2 connected
EO 0 23:38:27.278 Core 2 authorized (agent build 1596)
DD 0 23:38:27.278 Core 1 authorized (agent build 1596)
FN 0 23:38:27.285 Core 1 common synchronization completed
QF 0 23:38:28.077 Core 2 common synchronization completed
KN 0 23:38:31.408 Tester optimization finished, total passes 8
QJ 0 23:38:31.418 Statistics optimization done in 0 minutes 18 seconds
LR 0 23:38:31.418 Statistics local 14 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
QQ 0 23:38:31.418 Core 1 connection closed
GL 0 23:38:31.419 Core 2 connection closed
FE 0 23:38:31.422 Tester 8 records written to file cache C:\...
Дальше агенты (перезапустились/ запустили новые потоки) и выполнили оставшиеся проходы, включая те, на которых они вначале покрашились. Вот такая непонятная штука.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день! При оптимизации советника в режиме "1 минута OHLC" возникают ошибки типа:
QI 2 18:02:58.157 Core 1 pass 5 tested with error "history processing error (tester bar time error)" in 0:00:00.016
FD 0 18:02:58.160 Core 2 connection closed
PR 2 18:02:58.160 Core 1 pass 6 tested with error "task rejected by tester agent" in 0:00:00.000
KF 2 18:02:58.160 Core 1 pass 7 tested with error "task rejected by tester agent" in 0:00:00.000
Перед возникновением ошибок, каждый из агентов делает как минимум по одному успешному проходу, При оптимизации по ценам закрытия или по тикам проблема не замечена.
Воспроизвести проблему в тестере не получается- возникает исключительно при оптимизации.
Тестируемый советник использует 7 инструментов, и DLL для чтения ряда параметров их xml-файла (Функции DLL вызываются только в обработчике OnInit). Историю перегружал, bases чистил, терминал переставлял. Как оно на других билдах не знаю- так уж сложилось, что до оптимизации дело дошло только на этом билде.
Описания такой ошибки нигде найти не могу, собственно вопрос, что бы это значило?