Трейдерский самообман: недоверие к форвардам. - страница 2

 
Youri Tarshecki:

 Каждый желающий может сделать простейший опыт - получить результат торгов на демосчете и прогнать эту же систему с этими же настройками в своем тестере за тот же отрезок. Т.е. получить реальный и тестово-виртуальный форвард и сравнить.

Не корректное сравнение.  В тестере стратегий используются только 4 котировки бара- открытия, закрытия, max и min. Как правило советники работают со всеми  внутрибарными котировками на демо или реал счетах. 

Youri Tarshecki:

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

Согласен. Вы видно много этим занимаетесь . Скажите пожалуйста какой финансовый инструмент Вы предпочитаете для подобного анализа. У меня есть советник который срабатывает только на открытие бара. Хочу проверить его подобным моделированием.

 

 Скажите пожалуйста какой финансовый инструмент Вы предпочитаете для подобного анализа. У меня есть советник который срабатывает только на открытие бара. Хочу проверить его подобным моделированием.

Я как раз про то, что независимо от инструмента методика тестирования  должна включать форварды. Но люди их массово игнорируют. Те же, кто их использует, оценивает, как правило  на глазок. Т.е. нет программ, которые внесли бы в оценку форвардов объективные стандарты. 
 
Youri Tarshecki:
Я как раз про то, что независимо от инструмента методика тестирования  должна включать форварды. Но люди их массово игнорируют. Те же, кто их использует, оценивает, как правило  на глазок. Т.е. нет программ, которые внесли бы в оценку форвардов объективные стандарты. 
 У разных инструментов разные свойства поведения на рынке. В том числе и "инерционность прибыльности" на форвард тесте. Поэтому и хотел спросить: а не приметили Вы инструмента (или вида инструмента)  показывающего при прочих равных условиях лучший результат в Ваших экспериментах?
 
Youri Tarshecki:
Я как раз про то, что независимо от инструмента методика тестирования  должна включать форварды. Но люди их массово игнорируют. Те же, кто их использует, оценивает, как правило  на глазок. Т.е. нет программ, которые внесли бы в оценку форвардов объективные стандарты. 

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

Рынок не меняется, просто каждая торговая система хватает лишь одно конкретное состояние рынка, а этих состояний у рынка множество.

 
Уж лучше не доверять форвардам чем доверять. А если доверять, то только если использовать WFA
 
Vasiliy Sokolov:

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

Рынок не меняется, просто каждая торговая система хватает лишь одно конкретное состояние рынка, а этих состояний у рынка множество.

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

Задача форварда -выяснить, как ведет себя советник в ситуации неоптимизированного будущего. То, о чем вы говорите -это имеет больше отношение к нахождению  наилучшего отрезка истории для оптимизации. Т.е. если вы считаете, что длительная история работает лучше, нет проблем,  заряжаем в тестер сроки 2года Бэк- 1год Форвард.  А потом 2мес Бэк -1 мес Форвард  12 раз. Если показатели форварда первого подхода лучше суммы показателей форварда второго подхода, то перевый вариант лучше, и наоборот.  Сам факт, что вы все-таки оптимизируете эксперт, говорит, что вы верите в инерционность рынка, но просто считаете, что она проявляется на существенно большом отрезке времени. Но вы же не оптимизируете на ВСЕЙ доступной истории в 30 лет, значит, вы учитываете и изменчивость рынка. Это вечное противоречие постоянства и изменчивости, но сравнивая форварды разных  периодов тестирования можно с большей точностью понять, как это противоречие разрешается в реальности. Пока вы не проверили - ваше утверждение чисто интуитивное или просто привычное.

 
Youri Tarshecki:
Предположим, я использую OnTesterPass  в составе кода советника, который тестирую. Как он узнает, что данный прогон - это выявление форварда, а не рядовые прогоны по оптимизации переменной? И даже если он сумеет это сделать, Это будут разные файлы, а нужна одна таблица для многих форвардов одного советника . А потом еще одна таблица , и еще одна для другого и все это в одном файле.

