Только не говорите потом, что ТА не работает - страница 24

 

В общем можно сказать, что секрет подгонки ТС на перцептронах раскрыт:


Пусть мы имеем три соседних участка исторических данных: A, B, C

Если у нас подгонка проводится на B и С, а OOS на A, то ложные сигналы отсекаются фильтром: PerceptronA = signum(signum(PerceptronB) + signum(PerceptronC))

Если у нас подгонка проводится на A и B, а OOS на C, то ложные сигналы отсекаются фильтром: PerceptronC = signum(signum(PerceptronA) - signum(PerceptronB))


Здесь имеют место законы арифметики, т.е.: если A = B + C, то: C = A - B


где:

signum(x) - сигнум функция, т.е. ее значение равно в зависимости от аргумента:

signum(x) = 0, если x = 0

signum(x) = 1, если x > 0

signum(x) = -1, если x < 0

Т.е. торговые сигналы для успешного теста на OOS в прошлом должны быть согласованы, а для успешного OOS в будущем - рассогласованы.


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

 

Очень здорово !

Пусть мы имеем три соседних участка исторических данных: A, B, C и будущий участок D

Если у нас подгонка проводится на B и С, тогда

1. для получения прибыли на участке А мы должны открываться, когда B- и C-сигналы согласованы,

2. а для получения прибыли на участке D мы должны открываться, когда B- и C -сигналы рассогласованы.


Что это за хрень, т. Решетов ? Вот реализация алгоритма открытия/закрытия позиций:

//************************************************************          
void T_SetSignales(int PASS, bool& BUY_Sign, bool& BUY_Stop, bool& SELL_Sign, bool& SELL_Stop, int& LastBar )  
  {      
   BUY_Sign  = false;
   BUY_Stop  = false;
   SELL_Sign = false;
   SELL_Stop = false;
   
   int P1 = perceptron1();
   int P2 = perceptron2();
   
  switch(PASS)
   {
    case 1 : if (P1 > 0)      {BUY_Sign  = true; SELL_Stop = true;} 
                   else               {SELL_Sign = true; BUY_Stop  = true;}  break;
    case 2 : if (P2 > 0)      {BUY_Sign  = true; SELL_Stop = true;} 
                   else               {SELL_Sign = true; BUY_Stop  = true;}  break;
    case 3 : if (  (P1 + P2)  > 0)     {BUY_Sign  = true; SELL_Stop = true;} 
             if       (  (P1 + P2)  < 0)     {SELL_Sign = true; BUY_Stop  = true;}
             if         (  P1 > 0 &&  P2 < 0)  {SELL_Stop = true; BUY_Stop  = true;}
             if         (  P1 < 0 &&  P2 > 0)  {SELL_Stop = true; BUY_Stop  = true;}
             break; 
   }  // switch(PASS)
   return;  
  } //  void SetSignales ()       
//************************************************************          

Если вас не затруднит, поправьте.
 

Юрий Васильевич, хотелось бы обратить ваше внимание, что история самого последнего/правого интервала подгонки-оптимизации

не учитывается в вашей программе автоматизации подгонки-оптимизации.

Если я в 23 часа сегодня готовлю программу gold_dust для работы с начала следующего дня, то для Н1 пропадают 23 бара.

 

more:

Юрий Васильевич, хотелось бы обратить ваше внимание, что история самого последнего/правого интервала подгонки-оптимизации

не учитывается в вашей программе автоматизации подгонки-оптимизации.

Если я в 23 часа сегодня готовлю программу gold_dust для работы с начала следующего дня, то для Н1 пропадают 23 бара.



1. Не Васильевич, а Вячеславович

2. Не в моей программе, а в тестере стратегий MT4

 
Reshetov:

1. Не Васильевич, а Вячеславович

2. Не в моей программе, а в тестере стратегий MT4

1. Извиняюсь, за опечатку.

2. Всякий раз, когда вы загружаете на выполнение терминал МТ4, ведь это вы задаете для тестера стратегий самую правую дату интервала равной текущей дате,

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

