Estou ainda mais interessado na gravação. A leitura serve, se o formato for conhecido.
//+------------------------------------------------------------------+//| заголовок кеша |//+------------------------------------------------------------------+struct TestCacheHeader
{
UINT version; // версия кеша
wchar_t copyright[64]; // копирайт
UINT header_size; // размер заголовка
UINT record_size; // размер кешируемой записи (TestCacheRecord с буфером параметров)//---
wchar_t expert_name[64]; // имя эксперта
wchar_t expert_path[128]; // имя эксперта с путём от MQL5
wchar_t server[64]; // источник истории (торговый сервер)
wchar_t symbol[32]; // символ тестирования
UINT16 period; // период чарта
INT64 date_from; // дата начала данных в настройках тестирования
INT64 date_to; // конечная дата в настройках тестирования
INT64 date_forward; // конечная дата соответствующего форвардаint opt_mode; // режим оптимизации (0-полная оптимизация, 1-генетика, 2 или 3-форвард)int ticks_mode; // режим генерации тиковint last_criterion; // критерий оптимизации при последнем сеансе
DWORD msc_min; // минимальное время выполнения в миллисекундах
DWORD msc_max; // максимальное время выполнения в миллисекундах
DWORD msc_avg; // среднее время выполнения в миллисекундахint common_reserve[16];
//---
wchar_t group[80]; // имя группы + hedging/netting
wchar_t trade_currency[32]; // валюта депозитаint trade_deposit; // начальный депозитint trade_condition; // режим работы торговли (0-без задержек, -1-произвольная задержка, nnn-количество миллисекунд)int trade_leverage; // плечоint trade_hedging; // 1 - netting, 2 - hedgingint trade_currency_digits;
int trade_reserve[6];
//---char hash_ex5[16]; // контрольная сумма скомпилированного эксперта
UINT parameters_size; // размер буфера параметров эксперта
UINT parameters_total; // количество параметров
UINT opt_params_size; // размер буфера оптимизируемых параметров эксперта
UINT opt_params_total; // количество оптимизируемых параметров
UINT dwords_cnt; // размер номера прохода большой генетики
UINT snapshot_size; // размер снапшота для тотальной оптимизации и для форварда после тотальной оптимизации
UINT passes_total; // общее количество проходов оптимизации (для генетической оптимизации 0)
UINT passes_passed; // количество пройденных проходов// далее следуют выставленные параметры эксперта (в т.ч. строковые) в структуре TestCacheInput//--- конец заголовка. далее следуют записи о каждом проходе
};
//+------------------------------------------------------------------+//| входные параметры тестирования |//+------------------------------------------------------------------+struct TestCacheInput
{
wchar_t name[64];
int flag; // оптимизируемый параметрint type; // тип TYPE_XXXint digits; // количество знаков после запятойint offset; // смещение в буфере параметровint size; // размер значения параметра в буфере//--- 0-start,1-step,2-stopunion { INT64 integers[3]; double numbers[3]; };
};
//--- кешируемая запись содержит номер прохода (при генетике - номер по порядку), структуру результатов тестирования (если математика, то 1 double), буфер оптимизируемых параметров и генетический проход
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);
}
//+------------------------------------------------------------------+//| Структура для статистики торговли |//+------------------------------------------------------------------+struct ExpTradeSummary
{
double initial_deposit; // начальный депозитdouble withdrawal; // снято средствdouble profit; // общая прибыль (+)double grossprofit; // общий плюсdouble grossloss; // общий минусdouble maxprofit; // максимально прибыльная сделкаdouble minprofit; // максимально убыточная сделкаdouble conprofitmax; // прибыль максимальной последовательности прибыльных сделокdouble maxconprofit; // максимальная прибыль среди последовательностейdouble conlossmax; // убыток максимальной последовательности убыточных сделокdouble maxconloss; // максимальный убыток среди последовательностейdouble balance_min; // минимальное значение баланса (для расчёта абсолютной просадки)double maxdrawdown; // максимальная просадка по балансуdouble drawdownpercent; // отношение максимальной просадки по балансу к её пикуdouble reldrawdown; // максимальная относительная просадка по балансу в деньгахdouble reldrawdownpercent; // максимальная относительная просадка по балансу в процентахdouble equity_min; // минимальное значение equity (для расчёта абсолютной просадки по equity)double maxdrawdown_e; // максимальная просадка по equitydouble drawdownpercent_e; // отношение максимальной просадки по equity к её пику (+)double reldrawdown_e; // максимальная относительная просадка по equity в деньгахdouble reldrawdownpercnt_e; // максимальная относительная просадка по equity в процентахdouble expected_payoff; // матожидание выигрыша (+)double profit_factor; // показатель прибыльности (+)double recovery_factor; // фактор восстановления (+)double sharpe_ratio; // коэффициент Шарпа (+)double margin_level; // минимальный уровень маржиdouble custom_fitness; // пользовательский фитнесс - результат OnTester (+)int deals; // общее количество сделокint trades; // количество сделок out/inoutint profittrades; // количество прибыльныхint losstrades; // количество убыточныхint shorttrades; // количество шортовint longtrades; // количество лонговint winshorttrades; // количество прибыльных шортовint winlongtrades; // количество прибыльных лонговint conprofitmax_trades; // максимальная последовательность прибыльных сделокint maxconprofit_trades; // последовательность максимальной прибылиint conlossmax_trades; // максимальная последовательность убыточных сделокint maxconloss_trades; // последовательность максимального убыткаint avgconwinners; // среднее количество последовательных прибыльных сделокint avgconloosers; // среднее количество последовательных убыточных сделок
};
PS. O formato pode mudar. Este formato corresponde à versão 514
Há uma condição complicada na fonte, cuja optimização só pode ser calculada por apalpação - eu mudo-a e após o backtest eu vejo o resultado no ficheiro.
Quero obter muitos ficheiros com condições diferentes. E depois comparar.
Como formar outro nome de ficheiro, se a fonte mudou?
Estou ainda mais interessado na gravação. A leitura serve, se o formato for conhecido.
PS. O formato pode mudar. Este formato corresponde à versão 514
Muito obrigado! Publicarei o trabalho de opt quando estiver pronto.
HH Apenas 64 caracteres por comprimento do caminho para o Expert Advisor - não muito poucos?Não
Como agir então em tal situação?
Há uma condição complicada na fonte, cuja optimização só pode ser calculada por apalpação - eu mudo-a e após o backtest eu vejo o resultado no ficheiro.
Quero obter muitos ficheiros com condições diferentes. E depois comparar.
Como formar outro nome de ficheiro, se a fonte mudou?
Não sei como sair de tais situações sem ele.
Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais
Insectos, insectos, perguntas
Slava, 2019.04.19 15:11
Este resultado
é alcançado da seguinte forma.
Todos os agentes, excepto um, estão desactivados. E são executadas 5.750 variações completas. Depois, todos os outros agentes locais são ligados.
Parece que as tarefas estão distribuídas de forma desigual. E o tempo total de optimização será maior do que poderia ser.
Construir 2025.
De acordo com a ajuda, a função GlobalVariableDel() tem o tipo de retorno bool
Mas quando se pressiona Ctrl+Shift+Space:
E emite uma mensagem de aviso durante a montagem:
Não sei como sair de situações como esta
Talvez MD5 do ficheiro ex5?
Talvez guardado dentro do ficheiro ex5, pesquisar com o editor hexadecimal...
Não consigo encontrar o botão "Enviar para verificar" do projecto de artigo. Pode dar-me uma dica, por favor?
Obrigado, Artem.