Библиотеки: Virtual - страница 13

 

Пишу автооптимизатор, что требует различных проверок.

Оказалось, что довольно легко запустить любой советник одновременно в реальном и торговом окружении, чтобы проверить корректность и Тестера и Virtual.

// Запуск любого советника одновременно в реальном и виртуальном торговом окружениях

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#include <Report.mqh> // https://www.mql5.com/ru/code/18801

// Сюда прописываем любой оригинальный советник
#define OnTick SystemOnTick
  #include <..\Experts\fxsaber\TesterEA_Original\TesterEA.mq4> // https://www.mql5.com/ru/code/22770
#undef OnTick

bool OnTick2()
{
  VIRTUAL::NewTick();
  SystemOnTick();
  
  return(true);
}

const int VirtualHandle = VIRTUAL::Create();

void OnTick()
{  
  static const bool IsVisual = MQLInfoInteger(MQL_VISUAL_MODE);

  _V(0, OnTick2()); // Реальное окружение
  _V(1, OnTick2()); // Виртуальное окружение
  
  if (IsVisual)
    Comment(_V(1, REPORT::OrdersToString(_Symbol, 0, 5)) +"\n\n" + // Текущее состояние виртуального окружения
            _V(0, REPORT::OrdersToString(_Symbol, 0, 5)));         // Текущее состояние реального окружения
}

Оставил здесь код, как памятку на будущее.

 
fxsaber:

Пишу автооптимизатор, что требует различных проверок.

Ниже будет сравнительная таблица МРЧ-оптимизации и штатного ГА для настоящей ТС (не публикуется).

Для штатного ГА включен один локальный Агент, оптимизационные кеши удалены. Чтобы все было честно, взят кастомный символ, где никаких преобразований валют нет.

МРЧ запускается в виде скрипта, где история берется через CopyTicks.


Неттинг, 5 оптимизуремых параметров, что составляет 20 млн вариантов входных параметров, оптимизация по реальным тикам, месячный интервал.

Почти каждый проход - около тысячи трейдов и еще большее количество отложенных ордеров. Для каждого прохода вычисляется BestInterval.


Штатный ГАМРЧ+Virtual
Длительность08:0801:25
Количество проходов4148 / 104963850 / 25000
Результат97649684


Лог ГА

result cache used 6348 times
genetic optimization finished on pass 10496 (of 20160000)
optimization done in 8 minutes 08 seconds
shortest pass 0:00:00.015, longest pass 0:00:00.443, average pass 0:00:00.116
local 4148 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Лог МРЧ (дефолтные настройки - см. реализацию)

2019.02.04 16:58:21.035 PSO[5] created: 25/5
2019.02.04 16:58:21.581 PSO Processing...
2019.02.04 16:59:46.352 PSO Finished 3850 of 25000 planned passes: true


Результат показывает, что можно использовать кастомные алгоритмы оптимизации с близкими к ГА показателями и в 5 раз быстрее.


Порядка 20 секунд уходит на оптимизацию недельного интервала по реальным тикам, что открывает дорогу к автооптимизаторам, где всего два входных параметра

  1. Как часто делать оптимизацию.
  2. Длина интервала оптимизации.
Почти любой тиковый советник однообразными действиями можно сделать автооптимизируемым и ответить себе на вопрос, стоит ли регулярно проводить оптимизацию.
MQL's OOP notes: Particle Swarm Speeds Up Expert Adviser Optimization On The Fly
MQL's OOP notes: Particle Swarm Speeds Up Expert Adviser Optimization On The Fly
  • 2016.11.21
  • www.mql5.com
In 2 previous chapters we have studied a library for on the fly optimization of expert advisers (part1, part2). One of drawbacks of the library is its slow method of optimization, because it's nothing else than straightforward iteration over all possible combinations of parameters' values. It would be great to speed up the process somehow. The...
 
fxsaber:

Ниже будет сравнительная таблица МРЧ-оптимизации и штатного ГА для настоящей ТС (не публикуется).

Для штатного ГА включен один локальный Агент, оптимизационные кеши удалены.

...

Результат показывает, что можно использовать кастомные алгоритмы оптимизации с близкими к ГА показателями и в 5 раз быстрее.

Ренат уже указывал на некорректность такого сравнения.

Оно было бы уместным, если бы альтернативный алгоритм (МРЧ) тоже умел задействовать все ядра, и давал при этом такой же прирост скорости, как ГА (не линейный, но близкий к нему).

А так, получается, сравниваем одну тяговую лошадь с другой, умалчивая, что та, вторая, умеет ходить в упряжке с 15-30 другими, а эта — гордая одиночка.


