Скрипты: ThirdPartyTicks - страница 2

 
Maxim Dmitrievsky:

Просто мысли вслух, сорри, могу удалить предыдущие сообщения, стоит? )

За чистоту рядов не борюсь, пусть живет. Как будет что по инструментарию, пишите.

Для МО-страждущих первое, что сделал бы, это сравнительные характеристики с другими источниками.

А для более приземленных - Тестер.


ЗЫ Предложите "товарищам по цеху".

Машинное обучение в трейдинге: теория и практика (торговля и не только)
Машинное обучение в трейдинге: теория и практика (торговля и не только)
  • 2016.05.26
  • www.mql5.com
Добрый день всем, Знаю, что есть на форуме энтузиасты machine learning и статистики...
 
fxsaber:

За чистоту рядов не борюсь, пусть живет. Как будет что по инструментарию, пишите.

Для МО-страждущих первое, что сделал бы, это сравнительные характеристики с другими источниками.

А для более приземленных - Тестер.


ЗЫ Предложите "товарищам по цеху".

вряд ли будет воспринято кем-то кроме меня, пока не показать им на пальцах, но написал :)

 

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

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

fxsaber, 2018.04.07 22:37

Заодно короткая проверка и этой реализации (всего лишь баровый спред посчитал иначе)

Сравниваются два режима: "Все тики" и "OHLC M1".


Все тики

final balance 10006150.00 EUR
TESTER4_Censored,M1: 6576734 ticks, 60353 bars generated. Test passed in 0:00:04.587 (including ticks preprocessing 0:00:00.343).
394 Mb memory used including 27 Mb of history data, 128 Mb of tick data


OHLC M1

final balance 10006119.00 EUR
TESTER_Censored,M1: 240366 ticks, 60353 bars generated. Test passed in 0:00:00.359 (including ticks preprocessing 0:00:00.031).
306 Mb memory used including 27 Mb of history data, 64 Mb of tick data


Качество бэктеста одинаковое, производительность второго варианта в одиночном прогоне в 12 раз выше.

 
Исторически сложилось, что для MetaTrader 4 пользуются популярностью сторонние приложения, позволяющие получать тиковую историю из различных источников. Как правило, ее используют в Тестере Стратегий как полигон для проверки советников, а также для исследований (машинное обучение и т.д.). Некоторые источники котировок в обсуждениях стали почти стандартом при поиске "грааля".
Простой пример, показывающий, что очень многие страдают ерундой при поиске рабочей ТС. В частности, любители машинного обучения.

Запускаем Оптимизацию советника (по реальным тикам) на первой неделе апреля в режиме "Все символы, выбранные в окне Обзора рынка"

#include <fxsaber\ThirdPartyTicks\Data.mqh>

input double inCommissionProcent = 0.002;
sinput bool inLog = true;
sinput int inOnTester = 0;

#define RESERVE 100000

// Потенциальный профит в относительных и абсолютных (пипсы) величинах
class MAXPROFIT : public DATA<double>
{
private:    
  bool FlagUP;
  double MinMax;

  const double MarkupAsk;  
  const double MarkupBid;

  void SetMarkup( MqlTick &Tick ) const
  {
    Tick.bid *= this.MarkupBid;
    Tick.ask *= this.MarkupAsk;
    
    return;
  }
  
  static void MathLog( MqlTick &Tick )
  {
    Tick.bid = ::MathLog(Tick.bid);
    Tick.ask = ::MathLog(Tick.ask);
    
    return;
  }
  
  double MathRelative( const double Value ) const
  {
    return(this.Relative ? ::MathExp(Value) : Value);
  }
  
public:  
  const bool Relative;
  
  MAXPROFIT( const double Commission = 0, const bool inRelative = false ) : FlagUP(true), MinMax(-DBL_MAX), Relative(inRelative),
                                                                            MarkupBid(1 - Commission), MarkupAsk(1 + Commission)
  {
  }
  
  void AddTick( MqlTick &Tick )
  {
    this.SetMarkup(Tick);
    
    if (this.Relative)
      MAXPROFIT::MathLog(Tick);
    
    if (this.FlagUP)
    {
      if (Tick.bid > this.MinMax)
        this.MinMax = Tick.bid;
      else if (Tick.ask < this.MinMax)
      {
        this.Add(this.MinMax, RESERVE);
        
        this.MinMax = Tick.ask;
        this.FlagUP = false;
      }
    }
    else
    {
      if (Tick.ask < this.MinMax)
        this.MinMax = Tick.ask;
      else if (Tick.bid > this.MinMax)
      {
        this.Add(this.MinMax, RESERVE);
        
        this.MinMax = Tick.bid;
        this.FlagUP = true;
      }
    }
    
    return;
  }
  
