Автор Тема: TradeStation 9.1 build 12880 (Update 29) + QuoteRoom  (Прочитано 50971 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dim618

  • Сообщений: 19
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #230 : 30 Октября 2024, 13:58:07 »
Код сложный и трудно ремонтируемый, найти ошибку с налёту не получится! По своему опыту, в больших кодах не всегда вылетает ошибка деления на нуль, TS продолжает расчёт, т.е. необходимопроверить все операции деления на переменную и возможность этой переменной принимать нулевые значения.По оформлению кода, некоторые заметки...

**********************************************
было:
If (Year(Date[1]) = 01 and Year(Date) = 25) or
(Year(Date[1]) = 26 and Year(Date) = 50) or
(Year(Date[1]) = 51 and Year(Date) = 75) or
(Year(Date[1]) = 76 and Year(Date) = 100) or
(Year(Date[1]) = 101 and Year(Date) = 125) or
(Year(Date[1]) = 126 and Year(Date) = 150) or
(Year(Date[1]) = 151 and Year(Date) = 175) then begin ShY25 = ShY25 + 1; TrYYY25 = -1*TrYYY25; End;


стало: понятнее и ремонтопригоднее, но ещё понятнее будет оформить этот код в метод с понятным названием:


YYBgn = 25;
YYLen = 10;
For Value0 = 1 To YYLen Begin
   If Year(Date[1]) = YYBgn * (Value0 - 1) + 1 and Year(Date) = YYBgn * Value0
   Then Begin
      ShY25   = ShY25 + 1;
      TrYYY25 = -1*TrYYY25;
      Break;
   End;
End;

{
   проверка логики
   If Year(Date[1]) = 25 * (1 - 1) + 1 and Year(Date) = 25 * 1
   If Year(Date[1]) = 25 * (2 - 1) + 1 and Year(Date) = 25 * 2
   If Year(Date[1]) = 25 * (3 - 1) + 1 and Year(Date) = 25 * 3
}
**********************************************

было
If (Year(Date[1]) = 04 and Year(Date) = 05) or(Year(Date[1]) = 09 and Year(Date) = 10) or
(Year(Date[1]) = 14 and Year(Date) = 15) or
(Year(Date[1]) = 19 and Year(Date) = 20) or
(Year(Date[1]) = 24 and Year(Date) = 25) or
(Year(Date[1]) = 29 and Year(Date) = 30) or
(Year(Date[1]) = 34 and Year(Date) = 35) or
(Year(Date[1]) = 39 and Year(Date) = 40) or
(Year(Date[1]) = 44 and Year(Date) = 45) or
(Year(Date[1]) = 49 and Year(Date) = 50) or
(Year(Date[1]) = 54 and Year(Date) = 55) or
(Year(Date[1]) = 59 and Year(Date) = 60) or
(Year(Date[1]) = 64 and Year(Date) = 65) or
(Year(Date[1]) = 69 and Year(Date) = 70) or
(Year(Date[1]) = 74 and Year(Date) = 75) or
(Year(Date[1]) = 79 and Year(Date) = 80) or
(Year(Date[1]) = 84 and Year(Date) = 85) or
(Year(Date[1]) = 89 and Year(Date) = 90) or
(Year(Date[1]) = 94 and Year(Date) = 95) or
(Year(Date[1]) = 99 and Year(Date) = 100) or
(Year(Date[1]) = 104 and Year(Date) = 105) or
(Year(Date[1]) = 109 and Year(Date) = 110) or
(Year(Date[1]) = 114 and Year(Date) = 115) or
(Year(Date[1]) = 119 and Year(Date) = 120) or
(Year(Date[1]) = 124 and Year(Date) = 125) or
(Year(Date[1]) = 129 and Year(Date) = 130) or
(Year(Date[1]) = 134 and Year(Date) = 135) or
(Year(Date[1]) = 139 and Year(Date) = 140) or
(Year(Date[1]) = 144 and Year(Date) = 145) or
(Year(Date[1]) = 149 and Year(Date) = 150) or
(Year(Date[1]) = 154 and Year(Date) = 155) or
(Year(Date[1]) = 159 and Year(Date) = 160) or
(Year(Date[1]) = 164 and Year(Date) = 165) or
(Year(Date[1]) = 169 and Year(Date) = 170) or
(Year(Date[1]) = 174 and Year(Date) = 175) or
(Year(Date[1]) = 179 and Year(Date) = 180) or
(Year(Date[1]) = 184 and Year(Date) = 185) or
(Year(Date[1]) = 189 and Year(Date) = 190) or
(Year(Date[1]) = 194 and Year(Date) = 195) or
(Year(Date[1]) = 199 and Year(Date) = 200) or
(Year(Date[1]) = 204 and Year(Date) = 205) or
(Year(Date[1]) = 209 and Year(Date) = 210) or
(Year(Date[1]) = 214 and Year(Date) = 215) or
(Year(Date[1]) = 219 and Year(Date) = 220) or
(Year(Date[1]) = 224 and Year(Date) = 225) then begin ShY5 = ShY5 + 1; TrYYY5 = -1*TrYYY5; End;


стало: понятнее и ремонтопригоднее, но ещё понятнее будет оформить этот код в метод с понятным названием:


YYBgn = 04;
YYLen = 10;
For Value0 = 1 To YYLen Begin
   If Year(Date[1]) = YYBgn * Value0 + (Value0 - 1) and Year(Date) = YYBgn * Value0 + Value0
   Then Begin
      ShY5 = ShY5 + 1;
      TrYYY5 = -1*TrYYY5;
      Break;
   End;
End;

{
   проверка логики
   If Year(Date[1]) = YYBgn * 1 + (1 - 1) and Year(Date) = YYBgn * 1 + 1
   If Year(Date[1]) = YYBgn * 2 + (2 - 1) and Year(Date) = YYBgn * 2 + 2
   If Year(Date[1]) = YYBgn * 3 + (3 - 1) and Year(Date) = YYBgn * 3 + 3
}

************************************************************




If DataCompression = 4
then begin
   Sh1 = ShY5;
   Sh2 = ShY;
   Sh3 = ShQ;
   Tr1 = TrYYY5;
   Tr2 = TrYYY;
   Tr3 = TrQ;
End Else

If DataCompression = 3
then begin
   Sh1 = ShY;
   Sh2 = ShQ;
   Sh3 = ShM;
   Tr1 = TrYYY;
   Tr2 = TrQ;
   Tr3 = TrM;
End Else

If DataCompression = 2
then begin
   Sh1 = ShQ;
   Sh2 = ShM;
   Sh3 = ShW;
   Tr1 = TrQ;
   Tr2 = TrM;
   Tr3 = TrW;
End Else

If DataCompression < 2
then begin
   If BarInterval = 1439 or
      BarInterval = 720
   then begin
      Sh1 = ShQ;
      Sh2 = ShM;
      Sh3 = ShW;
      Tr1 = TrQ;
      Tr2 = TrM;
      Tr3 = TrW;
   End Else

   If BarInterval = 480 or
      BarInterval = 360 or
      BarInterval = 288 or
      BarInterval = 240 or
      BarInterval = 180 or
      BarInterval = 160 or
      BarInterval = 144 or
      BarInterval = 120 or
      BarInterval = 96 or
      BarInterval = 90
   then begin
      Sh1 = ShM;
      Sh2 = ShW;
      Sh3 = ShD;
      Tr1 = TrM;
      Tr2 = TrW;
      Tr3 = TrD;
      Glub3 = GlD;
   End Else

   If BarInterval = 80 or
      BarInterval = 60 or
      BarInterval = 48 or
      BarInterval = 40 or
      BarInterval = 30 or
      BarInterval = 24
   then begin
      Sh1 = ShW;
      Sh2 = ShD;
      Sh3 = Sh240;
      Tr1 = TrW;
      Tr2 = TrD;
      Tr3 = Tr240;
      Glub3 = Gl240;
   End Else

   If BarInterval = 20 or
      BarInterval = 15 or
      BarInterval = 12 or
      BarInterval = 10 or
      BarInterval = 6 
   then begin
      Sh1 = ShD;
      Sh2 = Sh240;
      Sh3 = Sh60;
      Tr1 = TrD;
      Tr2 = Tr240;
      Tr3 = Tr60;
      Glub3 = Gl60;
   End;

   If BarInterval = 5 then begin Sh1 = Sh240; Sh2 = Sh60;  Sh3 = Sh15;  Tr1 = Tr240; Tr2 = Tr60;  Tr3 = Tr15; Glub3 = Gl15; End;
   If BarInterval = 3 then begin Sh1 = Sh240; Sh2 = Sh60;  Sh3 = Sh15;  Tr1 = Tr240; Tr2 = Tr60;  Tr3 = Tr15; Glub3 = Gl15; End;
   If BarInterval = 2 then begin Sh1 = Sh240; Sh2 = Sh60;  Sh3 = Sh10;  Tr1 = Tr240; Tr2 = Tr60;  Tr3 = Tr10; Glub3 = Gl10; End;
   If BarInterval = 1 then begin Sh1 = Sh60;  Sh2 = Sh15;  Sh3 = Sh5;   Tr1 = Tr60;  Tr2 = Tr15;  Tr3 = Tr5;  Glub3 = Gl5;  End;
End;


Логические узлы разделены "Else", с целью ускорения расчёта и его понятности...
В представленном куске кода, ошибку не нашёл...







Для чего это всё делается - понятно...
"Индикаторы или исчезают или неправильно работают?" - это по отдельности! "Исчезают?" или "Неправильно работают?".
Если исчезают, то это одна проблема, а если неправильно работают, то это другая и тут надо смотреть, как в коде реализована логика вычисления старшей компрессии: при помощи массивов, векторов, словарей или PriceSeriesProvider. Хотя судя по части кода, всё намного "хитрее" :) Без рефакторинга это творение пока не понятно))


