Некоторые признаки правильных ТС - страница 15

 
Nikolai Semko:

если вашей ТС для работы не нужна вся история, у меня для вас плохие новости.

Но влияние истории затухает с геометрической прогрессией в зависимости от ее глубины. Это правда.

Именно поэтому я использую логарифмическое представление истории.

Т.е. если я использую 20 летнюю историю, то ближайшая недельная история - это 80 % размера всей истории.


ЗЫ Хорошая аналогия с гравитацией. А Вы знаете что на траекторию движения нашей планеты оказывает весьма большое влияние гравитация соседней Галактики "Туманность Андромеды", до которой свет идет 2,5 млн лет?

цифры, цифры, цифры:

Земля вращается вокруг Солнца со скоростью ~30 км/сек.

Солнце вращается вокруг центра нашей Галактики ~ 230 км/сек.

Наша галактика "Млечный Путь"и галактика "Туманность Андромеды" несутся навстречу друг другу со скоростью ~ 300 км/сек

ЗЫЫ продолжение... Это еще не все

Наши галактика с соседними галактиками движутся по направлению к галактике M83 со скоростью ~ 500 км/сек

В сумме наша галактика движется во Вселенной со скоростью около 1000 км/сек.

Вы принимаете наркотики? 

 

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

Некоторые признаки правильных ТС

fxsaber, 2020.03.01 21:56

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

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

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


Сначала код инверсирования тикового ряда на MQL5.

int TimeDayOfWeek( const datetime Date )
{
  MqlDateTime mTime;
  
  TimeToStruct(Date, mTime);
  
  return(mTime.day_of_week);
}

#define HOUR 3600
#define DAY (24 * HOUR)
#define WEEK 7

// https://www.mql5.com/ru/forum/170953/page8#comment_6940794
datetime GetTimeDayOfWeek( const datetime TimeSource, const int Shift = 0, const ENUM_DAY_OF_WEEK Day = SUNDAY )
{
  const datetime Res = TimeSource / DAY * DAY;
  
  return(Res - (((WEEK + (TimeDayOfWeek(Res) - Day)) % WEEK) + Shift * WEEK) * DAY);
}

void ReverseTick( MqlTick &Tick, const long &Offset )
{
  Tick.time_msc = Offset - Tick.time_msc;
  Tick.time = (datetime)(Tick.time_msc / 1000);
  
  return;
}

// Инверсирование времени.
void ReverseTicks( MqlTick &Ticks[] )
{
  const int Size = ArraySize(Ticks);
  
  if (Size)
  {
    const long Offset = (long)(GetTimeDayOfWeek(Ticks[0].time, 0, MONDAY) + GetTimeDayOfWeek(Ticks[Size - 1].time, -1, SATURDAY)) * 1000;

    for (int i = 0; i < Size; i++)
      ReverseTick(Ticks[i], Offset);

    ArrayReverse(Ticks);
  }

  return;  
}


На основе этой функции прикреплен скрипт, который создает инверсированный символ. С ним и будем работать. Результаты такие.


Лучший проход Оптимизатора на прямом символе.


Этот же проход на инверсированном по времени символе.


Без выводов.


Данный результат пока несет только теоретический интерес. Трактовать сложно.

Код символа есть, так что попробовать свою ТС на инверсированом символе может каждый при желании.

 
Алексей Тарабанов:

Вы принимаете наркотики? 

По моим наблюдениям - это один из эдокватнейших форумян. А вы осторожно разберитесь в высказываниях.

 
Uladzimir Izerski:

По моим наблюдениям - это один из эдокватнейших форумян. А вы осторожно разберитесь в высказываниях.

Я ведь его спросил, а не Вас) 

 
fxsaber:

Данный результат пока несет только теоретический интерес. Трактовать сложно.

Код символа есть, так что попробовать свою ТС на инверсированом символе может каждый при желании.

Симметричность показала себя во красе. Так и должно быть. А мне раньше о чем то хотелось доказывать. Утерпел))

 
Алексей Тарабанов:

Я ведь его спросил, а не Вас) 

Не надо пустые и пошлые вопросы задавать. Вы только так себя дискретизируете.

 
Uladzimir Izerski:

Не надо пустые и пошлые вопросы задавать. Вы только так себя дискретизируете.

Я не в накладе. 

 
Алексей Тарабанов:

Я не в накладе. 

Дискредетируете будет правильнее. 

 
Nikolai Semko:

...

Для правильной ТС нужны правильная структура данных, база их хранения и доступа к ним.

Текущая очень громоздка и неповоротлива для создания правильных ТС.

Мне пришлось разрабатывать собственную и она оказалась, по моему мнению,  на много удобней, компактней и проворней.

Вкратце могу объяснить.

...

После этого массив тиков тоже можно удалить и из базы данных размером 30-40 Мб формируем сжатую логарифически базу данных размером до 1 Мб. В этой базе данных находится полная картина на всю многолетнюю историю символа от текущего момента. 

...

Заинтересовало "логарифмическое сжатие" базы данных. Можно поподробнее?

 
Vladimir:

Заинтересовало "логарифмическое сжатие" базы данных. Можно поподробнее?

Не совсем корректно выразился. 

Правильнее будет: "сжатие благодаря логарифмической шкале предствления данных"

все просто.

Вот распакованная структура бара в такой системе:

struct iRates {
   double    open;
   double    high;
   double    low;
   double    close;
   datetime  open_time;
   datetime  high_time;
   datetime  low_time;
   datetime  close_time;
   int       volume;
};

при этом временной период бара разный у каждого бара в массиве.

Например существует конечный массив таких баров в размере 28000.

временной период нулевого бара будет например 1 секунда.
временной период 1-го бара будет int(1.00047) = 1 секунда.
временной период 2-го бара будет int(1.00047^2) = 1 секунда.
временной период 3-го бара будет int(1.00047^3) = 1 секунда.
...
временной период 1500-го бара будет int(1.00047^1500) = 2 секунды.
...
временной период 3000-го бара будет int(1.00047^3000) = 4 секунды.
...
временной период 10000-го бара будет int(1.00047^10000) = 109 секунд = 1 минута 49 сек
...
временной период 12000-го бара будет int(1.00047^12000) = 281 секунды = 4 мн 41 сек
...
временной период 15000-го бара будет int(1.00047^15000) = 1150 секунд = 19.21 минуты
...
временной период 17000-го бара будет int(1.00047^17000) = 2945 секунды = 49 минут
...
временной период 20000-го бара будет int(1.00047^20000) = 12061 секунд =3.35 часа 
...
временной период 25000-го бара будет int(1.00047^25000) = 126404 секунды=1.46 дня
...
временной период 27999-го бара будет int(1.00047^27999) = 517331 секунды =5.99 дня


хранятся же бары в запакованном виде со средним размером около 20 байт на бар

индексные массивы для осуществления быстрого доступа занимают около 5% общего размера

т.е. общих размер такой базы данных будет 28000*20*1.05 = 588 кБ, Такой массив покрывает 40-50 лет истории.

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