  double GetProfit() const
  {
    double Res = 0;
    
    const uint Size = this.GetAmount();
    
    for (uint i = 1; i < Size; i++)
      Res += this.MathRelative(::MathAbs(this.Data[i] - this.Data[i - 1]));
      
    if (Size)
      Res += this.MathRelative(::MathAbs(this.MinMax - this.Data[Size - 1]));
      
    return(Res);
  }
};

MAXPROFIT MaxProfit(inCommissionProcent / 100, inLog);

void OnTick()
{  
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    MaxProfit.AddTick(Tick);
}

double OnTester()
{  
  switch (inOnTester)
  {
  case 0:
    return(MaxProfit.Relative ? MaxProfit.GetProfit() : (int)(MaxProfit.GetProfit() / _Point + 0.1));
  case 1:
    return(MaxProfit.GetAmount());
  case 2:
    return((MaxProfit.Relative ? MaxProfit.GetProfit() : (int)(MaxProfit.GetProfit() / _Point + 0.1)) / MaxProfit.GetAmount());
  }
  
  return(0);
}


Результат

Числовой показатель - это максимально возможная прибыль на истории (с учетом комиссии).

На скрине выделен EURUSD, который взят с MQ-Demo, остальные символы - ThirdPartyTicks. Видим, что EURUSD имеет 8878.74, а его сторонняя тезка - 15134.94. Это значит, что любая ТС на EURUSD будет показывать профит меньше, чем на символе-тезке.

Выходит, что любой, кто будет проводить то же МО на MQ-Demo EURUSD упустит целый пласт возможных профитных ТС. И сильно недооценит FOREX-символ.


На самой вершине располагается GBPAUD. Его уровень говорит о том, что очень просто написать пипсаря, который в Тестере с идеальным исполнением будет показывать космос на OOS.

Иллюзию грааля разобьет не демо, т.к. демо покажет тоже отличный результат. А, конечно, реал.


В первую очередь, будет мешать комиссия, т.к. мат. ожидание пипсаря невысокое ~ 8 пипсов ( * тысячи сделок в неделю). Но, что еще хуже, будет искажать результат исполнение.

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

В случае реализации через лимитные ордера, получим отсутствие отрицательных проскальзываний (иногда будут и положительные), но обломают очень частые реджекты ордеров, когда они просто не будут исполняться. Отсюда огромное количество профитных сделок, что были бы на том же демо, просто проигнорируется. И это снова приведет к сливу. Будь это не форекс, а биржа, ситуация, конечно, была бы гораздо лучше с исполнением.


Вывод на этом простом примере, наверное, можно все же сделать. Перед написанием ТС выбирайте лучшие торговые условия (котировки) не только по источнику котировок (брокер), но и по символу. Данный советник может помочь в этом довольно наглядно. По этой методике Вы можете проверить одного брокера в MT5, а затем - другого.  И сразу понять, где и по какому символу любой ТС будет выгоднее работать.

 

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

И так понятно, что никто не тестирует на котировках демо метаквот, а на котировках того дц, где собираются торговать

И причем здесь МО до сих пор не понятно :)

 
Maxim Dmitrievsky:

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

Вроде, про тиковые ТС здесь не было речи. Малое мат. ожидание - это не пипсовка.

И так понятно, что никто не тестирует на котировках демо метаквот, а на котировках того дц, где собираются торговать

MQ-Demo было для примера. Какой аргумент при выборе ДЦ, что поиск ТС идет именно на нем?

И причем здесь МО до сих пор не понятно :)

При том, что сначала берется обоснованный иисследовательский объект, а не какой-нибудь AUDCAD от балды ДЦ.

 
fxsaber:

Вроде, про тиковые ТС здесь не было речи. Малое мат. ожидание - это не пипсовка.

MQ-Demo было для примера. Какой аргумент при выборе ДЦ, что поиск ТС идет именно на нем?

При том, что сначала берется обоснованный иисследовательский объект, а не какой-нибудь AUDCAD от балды ДЦ.

обычно по ценам открытия просто берутся стратегии, там тики вообще никак не влияют. Тогда без разницы какой дц

 
Maxim Dmitrievsky:

обычно по ценам открытия просто берутся стратегии, там тики вообще никак не влияют. Тогда без разницы какой дц

А еще можно взять H1 или лучше D1, чтобы совсем стать независимым. В общем, странные ребята.

 
fxsaber:

А еще можно взять H1 или лучше D1, чтобы совсем стать независимым. В общем, странные ребята.

ну на 1-5 минутках то норм :) можно свои ТФ придумать, тогда тики нужны хорошие, да

кстати, по вашему архиву - у них ЛП адмирал маркетс, мб есть смысл прямо от них котировки и взять, то же самое должно быть

 
Maxim Dmitrievsky:

ну на 1-5 минутках то норм :)

А где та граница, где вот до не нее "норм", а после "не норм"?