В одних индикаторах, построенные скользящие - либо исчезают, либо строится их фрагмент, оборванный дней 100 назад (не помню точно) - это "исчезают".

Но есть индикатор, который "неправильно работает" - и он меня беспокоит больше всего.

Если для скользящих я построил эквиваленты (худшего качества), то неправильно работающий пришлось просто отключить.


Станислав, прекрасно!

Да, конечно, так проще и лаконичнее.
Но когда я писал код, мне важно было всё видеть в явном виде. А потом - переделывать и упрощать было неохота. (Копи-паст работающий блок в следующий индикатор - и точка.)))


Меня удивляет (я снова повторю), что полный снос и установка TS9.1 заново, и замена всей папки Tradestation9.1 на диске С из заархивированной работающей полностью исправно резервной копии - не исправило ситуацию!!!

Вот это удивительно!!!

Получается, поломка вышла за пределы директорий Tradestation 9.1  и поселилась где-то в самой Виндоус 7 64 !!!

Чувствую, мне нужно будет сносить всю Винду и всё устанавливать заново!!!

Либо изменить ProSuite2000i, как это объяснено в соответствующей ветке - и вернуться в неё...

Мистика какая-то...

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 183
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #231 : 30 Октября 2024, 14:15:33 »
Попробуйте сначала на чистую виртуальную машину поставить TS и проверить работу индикатора, так проще будет, чтоб с системой не возиться..


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




Для чего это всё делается - понятно...
"Индикаторы или исчезают или неправильно работают?" - это по отдельности! "Исчезают?" или "Неправильно работают?".
Если исчезают, то это одна проблема, а если неправильно работают, то это другая и тут надо смотреть, как в коде реализована логика вычисления старшей компрессии: при помощи массивов, векторов, словарей или PriceSeriesProvider. Хотя судя по части кода, всё намного "хитрее" :) Без рефакторинга это творение пока не понятно))


В одних индикаторах, построенные скользящие - либо исчезают, либо строится их фрагмент, оборванный дней 100 назад (не помню точно) - это "исчезают".

Но есть индикатор, который "неправильно работает" - и он меня беспокоит больше всего.

Если для скользящих я построил эквиваленты (худшего качества), то неправильно работающий пришлось просто отключить.


Станислав, прекрасно!

Да, конечно, так проще и лаконичнее.
Но когда я писал код, мне важно было всё видеть в явном виде. А потом - переделывать и упрощать было неохота. (Копи-паст работающий блок в следующий индикатор - и точка.)))


Меня удивляет (я снова повторю), что полный снос и установка TS9.1 заново, и замена всей папки Tradestation9.1 на диске С из заархивированной работающей полностью исправно резервной копии - не исправило ситуацию!!!

