Обсуждение статьи "Непрерывная скользящая оптимизация (Часть 8): Доработка программы и исправление найденных недочетов" - страница 2

 
Andrey Azatskiy:

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

В моём понимании выгрузку я подключил, добавил в советник строки:

#include<Trade\Trade.mqh>
#define CUSTOM_ON_TICK // Tell to uploading system that we implement OnTick callback ourself
#include <History manager/AutoUpLoader2.mqh> // Include CAutoUploader

#define TESTER_ONLY
А по параметрам всё работало. Оптимизация в тестере визуализировалась и советник писал результаты в свой файл. Но только по истории. Форвард-проход не зафиксирован. В окне результатов оптимизатора небыло вообще ничего.
 
Good Beer:

В моём понимании выгрузку я подключил, добавил в советник строки:

А по параметрам всё работало. Оптимизация в тестере визуализировалась и советник писал результаты в свой файл. Но только по истории. Форвард-проход не зафиксирован. В окне результатов оптимизатора небыло вообще ничего.

Если Вы использовали "CUSTOM_ON_TICK", то Вам нужно добавить в Ваш метод OnTick (в самое начало) следующий код :

CAutoUploader2::OnTick(); // If CUSTOM_ON_TICK was defined

Либо переименуйте OnTick  в MyOnTick или как то еще и в OnInit пропишите подключение :

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);
 
Good Beer:

Вы неправильно поняли. Это у вас время оптимизации с 12-00 по 12-00. И я не нашел где это можно изменить.

Из за этого мы теряем 12 часов первого дня истории и залезаем с оптимизацией на 12 часов на период форварда. Из за этого форвард сдвигается на день вперёд, т.к. этот день занимает история.

Т.к. в неделе 7 дней, и период оптимизации нужно разделять на семь дней. Исторический период заканчивается в понедельник 0-00 и форвард начинается  в понедельник 0-00. Получается, что в понедельник мы не тестируем а делаем форвард. Никакой машины времени. 

Время отображается в зарубежном формате (ММ.ДД.ГГГГ ЧЧ:ММ), но задается в нашем (ДД.ММ.ГГГГ). 
Где время это не 12:00 pm = 00:00.

И так как мы указывали время По равное ДД.ММ.ГГГГ 00:00, то если мы укажем его же, тестер не поймет что нам нужно тестирование со следующей даты, вместо этого он начнет тест с той же самой даты и получится та самая машина времени. По этому мы и отступаем на день. Однако Вы вользы переписать логику задания времени, для этого просто модифицируйте метод "public void Calculate(DateTime From, DateTime Till, uint history, uint forward)" , который находится в классе " AutoFillInDateBordersM". Данный класс описан в файле, что может быть найден по пути "MetaTrader-Auto-Optimiser/Metatrader Auto Optimiser/Model/AutoFillInDateBordersM.cs".

Вот так он реализован втекущей версии :
public void Calculate(DateTime From, DateTime Till, uint history, uint forward)
        {
            if (From >= Till)
                throw new ArgumentException("Date From must be less then date Till");

            List<KeyValuePair<OptimisationType, DateTime[]>> data = new List<KeyValuePair<OptimisationType, DateTime[]>>();

            OptimisationType type = OptimisationType.History;

            DateTime _history = From;
            DateTime _forward = From.AddDays(history + 1);

            DateTime CalcEndDate()
            {
                return type == OptimisationType.History ? _history.AddDays(history) : _forward.AddDays(forward);
            }

            while (CalcEndDate() <= Till)
            {
                DateTime from = type == OptimisationType.History ? _history : _forward;
                data.Add(new KeyValuePair<OptimisationType, DateTime[]>(type, new DateTime[2] { from, CalcEndDate() }));

                if (type == OptimisationType.History)
                    _history = _history.AddDays(forward + 1);
                else
                    _forward = _forward.AddDays(forward + 1);

                type = type == OptimisationType.History ? OptimisationType.Forward : OptimisationType.History;
            }

            if (data.Count == 0)
                throw new ArgumentException("Can`t create any date borders with setted In sample (History) step");

            DateBorders?.Invoke(data);
        }
 
Nguyen Tien Duong:

Hi, your series articles were really helpful, I am not good at c # so I am trying to learn it from your lessons

I downloaded the Attached filesfrom Part 4 to 7 but i can't build the "Metatrade Auto Optimiser" project. I got error like the picture:


Attached files from Part 8 that's my fisrt time seeing your program interface, it succeeded in launching mt5 when optimisation mode is disable , and wwhen i turn on it like this picture I got error 



please help me fix it thank you

Use the last past, it contanes all nessasary files and links.

You need to add uploading options in your expert. To do it, use file "/Data/MQL5/Experts/Test Expert/New uploading variant/SimpleMA.mq5" as an example, or compile it and use for the tests. 

 
Andrey Azatskiy:

Если Вы использовали "CUSTOM_ON_TICK", то Вам нужно добавить в Ваш метод OnTick (в самое начало) следующий код :

Простите за тупость; а что, можно было обойтись штатным 'OnTick()"?

 
Andrey Azatskiy:

Время отображается в зарубежном формате

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

 
Good Beer:

Простите за тупость; а что, можно было обойтись штатным 'OnTick()"?

Там все настраивается. Поизучайте файлик "History manager/AutoUpLoader2.mqh" + пример с новым форматом выгрузки данных, тогда должно все проясниться. 

Если как у Вас в сообщении объеслен дефайн  "CUSTOM_ON_TICK" - значит вы говорите тем самым что OnTick дет стандартным, однако это же значит что Вы сами должны будите позаботиться что бы строка кода 

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);

присутствовала в начале метода OnTick.

 

Hello,


Thank you so much for this project. I'm sure it'll be very useful.

I just started to use it and I'm facing a problem with the selection of the currency on "Metatrader Auto Optmiser .exe". Is it possible to use another one instead of the defaults? 

There isn't an option to write a new one besides of the available options (RUR, USD, EUR, GPB, CHF).


Thank you.

 
Marinho10:

Hello,


Thank you so much for this project. I'm sure it'll be very useful.

I just started to use it and I'm facing a problem with the selection of the currency on "Metatrader Auto Optmiser .exe". Is it possible to use another one instead of the defaults? 

There isn't an option to write a new one besides of the available options (RUR, USD, EUR, GPB, CHF).


Thank you.

Hi.

You have to edit code of the Auto optimiser and recompile it.
1. Open program in Visual Studio.
2. Open file "AutoOptimiserVM.cs"
3. At the line #41 - the following code is responsable for the collection ofcurrencies. Edit it:

new OptimiserSetting("Currency", new []{ "RUR", "USD", "EUR", "GBP", "CHF"}),
4. Recompile the program and you will see your currency in the combobox.

 
Прошу Автора записать видео, в котором видны различные варианты использования данного проекта.
Причина обращения: