Добрый день. Столкнулся с весьма интересной проблемой при валидации. Сова ее не проходит!!! Не удивил, подумают многие, /***ую этому правилу. Но обо всем по порядку.
Начну с того какие проверки уже есть,чтобы сразу пресечь очевидные пожелания:
4. Ограничение на количество лотов по одному символу
Логика совы предполагает открытие рыночных ордеров без стопов, дальше при определенных условиях сама всё закрывает.
Чтобы исключить ошибки именно логики открытия, засунул всю логику совы в топку и единственным сигналом на открытие ордеров служит их отсутствие. Так что по сути на каждом тике мы получаем сигнал на открытие бая и села если таковых нет. С сигналом разобрались. Дальше пошла игра с лотами, чтобы тоже упростить системе валидацию, логику лотов тоже засунул в топку и пробую открывать позицию самым минимальным, запрошенным из терминала лотом.
И того получается, что на каждом тике я хочу открыть бай и селл самым минимальным лотом, если их нет.
Что я получаю в результате валидации:
test on EURUSD,H1 (hedging)
there are no trading operations
test on XAUUSD,D1 (hedging)
there are no trading operations
test on GBPUSD,M30 (hedging)
there are no trading operations
test on EURUSD,M1 (hedging)
there are no trading operations
К чему привели мои эксперименты. Если я при проверке "Нехватка средств для проведения торговой операции" пишу про это в журнал то при валидации я получаю ответ, что получился слишком большой лог файл, оно и понятно на каждом тике пытаюсь открыть позицию и не хватает денежных средств. Если ничего не пишу в журнал, то естественно с журналом все ок, но нет открытых позиций в конце валидации. Поэтому мне кажется, что в алгоритме валидации появился какой то дикий глюк, довольно смелое заявление, согласен, но поправьте если я где то ошибся.
Ну и на закваску данный советник проходил автовалидацию три недели назад, просто возникла необходимость изменить некоторые параметры по умолчанию и поправить пару мелочей, НЕ ЗАТРАГИВАЮЩИХ логику открытия и лотности.
Добрый день. Столкнулся с весьма интересной проблемой при валидации. Сова ее не проходит!!! Не удивил, подумают многие, /***ую этому правилу. Но обо всем по порядку.
Начну с того какие проверки уже есть,чтобы сразу пресечь очевидные пожелания:
4. Ограничение на количество лотов по одному символу
Логика совы предполагает открытие рыночных ордеров без стопов, дальше при определенных условиях сама всё закрывает.
Чтобы исключить ошибки именно логики открытия, засунул всю логику совы в топку и единственным сигналом на открытие ордеров служит их отсутствие. Так что по сути на каждом тике мы получаем сигнал на открытие бая и села если таковых нет. С сигналом разобрались. Дальше пошла игра с лотами, чтобы тоже упростить системе валидацию, логику лотов тоже засунул в топку и пробую открывать позицию самым минимальным, запрошенным из терминала лотом.
И того получается, что на каждом тике я хочу открыть бай и селл самым минимальным лотом, если их нет.
Что я получаю в результате валидации:
test on EURUSD,H1 (hedging)
there are no trading operations
test on XAUUSD,D1 (hedging)
there are no trading operations
test on GBPUSD,M30 (hedging)
there are no trading operations
test on EURUSD,M1 (hedging)
there are no trading operations
К чему привели мои эксперименты. Если я при проверке "Нехватка средств для проведения торговой операции" пишу про это в журнал то при валидации я получаю ответ, что получился слишком большой лог файл, оно и понятно на каждом тике пытаюсь открыть позицию и не хватает денежных средств. Если ничего не пишу в журнал, то естественно с журналом все ок, но нет открытых позиций в конце валидации. Поэтому мне кажется, что в алгоритме валидации появился какой то дикий глюк, довольно смелое заявление, согласен, но поправьте если я где то ошибся.
Ну и на закваску данный советник проходил автовалидацию три недели назад, просто возникла необходимость изменить некоторые параметры по умолчанию и поправить пару мелочей, НЕ ЗАТРАГИВАЮЩИХ логику открытия и лотности.
Заранее спасибо всем за дельные советы.
У Вас написано что советник не совершает торговых операций... Разберитесь почему советник не торгует...
У Вас написано что советник не совершает торговых операций... Разберитесь почему советник не торгует...
Вы наверное не очень внимательно прочитали мой пост. Сигналом на открытие позиции служит отсутствие любой позиции, ставлю на любой график, любой валюты, любого инструмента и позиции открываются с приходом тика у меня в терминале. А при верификации пишет, что нету сделок. Но если я включу запись в журнал события отсутствие денег, то из-за того, что сигнал на каждом тике у меня вылезает ошибка переполнения журнала, а чем он может быть переполнен если единственное, что туда пишу это информация про то, что нет денег на сделку. Отсюда и делаю вывод, что при автовалидации что то заклинило и постоянно проверяет с 10 центами на счету, отсюда и нет сделок, потому что проверки просто не пропускают до открытия. Но если отключаю эту проверку, то конечно автовалидация выдает ошибку открытия позиции из-за нехватки средств.
Меня даже больше интересует запись. Чтение сделаю, если будет формат известен.
//+------------------------------------------------------------------+//| заголовок кеша |//+------------------------------------------------------------------+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. Формат может поменяться. Данный формат соответствует версии 514
В исходнике есть хитрое условие, оптимальность которого возможно вычислить только нащупыванием - изменяю его и после бэктеста смотрю результат в файле.
Нужно получить много файлов с разными условиями. И потом сравнить.
Как формировать другое имя файла, если исходник изменился?
ЗЫ Без этого не знаю, как выкрутиться в подобных ситуациях
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Кто-нибудь (желательно из разработчиков) объяснит косяки в оптимизаторе?
Slava, 2019.02.14 09:42
мы не закладываемся на дату EX5-файла. А считаем контрольную сумму всех исходников
Могли бы Вы добавить соответствующие данные в MQLInfoInteger?
Что обозначает данное свойство?
ENUM_MQL_INFO_INTEGER
Идентификатор
Описание
Тип свойства
MQL_SIGNALS_ALLOWED
Разрешение на работу с сигналами данной запущенной программы
bool
Могли бы Вы добавить соответствующие данные в MQLInfoInteger?
Добрый день. Столкнулся с весьма интересной проблемой при валидации. Сова ее не проходит!!! Не удивил, подумают многие, /***ую этому правилу. Но обо всем по порядку.
Начну с того какие проверки уже есть,чтобы сразу пресечь очевидные пожелания:
1. Нехватка средств для проведения торговой операции.
2. Неправильные объемы в торговых операциях
3. Ограничение на количество отложенных ордеров
4. Ограничение на количество лотов по одному символу
Логика совы предполагает открытие рыночных ордеров без стопов, дальше при определенных условиях сама всё закрывает.
Чтобы исключить ошибки именно логики открытия, засунул всю логику совы в топку и единственным сигналом на открытие ордеров служит их отсутствие. Так что по сути на каждом тике мы получаем сигнал на открытие бая и села если таковых нет. С сигналом разобрались. Дальше пошла игра с лотами, чтобы тоже упростить системе валидацию, логику лотов тоже засунул в топку и пробую открывать позицию самым минимальным, запрошенным из терминала лотом.
И того получается, что на каждом тике я хочу открыть бай и селл самым минимальным лотом, если их нет.
Что я получаю в результате валидации:
test on EURUSD,H1 (hedging)
there are no trading operations
test on XAUUSD,D1 (hedging)
there are no trading operations
test on GBPUSD,M30 (hedging)
there are no trading operations
test on EURUSD,M1 (hedging)
there are no trading operations
К чему привели мои эксперименты. Если я при проверке "Нехватка средств для проведения торговой операции" пишу про это в журнал то при валидации я получаю ответ, что получился слишком большой лог файл, оно и понятно на каждом тике пытаюсь открыть позицию и не хватает денежных средств. Если ничего не пишу в журнал, то естественно с журналом все ок, но нет открытых позиций в конце валидации. Поэтому мне кажется, что в алгоритме валидации появился какой то дикий глюк, довольно смелое заявление, согласен, но поправьте если я где то ошибся.
Ну и на закваску данный советник проходил автовалидацию три недели назад, просто возникла необходимость изменить некоторые параметры по умолчанию и поправить пару мелочей, НЕ ЗАТРАГИВАЮЩИХ логику открытия и лотности.
Заранее спасибо всем за дельные советы.
Добрый день. Столкнулся с весьма интересной проблемой при валидации. Сова ее не проходит!!! Не удивил, подумают многие, /***ую этому правилу. Но обо всем по порядку.
Начну с того какие проверки уже есть,чтобы сразу пресечь очевидные пожелания:
1. Нехватка средств для проведения торговой операции.
2. Неправильные объемы в торговых операциях
3. Ограничение на количество отложенных ордеров
4. Ограничение на количество лотов по одному символу
Логика совы предполагает открытие рыночных ордеров без стопов, дальше при определенных условиях сама всё закрывает.
Чтобы исключить ошибки именно логики открытия, засунул всю логику совы в топку и единственным сигналом на открытие ордеров служит их отсутствие. Так что по сути на каждом тике мы получаем сигнал на открытие бая и села если таковых нет. С сигналом разобрались. Дальше пошла игра с лотами, чтобы тоже упростить системе валидацию, логику лотов тоже засунул в топку и пробую открывать позицию самым минимальным, запрошенным из терминала лотом.
И того получается, что на каждом тике я хочу открыть бай и селл самым минимальным лотом, если их нет.
Что я получаю в результате валидации:
test on EURUSD,H1 (hedging)
there are no trading operations
test on XAUUSD,D1 (hedging)
there are no trading operations
test on GBPUSD,M30 (hedging)
there are no trading operations
test on EURUSD,M1 (hedging)
there are no trading operations
К чему привели мои эксперименты. Если я при проверке "Нехватка средств для проведения торговой операции" пишу про это в журнал то при валидации я получаю ответ, что получился слишком большой лог файл, оно и понятно на каждом тике пытаюсь открыть позицию и не хватает денежных средств. Если ничего не пишу в журнал, то естественно с журналом все ок, но нет открытых позиций в конце валидации. Поэтому мне кажется, что в алгоритме валидации появился какой то дикий глюк, довольно смелое заявление, согласен, но поправьте если я где то ошибся.
Ну и на закваску данный советник проходил автовалидацию три недели назад, просто возникла необходимость изменить некоторые параметры по умолчанию и поправить пару мелочей, НЕ ЗАТРАГИВАЮЩИХ логику открытия и лотности.
Заранее спасибо всем за дельные советы.
У Вас написано что советник не совершает торговых операций... Разберитесь почему советник не торгует...
У Вас написано что советник не совершает торговых операций... Разберитесь почему советник не торгует...
Вы наверное не очень внимательно прочитали мой пост. Сигналом на открытие позиции служит отсутствие любой позиции, ставлю на любой график, любой валюты, любого инструмента и позиции открываются с приходом тика у меня в терминале. А при верификации пишет, что нету сделок. Но если я включу запись в журнал события отсутствие денег, то из-за того, что сигнал на каждом тике у меня вылезает ошибка переполнения журнала, а чем он может быть переполнен если единственное, что туда пишу это информация про то, что нет денег на сделку. Отсюда и делаю вывод, что при автовалидации что то заклинило и постоянно проверяет с 10 центами на счету, отсюда и нет сделок, потому что проверки просто не пропускают до открытия. Но если отключаю эту проверку, то конечно автовалидация выдает ошибку открытия позиции из-за нехватки средств.
Меня даже больше интересует запись. Чтение сделаю, если будет формат известен.
PS. Формат может поменяться. Данный формат соответствует версии 514
Спасибо огромное! Выложу работу с opt, как будет готова.
ЗЫ Всего 64 символа на длину пути к эксперту - не мало?Нет
Как тогда поступать в такой ситуации?
В исходнике есть хитрое условие, оптимальность которого возможно вычислить только нащупыванием - изменяю его и после бэктеста смотрю результат в файле.
Нужно получить много файлов с разными условиями. И потом сравнить.
Как формировать другое имя файла, если исходник изменился?
ЗЫ Без этого не знаю, как выкрутиться в подобных ситуациях
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Slava, 2019.04.19 15:11