Вот это удивительно!!!

Получается, поломка вышла за пределы директорий Tradestation 9.1  и поселилась где-то в самой Виндоус 7 64 !!!

Чувствую, мне нужно будет сносить всю Винду и всё устанавливать заново!!!

Либо изменить ProSuite2000i, как это объяснено в соответствующей ветке - и вернуться в неё...

Мистика какая-то...

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 183
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #232 : 30 Октября 2024, 14:18:07 »
А можно попробовать на одной виртуальной машине поставить TS и проверить работу индикатора, а на другой ProSuite2000i и проверить работу индикатора...
Попробуйте сначала на чистую виртуальную машину поставить TS и проверить работу индикатора, так проще будет, чтоб с системой не возиться..

Оффлайн dim618

  • Сообщений: 19
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #233 : 30 Октября 2024, 15:06:55 »
А можно попробовать на одной виртуальной машине поставить TS и проверить работу индикатора, а на другой ProSuite2000i и проверить работу индикатора...
Попробуйте сначала на чистую виртуальную машину поставить TS и проверить работу индикатора, так проще будет, чтоб с системой не возиться..


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

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

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 183
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #234 : 30 Октября 2024, 15:54:19 »
отправил в личку..

А можно попробовать на одной виртуальной машине поставить TS и проверить работу индикатора, а на другой ProSuite2000i и проверить работу индикатора...
Попробуйте сначала на чистую виртуальную машину поставить TS и проверить работу индикатора, так проще будет, чтоб с системой не возиться..


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

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

Оффлайн stividor

  • Участник клуба
  • *
  • Сообщений: 32
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #235 : 31 Октября 2024, 03:34:32 »
Вопрос на всякий случай: посмотрите, windows в свои логи ничего (ошибки) не пишет?

Оффлайн dim618

  • Сообщений: 19
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #236 : 31 Октября 2024, 07:16:34 »
Вопрос на всякий случай: посмотрите, windows в свои логи ничего (ошибки) не пишет?


Спасибо.

Подскажите, пожалуйста, где это смотреть?

Оффлайн stividor

  • Участник клуба
  • *
  • Сообщений: 32
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #237 : 31 Октября 2024, 09:01:18 »
Панель управления -> Администрирование-> Журналы Windows -> Система и Приложение

Оффлайн dim618

  • Сообщений: 19
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #238 : 31 Октября 2024, 09:30:46 »
Панель управления -> Администрирование-> Журналы Windows -> Система и Приложение


Спасибо.

В Приложениях за понедельник, на время моего вмешательства в индикатор, ошибок нет. Есть раньше и позже (но тоже в понедельник) : Источник WMI Код события 10

В Системе тоже нет ошибки в этот период времени. Ближайшие ошибки (но тоже в понедельник) : Schannel 36887, Application Popup 1060 и Предупреждение Kernel-PnP 219

Оффлайн stividor

  • Участник клуба
  • *
  • Сообщений: 32
    • Просмотр профиля
TradeStation 9.1 build 12880 (Update 29) + QuoteRoom
« Ответ #239 : 31 Октября 2024, 09:39:26 »
Ну если прямых указаний на ошибки TS нет, то и нет конфликта с системой. У меня были "заморочки" с Multicharts и Win 10, а проблема появилась внезапно.