Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

SingleTesterCache - библиотека для MetaTrader 5

Просмотров:
3121
Рейтинг:
(13)
Опубликован:
2020.01.12 23:12
Обновлен:
2024.03.13 11:04
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Данная библиотека позволяет читать/писать tst-файлы - формат одиночного прохода MT5-Тестера.


Некоторые варианты использования

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

    Бета-версия платформы MetaTrader 5 build 2155: Области видимости в MQL5, глобальное обновление тестера стратегий и встроенного хостинга

    fxsaber, 2019.10.04 07:18

    Если откроют формат tst-файлов и разместят cache-папку Тестера в песочнице, то возможно создание Маркет-продуктов нового типа, которые будут анализаторами/корректировщиками результатов Тестера.


    Например, как раз можно будет написать Маркет-комбайн, который показывает все доступные в кеше одиночные проходы.

    • Выбираешь мышкой нужные - он показывает объединенную статистику.
    • Чистит кеш от ненужных проходов.
    • Вычисляет из проходов оптимальный портфель с соответствующими весовыми коэффициентами.
    • Показывает наилучшие интервалы торговли для каждого из проходов.
    • Предлагает свою интерактивную визуализацию статистики, включая фильтры.
    • Вычисляет оптимальный ММ.
    • Для каждой hedge-позиции в истории показывает OrderOpenPriceBest (лучшая цена открытия за время жизни позиции), OrderClosePriceBest (аналогично), OrderOpenPriceLength (сколько времени цена была не хуже OrderOpenPrice за время жизни позиции), OrderClosePriceLength(аналогично), OrderProfitBest(наибольший возможный профит аналогичной позиции на интервале жизни позиции-оригинала).
    • Показывает КПД каждой hedge-позиции.
    • Вычисляет результат при включении latency.
    • Вычисляет результат при разных настройках исполнения ордеров (скользят ли и т.д.) и комиссии.
    • Показывает результат ТС на другой тиковой истории.
    • ...

    Для реализации каждого пункта не нужно запускать Тестер.

    Все это можно сделать уже сейчас, если через mklink самому поместить cache-папку в песочницу. Нужен только tst-формат.

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


    Если cache-папку не разместят в песочнице, то, возможно, увеличится вероятность, что подобные продукты появятся вне экосистемы MQ, т.к. будут написаны на других языках.


    Примеры.

    #include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Данные одиночного прохода Тестера.
    
    void OnStart()
    {  
      SINGLETESTERCACHE SingleTesterCache; // Создали объект тестерного кеша.
      
      SingleTesterCache.Set(); // Поместили в него реальную историю торгов.
      
    // ..\..\MQL5\Files\Test.tst
      Print(SingleTesterCache.Save("Test.tst")); // Записали ее в файл, который можно импортировать в Тестер.
    }

    Этот скрипт загоняет торговую историю реального счета в tst-формат. Импортируется в Тестер она следующим образом.


    Получается нечто такое.


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

    #include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Данные одиночного прохода Тестера.
    
    #include <Graphics\Graphic.mqh>
    #include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132
    
    #define MIN_WIDTH 10
    
    // Создание графика.
    string GraphPlot( const double &Y1[], const double &Y2[],
                      int Width = 0, int Height = 0, const ENUM_CURVE_TYPE Type = CURVE_NONE,
                      const string CurveName1 = NULL, const string CurveName2 = NULL, string ObjName = NULL )
    {
      Width = Width ? Width : (int)::ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
      Height = Height ? Height : (int)::ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);
      ObjName = (ObjName == NULL) ? __FUNCTION__ : ObjName;
    
      CGraphic Graphic;
    
      const bool Res = (::ObjectFind(0, ObjName) >= 0) ? Graphic.Attach(0, ObjName) : Graphic.Create(0, ObjName, 0, 0, 0, Width, Height);
    
      if (Res)
      {
        const int Size1 = ::ArraySize(Y1);
        const int Size2 = ::ArraySize(Y2);
    
        Graphic.CurveAdd(Y1, ((Type == CURVE_NONE) && Size1) ? ((Width / Size1 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName1);
        Graphic.CurveAdd(Y2, ((Type == CURVE_NONE) && Size2) ? ((Width / Size2 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName2);
    
        Graphic.CurvePlotAll();
        Graphic.Update();
      }
    
      return (Res ? Graphic.ChartObjectName() : NULL);
    }
    
    void OnStart()
    {  
      uchar Bytes2[];
      
      if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Если получилось прочитать последнюю кеш-запись одиночного прогона
      {
        const SINGLETESTERCACHE SingleTesterCache(Bytes2); // Загоняем ее в соответствующий объект.
    
        SingleTesterCache.SaveSet(NULL, true, "Created by " + __FILE__); // Сохраняем set-файл с подробностями.
        
        double Balance[];
        double Equity[];
      
        // Печатаем график баланса и эквити.
        if (SingleTesterCache.GetBalance(Balance) && SingleTesterCache.GetEquity(Equity))
          GraphPlot(Balance, Equity, 1200, 500, CURVE_NONE, "Balance", "Equity");
          
        Print(SingleTesterCache.Header.ToString());  // Вывели заголовок одиночного прохода.
        Print(SingleTesterCache.Summary.ToString()); // Статистику.
        Print(SingleTesterCache.Inputs);             // Входные параметры.
      }
    }


    Этот скрипт автоматически подхватит данные последнего одиночного прохода и выдаст его данные, включая график баланса/эквити.


    Благодарность.

    Спасибо разработчикам за создание кешей Тестера и помощь в раксрытии его форматов.

    Min Max for N Bars Martingale Min Max for N Bars Martingale

    Поиск Минимальных и Максимальных цен на заданном количестве баров. Выставление отложенных ордеров.

    LeManTrend EA LeManTrend EA

    Торговая стратегия на пользовательском индикаторе "LeManTrend"

    Day Candles As Stock Day Candles As Stock

    Показывает дневные свечи на Форексе "как на бирже". Т.е. строит дневные свечи по периоду времени, заданному в настройках (час открытия и закрытия условной сессии) Например - если установить начало в открытие Европы а закрытие по закрытию США, т.о. за период между (Азиатская сессия) будут гэпы, и таким образом более наглядно проявляются свечные модели. Индикатор сам устанавливает период графика D1.

    Two iMA Crossing Arrow Two iMA Crossing Arrow

    Индикатор на базе стиля DRAW_COLOR_ARROW - отображает значок при пересечении двух iMA (Moving Average) на заданном баре