Насколько я помню, я делал так - сохранял во фрейм время первой сделки - это "баланс". Соответственно, при записи параметров и показателей всех прогонов в один файл легко отличить бэктекст от форварда по двум характерным датам. Я сохранял все прогоны именно в один файл (открывается в OnTesterInit, закрывается в OnTesterDeinit).

Подробности были здесь:

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

Работа с фреймами

Stanislav Korotky, 2014.11.07 15:23

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

OnTesterInit, OnTesterDeinit,  OnTesterPass вызываются на терминале, где запускается процесс тестирования/оптимизации и откуда раздаются задания агентам. Внутри OnTesterPass вы можете получить доступ ко всем тем фреймам, которые были добавлены в агентах тестирования с помощью FrameAdd, примерно так (выкушено из старого эксперта, может не компилиться):

void OnTesterPass()
{
  string  name;
  ulong   pass;
  long    id;
  double  value, data[];
  string  params[];
  uint    par_count;
  string  output = "";
  ushort eq = StringGetCharacter("=", 0);

  while(FrameNext(pass, name, id, value, data)) // data - массив положенный во фрейм с помощью FrameAdd
  {
    output = pass + ";" + (data[0]);
    
    for(int i = 1; i < 10; i++) output += ";" + data[i];
    
    if(FrameInputs(pass, params, par_count))
    {
      for(uint i = 0; i < par_count; i++)
      {
        string pair[];
        int n = StringSplit(params[i], eq, pair);
        if(n == 2)
        {
          long pvalue, pstart, pstep, pstop;
          bool enabled = false;
          if(ParameterGetRange(pair[0], enabled, pvalue, pstart, pstep, pstop))
          {
            if(enabled)
            {
              output += ";" + pair[1];
            }
          }
        }
      }
    }
    
    output += "\n";
    // TODO: FileWriteString(fhandle, output);
  }
}

и здесь:

 

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

Работа с фреймами

Stanislav Korotky, 2014.11.07 20:15

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

int fhandle = -1;

void OnTesterInit()
{
  // готовим каким-то образом файл, как нам нужно
  fhandle = FileOpen("tester-" + _Symbol + GetTickCount() + ".csv", FILE_WRITE|FILE_CSV|FILE_ANSI);
  FileWriteString(fhandle, "Pass;First;LR;Profit;Expected Payoff;Profit Factor;Recovery Factor;Sharpe Ratio;Custom;Equity DD %;Trades\n");
}

void OnTesterDeinit()
{
  FileClose(fhandle);
}

double OnTester()
{
  // собираем данные по эквити
  double LR = CountChannels(Equity);
  
  // конструируем собственный критерий оптимизации
  double result = MathAbs(LR) * TesterStatistics(STAT_PROFIT) * TesterStatistics(STAT_PROFIT_FACTOR) * TesterStatistics(STAT_TRADES) * (100 - TesterStatistics(STAT_EQUITY_DDREL_PERCENT));

  // рассчитываем еще какие-то данные
  //...

  // складываем все в массив
  double data[10];
  // data[0] = first;
  // data[1] = LR;
  // data[2] = TesterStatistics(STAT_PROFIT);
  // ...
  // data[7] = result;
  // ...
  // data[9] = ...

  // отправляем данные в терминал
  if(!FrameAdd(MQL5InfoString(MQL5_PROGRAM_NAME), 1, LR, data))
    Print("Frame add error: ", GetLastError());
  else
    Print("Frame added, Ok");

  return(result);
}

 

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

Для 15 минуток я делал оптимизацию, отсеивал ненужные результаты, а оставшиеся 5-10 сохранял в сет и прогонял на истории до момента оптимизации - и по графику выбирал лучшие.

Так же думал о процессе автоматизации этих действий...

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

 
-Aleks-:

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

Для 15 минуток я делал оптимизацию, отсеивал ненужные результаты, а оставшиеся 5-10 сохранял в сет и прогонял на истории до момента оптимизации - и по графику выбирал лучшие.

Так же думал о процессе автоматизации этих действий...

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

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