Ich bin sogar noch mehr an der Aufnahme interessiert. Das Lesen reicht aus, wenn das Format bekannt ist.
//+------------------------------------------------------------------+//| заголовок кеша |//+------------------------------------------------------------------+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. Das Format kann sich ändern. Dieses Format entspricht der Version 514
Wie soll man sich in einer solchen Situation verhalten?
Es gibt eine knifflige Bedingung in der Quelle, deren Optimalität nur durch Abtasten errechnet werden kann - ich ändere sie und nach dem Backtest sehe ich das Ergebnis in der Datei.
Ich möchte eine Vielzahl von Dateien mit unterschiedlichen Bedingungen erhalten. Und dann vergleichen.
Wie kann ein anderer Dateiname gebildet werden, wenn sich die Quelle geändert hat?
Ich weiß nicht, wie ich mich ohne sie aus solchen Situationen befreien kann.
Alle Agenten bis auf einen sind deaktiviert. Und es werden ganze 5.750 Variationen durchgeführt. Dann werden alle anderen lokalen Agenten eingeschaltet.
Es scheint, dass die Aufgaben ungleichmäßig verteilt sind. Und die Gesamtoptimierungszeit wird höher sein als sie sein könnte.
Ich bin sogar noch mehr an der Aufnahme interessiert. Das Lesen reicht aus, wenn das Format bekannt ist.
PS. Das Format kann sich ändern. Dieses Format entspricht der Version 514
Ich danke Ihnen vielmals! Ich werde den Auftrag veröffentlichen, wenn er fertig ist.
HH Nur 64 Zeichen pro Pfadlänge zum Expert Advisor - nicht zu wenig?Nein
Wie soll man sich in einer solchen Situation verhalten?
Es gibt eine knifflige Bedingung in der Quelle, deren Optimalität nur durch Abtasten errechnet werden kann - ich ändere sie und nach dem Backtest sehe ich das Ergebnis in der Datei.
Ich möchte eine Vielzahl von Dateien mit unterschiedlichen Bedingungen erhalten. Und dann vergleichen.
Wie kann ein anderer Dateiname gebildet werden, wenn sich die Quelle geändert hat?
Ich weiß nicht, wie ich mich ohne sie aus solchen Situationen befreien kann.
Forum über den Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
Slawa, 2019.04.19 15:11
Dieses Ergebnis
wird wie folgt erreicht.
Alle Agenten bis auf einen sind deaktiviert. Und es werden ganze 5.750 Variationen durchgeführt. Dann werden alle anderen lokalen Agenten eingeschaltet.
Es scheint, dass die Aufgaben ungleichmäßig verteilt sind. Und die Gesamtoptimierungszeit wird höher sein als sie sein könnte.
2025 bauen.
Der Hilfe zufolge hat GlobalVariableDel() einen Rückgabetyp bool
Aber wenn Sie Strg+Umschalt+Leertaste drücken:
Und es gibt eine Warnmeldung während der Montage:
Ich weiß nicht, wie ich mich aus solchen Situationen befreien kann.
Vielleicht MD5 aus der ex5-Datei?
Vielleicht in der ex5-Datei gespeichert, mit Hex-Editor suchen...
Ich kann die Schaltfläche "Zur Prüfung senden" des Artikelentwurfs nicht finden. Könnten Sie mir bitte einen Tipp geben?
Vielen Dank, Artem.