А сама тема очень интересна, уже изучаю статьи Станислава.

 
Andrey Khatimlianskii:

Ренат уже указывал на некорректность такого сравнения.

Оно было бы уместным, если бы альтернативный алгоритм (МРЧ) тоже умел задействовать все ядра, и давал при этом такой же прирост скорости, как ГА (не линейный, но близкий к нему).

А так, получается, сравниваем одну тяговую лошадь с другой, умалчивая, что та, вторая, умеет ходить в упряжке с 15-30 другими, а эта — гордая одиночка.

Тогда нельзя сравнивать Тестеры MT4 и MT5 и многое другое. Мы же говорим об алгоритмах.

Разработчикам неоднократно предлагали дать возможность заменять их оптимизационный алгоритм на кастомный. Они, конечно, отказали.

Поэтому, когда сравниваются алгоритмы, нужно ставить их в равные условия.

Вы же понимаете, что можно было запустить столько МРЧ-скриптов, сколько и ядер. И тогда сравнивать уже многоядерные варианты. Но это не изменило бы существенно результат.

 
Andrey Khatimlianskii:

А сама тема очень интересна, уже изучаю статьи Станислава.

Если взять подопытную TesterEA, то calculate-метод для реализации Станислава выглядит примерно так

// ....
  virtual double calculate( const double &vec[] )
  {
    SYSTEMCHANNEL SystemChannel(new CHANNEL_TESTEREA((int)vec[0], (int)vec[1], (int)vec[2], vec[3], (int)vec[4]));
                             
    ::SystemOptim = &SystemChannel;
    
    const int Handle = VIRTUAL::Tester(::TicksOptim, ::NewTick);
    
    const double Res = AccountEquity();
        
    if (Handle != -1)
      VIRTUAL::Delete();
    
    return(Res);
  }      
};

MqlTick TicksOptim[];
SYSTEM* SystemOptim;

void NewTick()
{
  SystemOptim.NewTick();
}

Выделенная строка является целевой функцией - виртуальный бэктест.

 

Нужно было написать статью "Муравьи предсказывают тренды", наподобие с лесами

а вообще, с вашим уровнем программирования... использовать вещи 50-летней давности, когда есть Питон и все с ним связанное

 

Написал автооптимизатор. Совсем не ожидал, что написать его будет столь легко - один лист кода.

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

Библиотеки: Virtual

fxsaber, 2019.02.04 15:12

всего два входных параметра

  1. Как часто делать оптимизацию.
  2. Длина интервала оптимизации.

В начале каждых суток делается автоптимизация по критерию наибольшего профита BestInterval за несколько прошедших суток. Т.е. в месяц это чуть больше 20 автооптимизаций, что выливается в 2.5 минуты одиночного прогона. Так что автооптимизатор оптимизировать по двум вышеназванным параметрам пока тяжеловато. Ну и результат сходу (одиночный прогон без предварительной оптимизации) за январь 2019

Если провести классическую оптимизацию ТС на этом интервале, то результат получится, наверное, получше. Но это по прошлым данным, так что своего рода будет заглядывание в будущее.

С автооптимизатором же ситуация совсем иная - никакого заглядывания, все предельно честно. Не супер, но тема интересная.

 
fxsaber:

Написал автооптимизатор. Совсем не ожидал, что написать его будет столь легко - один лист кода.

В начале каждых суток делается автоптимизация по критерию наибольшего профита BestInterval за несколько прошедших суток. Т.е. в месяц это чуть больше 20 автооптимизаций, что выливается в 2.5 минуты одиночного прогона. Так что автооптимизатор оптимизировать по двум вышеназванным параметрам пока тяжеловато. Ну и результат сходу (одиночный прогон без предварительной оптимизации) за январь 2019

Если провести классическую оптимизацию ТС на этом интервале, то результат получится, наверное, получше. Но это по прошлым данным, так что своего рода будет заглядывание в будущее.

С автооптимизатором же ситуация совсем иная - никакого заглядывания, все предельно честно. Не супер, но тема интересная.

Ещё бы (для полноты впечатления и если не слишком затруднит) таблицу результатов, размеры спредов, объёмы лотов, рабочую пару и фрейм. Т.е. обычный отчёт за указанный период.
 
aleger:
Ещё бы (для полноты впечатления и если не слишком затруднит) таблицу результатов, размеры спредов, объёмы лотов, рабочую пару и фрейм. Т.е. обычный отчёт за указанный период.
И ключи от квартиры, где деньги лежат (с)
 
tradeonlydemo:
И ключи от квартиры, где деньги лежат (с)
Слишком большой убыток в итоге получился, хотелось бы выяснить обстоятельства и причину
Причина обращения: