Files
include/fxsaber/TesterCache/TestCacheHeader.mqh
T
2025-02-07 19:08:31 +03:30

136 lines
16 KiB
Plaintext

#include "String.mqh"
#define UINT uint
#define DWORD int
#define INT64 datetime
#define UINT16 short
//+------------------------------------------------------------------+
//| Cache header |
//+------------------------------------------------------------------+
struct TestCacheHeader
{
UINT version; // cache version
// wchar_t copyright[64]; // copyright
STRING64 copyright; // copyright
// wchar_t name[16]; // "TesterOptCache" cache name
STRING16 name ; // "TesterOptCache" cache name
int head_reserve[66];
//---
UINT header_size; // header size
UINT record_size; // cached record size (TestCacheRecord with the buffer of parameters)
//---
// wchar_t expert_name[64]; // Expert Advisor name
STRING64 expert_name; // Expert Advisor name
// wchar_t expert_path[128]; // Expert Advisor name with a path starting at MQL5
STRING128 expert_path; // Expert Advisor name with a path starting at MQL5
// wchar_t server[64]; // history source (trade server)
STRING64 server; // history source (trade server)
// wchar_t symbol[32]; // testing symbol
STRING32 symbol; // testing symbol
UINT16 period; // chart period
INT64 date_from; // starting date of data in test settings
INT64 date_to; // ending date of data in test settings
INT64 date_forward; // ending date of the appropriate forward period
int opt_mode; // optimization mode (0-full, 1-genetic, 2 or 3-forward)
int ticks_mode; // tick generation mode
int last_criterion; // optimization criterion in the last session
DWORD msc_min; // minimum execution time in milliseconds
DWORD msc_max; // maximum execution time in milliseconds
DWORD msc_avg; // average execution time in milliseconds
int common_reserve[16];
//---
// wchar_t group[80]; // group name + hedging/netting
STRING80 group; // group name + hedging/netting
// wchar_t trade_currency[32]; // deposit currency
STRING32 trade_currency; // deposit currency
int trade_deposit; // initial deposit
int trade_condition; // trading operation mode (0-no delays, -1-arbitrary delay, nnn-number of milliseconds)
int trade_leverage; // leverage
int trade_hedging; // 1 - netting, 2 - hedging
int trade_currency_digits; // number of decimal places after in deposit currency calculations
int trade_pips; // calculation in pips
int trade_reserve[5];
//---
char hash_ex5[16]; // compiled Expert Advisor hash
UINT parameters_size; // buffer size for EA parameters
UINT parameters_total; // the number of parameters
UINT opt_params_size; // buffer size for EA parameters
UINT opt_params_total; // the number of parameters
UINT dwords_cnt; // the size of the pass number during large genetic
UINT snapshot_size; // the size of the snapshot for total optimization and for a forward after a total optimization
UINT passes_total; // the total number of optimization passes (0 for genetic optimization)
UINT passes_passed; // the number of completed passes
// the set EA parameters follow next (including string parameter) in the TestCacheInput structure
//--- end of the header. followed by records of each pass
#define TOSTRING(A) #A + " = " + (string)(this.A) + "\n"
#define TOSTRING2(A) #A + " = " + ::EnumToString(A) + "\n"
#define TOSTRING3(A) #A + " = " + this.A[] + "\n"
string ToString( void ) const
{
return(
TOSTRING(version) + // cache version
TOSTRING3(copyright) + // copyright
TOSTRING3(name) + // "TesterOptCache" cache name
TOSTRING(header_size) + // header size
TOSTRING(record_size) + // cached record size (TestCacheRecord with the buffer of parameters)
TOSTRING3(expert_name) + // Expert Advisor name
TOSTRING3(expert_path) + // Expert Advisor name with a path starting at MQL5
TOSTRING3(server) + // history source (trade server)
TOSTRING3(symbol) + // testing symbol
TOSTRING2((ENUM_TIMEFRAMES)period) + // chart period
TOSTRING(date_from) + // starting date of data in test settings
TOSTRING(date_to) + // ending date of data in test settings
TOSTRING(date_forward) + // ending date of the appropriate forward period
TOSTRING(opt_mode) + // optimization mode (0-full, 1-genetic, 2 or 3-forward)
TOSTRING(ticks_mode) + // tick generation mode
TOSTRING(last_criterion) + // optimization criterion in the last session
TOSTRING(msc_min) + // minimum execution time in milliseconds
TOSTRING(msc_max) + // maximum execution time in milliseconds
TOSTRING(msc_max) + // average execution time in milliseconds
TOSTRING3(group) + // group name + hedging/netting
TOSTRING3(trade_currency) + // deposit currency
TOSTRING(trade_deposit) + // initial deposit
TOSTRING(trade_condition) + // trading operation mode (0-no delays, -1-arbitrary delay, nnn-number of milliseconds)
TOSTRING(trade_leverage) + // leverage
TOSTRING(trade_hedging) + // 1 - netting, 2 - hedging
TOSTRING(trade_currency_digits) + // number of decimal places after in deposit currency calculations
TOSTRING(trade_pips) + // calculation in pips
TOSTRING(parameters_size) + // buffer size for EA parameters
TOSTRING(parameters_total) + // number of parameters
TOSTRING(opt_params_size) + // buffer size for EA parameters
TOSTRING(opt_params_total) + // the number of parameters
TOSTRING(dwords_cnt) + // the size of the pass number during large genetic
TOSTRING(snapshot_size) + // the size of the snapshot for total optimization and for a forward after a total optimization
TOSTRING(passes_total) + // the total number of optimization passes (0 for genetic optimization)
TOSTRING(passes_passed) // the number of completed passes
);
}
#undef TOSTRING3
#undef TOSTRING2
#undef TOSTRING
};
/*
m_header.header_size=sizeof(TestCacheHeader)+m_inputs.Total()*sizeof(TestCacheInput)+m_header.parameters_size;
//--- the cached record contains the pass number (for genetic optimization it is the ordinal number), the structure of testing results (1 double if math calculations), the buffer of optimized parameters and the genetic pass
m_header.record_size=sizeof(INT64)+m_header.opt_params_size;
if(m_mathematics)
m_header.record_size+=sizeof(double);
else
m_header.record_size+=sizeof(ExpTradeSummary);
if(m_header.dwords_cnt>1)
m_header.record_size+=m_header.dwords_cnt*sizeof(DWORD);
else
{
if(m_genetics)
m_header.record_size+=sizeof(INT64);
}
*/
#undef UINT16
#undef INT64
#undef DWORD
#undef UINT