Ошибки, баги, вопросы - страница 3205

 

Это да. Но вопрос в том, что это происходит именно на пике активности котировок - два раза подряд. На спокойном рынке не виснет.

Пара EUR/USD, таймфрейм М15, причем сам Макбук не завис и никаких сообщений об ошибке не было.

 


явная опечатка платежи заканчивается на И , а тут на Ы..

я даже проверил в яндексе на случай, а вдруг не знаю свой язык и оказалось я не ошибся)
 

Подскажите кто знает низкоуровневый способ, как из строки получить целое значение. 
Длина строки, не подходит. Виду возможных совпадений.
Простыми словами, необходимо в switch передать тип strin

string str = "xxxxx_xxxx";

??? x = StringToNumber(str);

switch(x) 
{ 
   case ???: 
      break; 
}

Конструкция if/else для преобразования, не рассматривается.
Нужен именно switch с быстрым доступом.

Думал строку "xxxxx_xxxx" преобразовать в бинарную строку, и из неё уже получить  Decimal значение.
Но значение получается слишком большое 568906268053835766855800
Какие возможны варианты на низком уровне?
 

 
Roman #:

Подскажите кто знает низкоуровневый способ, как из строки получить целое значение. 
Длина строки, не подходит. Виду возможных совпадений.
Простыми словами, необходимо в switch передать тип strin

Конструкция if/else для преобразования, не рассматривается.
Нужен именно switch с быстрым доступом.

Думал строку "xxxxx_xxxx" преобразовать в бинарную строку, и из неё уже получить  Decimal значение.
Но значение получается слишком большое 568906268053835766855800
Какие возможны варианты на низком уровне?
 

Чем StringToInteger не устраивает?
А вообще меняйте логику. 
Не должно быть таких затратных преобразований.
Номер в стринге должен оказаться только для вывода.
 
Roman #:

Подскажите кто знает низкоуровневый способ, как из строки получить целое значение. 
Длина строки, не подходит. Виду возможных совпадений.
Простыми словами, необходимо в switch передать тип strin

Конструкция if/else для преобразования, не рассматривается.
Нужен именно switch с быстрым доступом.

Думал строку "xxxxx_xxxx" преобразовать в бинарную строку, и из неё уже получить  Decimal значение.
Но значение получается слишком большое 568906268053835766855800
Какие возможны варианты на низком уровне?
 

Может как-нибудь так? Но я бы прогнал все варианты текста на предмет совпадений, на всякий случай...

void OnStart()
  {
   Print(StringToNumber("ABCED_ABCD"));
   Print(StringToNumber("ABCDE_ABCD"));
   Print(StringToNumber("ABDCE_ABCD"));   
  }

uint StringToNumber(const string _s)
  {
   uchar array[];
   uint h=0;

   uint n=StringToCharArray(_s, array);
   for(uint i=0; i<n; i++)
     {
      h = 31*h+array[i];
     }

   return(h/n);
  }

Добавлено: замер скорости нужен...

Вообще задумался сильно... Когда прилетает новый стакан, нужно быстро передать этот стакан "кому нужно" - классу который работает с этим символом.

У меня сейчас перебор со сравнением string.

Если преобразовать string в целое и сравнивать уже его - возможно будет быстрее. Проверю отпишу...

 
Nikolai Semko #:
Чем StringToInteger не устраивает?
А вообще меняйте логику. 
Не должно быть таких затратных преобразований.
Номер в стринге должен оказаться только для вывода.

StringToInteger преобразовывает только строку которая содержит число "12345"
Вот и ищу недорогой способ, как строку передать в switch.
Можно было ограничится if/else, но хотел уйти от этой конструкции, так как сравнение строк затратное дело.
А если конструкция  if/else  будет на 10 уровней или более, то это равно количеству сравнений, пока не встретится истина.

if(event == str1)
...
else if(event == str2)
...
и т.д.

Вот и хочу как-то избежать этих сравнений, через преобразование на низком уровне.

 
Andrey Miguzov #:

Может как-нибудь так? Но я бы прогнал все варианты текста на предмет совпадений, на всякий случай...

Добавлено: замер скорости нужен...

Вообще задумался сильно... Когда прилетает новый стакан, нужно быстро передать этот стакан "кому нужно" - классу который работает с этим символом.

У меня сейчас перебор со сравнением string.

Если преобразовать string в целое и сравнивать уже его - возможно будет быстрее. Проверю отпишу...

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

 
Andrey Miguzov #:

Если преобразовать string в целое и сравнивать уже его - возможно будет быстрее. Проверю отпишу...

Если string будет преобразован в целое, то отпадает необходимость в сравнении.
Просто используем switch, он всё раскидает.

Проверил на всех своих ключевых строках, в моём случае совпадений нет.
Занёс значения в #define, и определил в switch.
По поводу замера скорости думаю излишне, так как ключевые строки короткие и цикл по ним мгновенный.
Спасибо ещё раз, чёт не додумался просто пройтись циклом по символам.
 
zull.kzn #:
Здравствуйте. Используются объекты "График" для создания в одном графике общего экрана на 30 валютных пар. Для этого созданы синтетические недостающие инструменты. Выявилось, что по синтетическому инструменту не происходит автопрокрутка и показ новых свеч. Линия цены движется честно при этом. Загрузка ЦП не выше 20%. В данном случае формула инструмента: 1/ask(EURAUD). При изменении формулы инструмента на 1/ask("EURAUD") график актуализировался, но далее, думаю, опять будет стоять. После переоткрытия терминала актуализируется тоже. Перезагрузка сохраненного шаблона не спасает. "Обновить" также не помогает. С формулой  0-ask(EURAUD) ситуация та же. Переключение на другой аккаунт и обратно - не изменяет тоже ничего к лучшему.

Прошу разработчиков всё же обратить внимание

Пока спасает открытие графика с неким необычным тайфреймом типа М3, и попертаскивать туда всю синтетику по очереди.

Тогда и встроенные Graph'ы обновляются

 
zull.kzn #:

Прошу разработчиков всё же обратить внимание

Пока спасает открытие графика с неким необычным тайфреймом типа М3, и попертаскивать туда всю синтетику по очереди.

Тогда и встроенные Graph'ы обновляются

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