Ошибки, баги, вопросы - страница 2439

 

Могли бы Вы добавить соответствующие данные в MQLInfoInteger?

 

Что обозначает данное свойство?

ENUM_MQL_INFO_INTEGER

Идентификатор

Описание

Тип свойства

MQL_SIGNALS_ALLOWED

Разрешение на работу с сигналами данной запущенной программы

bool

 
fxsaber:

Могли бы Вы добавить соответствующие данные в 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

К чему привели мои эксперименты. Если я при проверке "Нехватка средств для проведения торговой операции" пишу про это в журнал то при валидации я получаю ответ, что получился слишком большой лог файл, оно и понятно на каждом тике пытаюсь открыть позицию и не хватает денежных средств. Если ничего не пишу в журнал, то естественно с журналом все ок, но нет открытых позиций в конце валидации. Поэтому мне кажется, что в алгоритме валидации появился какой то дикий глюк, довольно смелое заявление, согласен, но поправьте если я где то ошибся.

Ну и на закваску данный советник проходил автовалидацию три недели назад, просто возникла необходимость изменить некоторые параметры по умолчанию и поправить пару мелочей, НЕ ЗАТРАГИВАЮЩИХ логику открытия и лотности.

Заранее спасибо всем за дельные советы.


 
Sergey Kasirenko:

Добрый день. Столкнулся с весьма интересной проблемой при валидации. Сова ее не проходит!!!  Не удивил, подумают многие, /***ую этому правилу. Но обо всем по порядку.

Начну с того какие проверки уже есть,чтобы сразу пресечь очевидные пожелания:

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

К чему привели мои эксперименты. Если я при проверке "Нехватка средств для проведения торговой операции" пишу про это в журнал то при валидации я получаю ответ, что получился слишком большой лог файл, оно и понятно на каждом тике пытаюсь открыть позицию и не хватает денежных средств. Если ничего не пишу в журнал, то естественно с журналом все ок, но нет открытых позиций в конце валидации. Поэтому мне кажется, что в алгоритме валидации появился какой то дикий глюк, довольно смелое заявление, согласен, но поправьте если я где то ошибся.

Ну и на закваску данный советник проходил автовалидацию три недели назад, просто возникла необходимость изменить некоторые параметры по умолчанию и поправить пару мелочей, НЕ ЗАТРАГИВАЮЩИХ логику открытия и лотности.

Заранее спасибо всем за дельные советы.


У Вас написано что советник не совершает торговых операций...  Разберитесь почему советник не торгует...

 
Vladimir Pastushak:

У Вас написано что советник не совершает торговых операций...  Разберитесь почему советник не торгует...

Вы наверное не очень внимательно прочитали мой пост. Сигналом на открытие позиции служит отсутствие любой позиции, ставлю на любой график, любой валюты, любого инструмента и позиции открываются с приходом тика у меня в терминале. А при верификации пишет, что нету сделок. Но если я включу запись в журнал события отсутствие денег, то из-за того, что сигнал на каждом тике у меня вылезает ошибка переполнения журнала, а чем он может быть переполнен если единственное, что туда пишу это информация про то, что нет денег на сделку. Отсюда и делаю вывод, что при автовалидации что то заклинило и постоянно проверяет с 10 центами на счету, отсюда и нет сделок, потому что проверки просто не пропускают до открытия. Но если отключаю эту проверку, то конечно автовалидация выдает ошибку открытия позиции из-за нехватки средств.

 
fxsaber:

Меня даже больше интересует запись. Чтение сделаю, если будет формат известен.

//+------------------------------------------------------------------+
//| заголовок кеша                                                   |
//+------------------------------------------------------------------+
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 - hedging
   int               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_XXX
   int               digits;                  // количество знаков после запятой
   int               offset;                  // смещение в буфере параметров
   int               size;                    // размер значения параметра в буфере
   //--- 0-start,1-step,2-stop
   union { INT64 integers[3]; double numbers[3]; };
  };
   m_header.header_size=sizeof(TestCacheHeader)+m_inputs.Total()*sizeof(TestCacheInput)+m_header.parameters_size;
//--- кешируемая запись содержит номер прохода (при генетике - номер по порядку), структуру результатов тестирования (если математика, то 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;       // максимальная просадка по equity
   double            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/inout
   int               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:
PS. Формат может поменяться. Данный формат соответствует версии 514

Спасибо огромное! Выложу работу с opt, как будет готова.

ЗЫ Всего 64 символа на длину пути к эксперту - не мало?
 
Slava:
Нет

Как тогда поступать в такой ситуации?

В исходнике есть хитрое условие, оптимальность которого возможно вычислить только нащупыванием - изменяю его и после бэктеста смотрю результат в файле.

Нужно получить много файлов с разными условиями. И потом сравнить.

Как формировать другое имя файла, если исходник изменился?


ЗЫ Без этого не знаю, как выкрутиться в подобных ситуациях

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slava, 2019.04.19 15:11

   char              hash_ex5[16];           // контрольная сумма скомпилированного эксперта
 
По какой причине в поиск по сайту не попадают форумные посты за ближайшие три дня?