тогда текущий день войдет в интервал тестирования.

 
Farnsworth:Проверьте на случайность получаемые новые графики профитности.
А вот с этого момента, пожалуйста, поподробнее, Сергей. Что надо проверять и на какую случайность?
 
Mathemat:
А вот с этого момента, пожалуйста, поподробнее, Сергей. Что надо проверять и на какую случайность?
Вот я тоже как-то заинтересовался, но постеснялся спросить))) (чтоб дурнем не показаться:)))
 
Mathemat:
А вот с этого момента, пожалуйста, поподробнее, Сергей. Что надо проверять и на какую случайность?

оно конечно может и глупость сказал, я же не математик, а только учусь :о) Рассуждаю так, что такое торговля? Можно дать кучу определений, но одно из них, к примеру, может быть таким - это процесс трансформации "котировочной кривой" в "кривую депозита". Ведь понятно, что судить о качестве процесса торговли можно по кривой депозита (или баланса). Идеальный торговый процесс преобразует кривую котировки в идеальную положительно наклоненную прямую баланса.

Для наглядности, (правда без разрешения) позаимствовал у more кривую баланса:

Если я например инвестор или трейдер, и думаю купить/доверить/проверить конкретную торговую систему, другими словами сделать некую объективную оценку самому процессу торговли, то наверное найдется масса вариантов это выполнить. Я просто пытаюсь исследовать полученную кривую на предмет случайности результата. Ведь то, что сейчас получен положительный баланс средств на самом деле ничего не говорит.

Для исследования временного ряда кривой баланса использую следующее:

  • критерии тренда и случайности (ранговый, серии, инверсии, критерий автокорреляции и т.д. их много)
  • фрактальный анализ

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

PS: вот сомнения у меня глядя на такую кривульку. Уж больно она кривая :о)

Дописка

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

 

Сегодня нашел интересную особенность у советника, который в GD2. Оказывается в будущем нужно торговать не в 3-ем режиме (pass = 3), а в 1-м или во 2-м

Берем этого самого советника и историю за 12 месяцев, т.е. год. Делим историю на 4 части по 3 месяца: I, II, III и IV кварталы.

I и IV кварталы - это OOS, II и III - Samples

1 этап. Сначала находим оптимальные значения p и sl, т.е. выставляем даты за II и III квартал, выставляем галки на первый перцептрон x11, x21, x31, x41, а также галки на p и sl. Режим pass = 1. Оптимизируем и выставляем лучший результат.

2 этап. Выставляем даты на II квартал, убираем галки с p и sl и оптимизируем настройки первого перцептрона. Выставляем в настройках лучший результат.

3 этап. Выставляем даты на III квартал, убираем галки с x11, x21, x31, x41, выставляем для x12, x22, x32, x42, pass = 2 и оптимизируем настройки второго перцептрона. Выставляем в настройках лучший результат.

4 этап. Включаем pass = 3, выставляем даты на I квартал и прогоняем тест. Если тест прошел успешно, значит, как минимум один из перцептронов будет робастным.

Т.е. все вышеприведенные этапы как в методике GD2

5 этап. Выставляем даты на IV квартал, pass = 1. Прогоняем тест.

6 этап. Выставляем даты на IV квартал, pass = 2. Прогоняем тест.

Как минимум один из тестов в пп. 5 или пп. 6 должен быть успешным.

Но мы прогнали тесты на будущем, т.е. IV квартале, так сказать для проверки. А GD гоняет все в прошлом, т.е. первые 3 квартала. Как узнать, в каком режиме pass = 1 или pass = 2 результат будет лучше? Выставляем даты за 3 первых квартала и прогоняем сначала в режиме 1, потом в режиме 2. Смотрим, где за все 9 месяцев показатели лучше, тот режим и является наиболее робастным.

 
Farnsworth:

Для исследования временного ряда кривой баланса использую следующее:

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

Это почему же так жестко (я о выделенном синеньким)? Тебе не кажется, что таким образом ты можешь отбраковать неплохую систему? Ну да, понимаю: ты, похоже, перфекционист-экстремал...

imho, последовательность сделок, выраженная в виде "успех-неудача", в подавляющем большинстве случаев - это бернуллиевский процесс. И как же оттуда случайность убрать?

Причина обращения: