Владимир (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 31 32 33 34 35 36 37 38 39 40 41
Роботы всякие и прочие глупости
 
Не-а, не получу! За каким хреном мне нужна эта getSecurityInfo? Я вот сейчас получил ПОЛНЫЙ список ВСЕХ инструментов и их классов для Санкт-Петербургской биржи, получилось 24823 инструмента 26 различных классов, заняло это секунд 30 - меньше, чем я этот коммент набиваю и НЕСОИЗМЕРИМО меньше, чем писать этот сраный "код" для их получения! И никаких "nil", никаких кодов, никаких проблем! Я уже спрашивал в этой ветке:вам что, заняться больше нечем?
Роботы всякие и прочие глупости
 
Александр, Я разве сказал хоть полслова про код? Я сказал про ГОТОВЫЙ СПИСОК!  :wink: И открою Вам страшную тайну: для его получения вообще не требуется никакого кода!
Роботы всякие и прочие глупости
 
Александр,Вам привести полный список всех классов и инструментов, чтобы не мучиться?  :smile: Правда, я не собираюсь ковыряться нигде, кроме Сбера и ВТБ, да и облигации и прочее дерьмо меня не интересует - только акции. Лично я своим ПЕРВЫМ В ЖИЗНИ скриптом на Lua как раз проверил актуальность данных по классам и инструментам (при этом в Сбере из более двух сотен осталось менее одной, в в ВТБ из более полутора тысяч осталось менее полутора). Но если Вы не способны получить ДАЖЕ ЭТОГО, то стоит ли Вам вообще программировать?
Роботы всякие и прочие глупости
 
Александр, Это не "клиника" - это называется "истерика". А фраза классическая, её явно не одна тысяча лет. Вот навскидку из Инета:

Чтобы опровергнуть общее утверждение надо найти всего лишь один частный случай, его опровергающий. К примеру, если мне сейчас кто-то скажет, что своими глазами видел вчера на улице серо-буро-малинового щенка в крупную фиолетовую крапинку, моё утверждение "все щенки зелёные" немедленно теряет весь свой смысл.
Цена последней сделки
 
Георгий, Ну, я ведь тоже меньше недели как столкнулся с Lua...  :smile: А реализуется это обычным присвоением, насколько я понимаю. Только мне вот не нужна  цена последней совершенной мною сделки - совершил и забыл!.  
Роботы всякие и прочие глупости
 
Дмитрий, Угу. Только и эта проверка ничего не гарантирует.
Роботы всякие и прочие глупости
 
Александр,

Общее утверждение опровергается частным(с). Повторяю: я - профессиональный алгоритмист. Опровергните меня!  :wink:

О, Господи! Ну неохота мне разбирать, где API, а где язык! Хотя это и элементарно: если API невозможно реализовать средствами языка - значит, это язык. Ну, хорошо, переформулирую: КАК ИМЕННО Вы будете контролировать актуальность данных даже на ИДЕАЛЬНОМ API? Не знаете? А что же тогда докопались до разработчиков?

Цитата
Александр написал:
Цитата
По-моему вы ничего не понимаете.
Ага, не понимаю, Только вот перечень всех инструментов и классов я получил МГНОВЕННО, без всяких дурацких "колбеков OnSecurity, OnClass". Причём сразу от двух брокеров. А вы, "понимающие", за эти ГОДЫ так и не научились этого делать?  :smile:  
Цена последней сделки
 
Георгий, У себя В СКРИПТЕ я имел в виду.  
Роботы всякие и прочие глупости
 
Александр,Какое дело РАЗРАБОТЧИКАМ, что неверные данные приходят ОТ БРОКЕРА?! Вот режь меня, жги меня - НЕ ПОНИМАЮ!  :smile:  
Роботы всякие и прочие глупости
 
Александр, Я "пилю скрипты" всего лишь неделю, но ответа на Ваши "вопросы" знал за много лет до того, как вы их задали. Это АЛГОРИТМИЧЕСКИ невозможно! Просто представьте, что Вы имеете ИДЕАЛЬНЫЙ язык, который обеспечивает Вам всё, что душе угодно! КАК ИМЕННО Вы будете контролировать актуальность данных даже на ИДЕАЛЬНОМ языке (или там API)? Не знаете? А что же тогда докопались до Lua?  :wink:

Что такое API, я знаю не хуже вас. Если поставляются неверные данные, то какое до этого дело терминалу? А если сам терминал их портит, то это уже к доктору...  :smile:

ОЙ, БЛИН!!! Так Вы берёте данные не их Квика, а получаете их каким-то "параллельным" способом?! Вам что, заняться больше нечем? НАКОЙХЕР Вам этот "isConnected"?! Лично мне ПЛЕВАТЬ, сразу символы загружаются или постепенно - я беру ГОТОВЫЕ данные, УЖЕ загруженные, и не парюсь, чего и Вам желаю. Кстати, пока что прекрасно обходился и без колбеков - надеюсь, они мне также никогда не понадобятся - идиотская философия, которая в "древнем" С прекрасно реализуется через указатели на функцию.

С таблицей всех сделок лично мне ВАЩЕ НИЧЕГО не понятно! На кой она нужна? Это ВАШИ сделки или НЕ Ваши? Если Ваши - храните их У СЕБЯ, а если нет - какое Вам до них дело?

Проблема актуальности данных в терминале НЕ является насущной. Так что если вы не в теме, то лучше пройдите. :kiss:  
Цена последней сделки
 
Я-то всегда полагал, что лучше помнить где-то у себя...  :smile:  
Цена последней сделки
 
ОЙ! Совершённой ВАМИ?! А Вы что, её не знаете? :)
Цена последней сделки
 
TABLE getParamEx (STRING class_code, STRING sec_code, STRING param_name)
param_name должен быть установлен в "LAST"
Роботы всякие и прочие глупости
 
Александр,Простите, а вы ЧИТАЛИ, что он писал? Там нет НИ ЗВУКА про API, и даже я ему открытым текстом говорил, что НИЧТО не может обеспечить достоверность данных В ПРИНЦИПЕ! В том числе, ЛЮБАЯ утилита такой проверки! Это тупо НЕВОЗМОЖНО! Вот меня язык удовлетворяет далеко не полностью, но предъявлять претензии разработчикам, что "у косого брокера на букву Ф опять понос и посреди дня он медленно и печально начал перезагружать всю историю с 1812 года" просто нечистоплотно! ДА КАКОЕ ИХ СВИНЯЧЬЕ ДЕЛО?! Меняйте БРОКЕРА и отчепитесь от языка! Вот это будет вполне конструктивно!  :smile:  
Роботы всякие и прочие глупости
 
Александр,Михаилу нужно обеспечить достоверность ДАННЫХ, а претензии он предъявляет К ЯЗЫКУ! НУ ЧТО, ЧТО, ЧТО здесь может быть "конструктивного"? Тем более, что ответ ему был дан В ПЕРВОМ ЖЕ комментарии! Вот тот комментарий - конструктивный!
Роботы всякие и прочие глупости
 
s_mike@rambler.ru, Сударь, ЭТО Я Вам "два раза уже намекал, что вы не программист и не даже понимаете суть вопроса". А я - профессиональный алгоритмист, 40 лет программистом, системщик, даже был включён когда-то в соавторы бортовой операционки - лет 10-15 денюшку вполне неплохую платили (по российским меркам, конечно). А Вам уже разработчики практически открытым текстом говорили, чтобы Вы не мусорили тему.  :wink:  
Роботы всякие и прочие глупости
 
s_mike@rambler.ru, Нет тут никакого кролика. Нет, И БЫТЬ НЕ МОЖЕТ! Никакой робот В ПРИНЦИПЕ не может быть ни в чём уверен. Я не интересовался, но, думаю, дата/время поступления данных с сервера где-то должны присутствовать - можно контролировать по ним.

А насчёт актуальности... где-то около часа назад я купил акции GTX (без робота, просто ручками в Квике). При этом я знал, что акции эти бурно росли (более 100% за последние пару дней), знал, что покупаю дорого, и купил просто так, "для затравки", чтобы были в портфеле, по $3.02. Минут через 10-15 гляжу - БАБАХ! А они уже по $1.55! Я с перепугу купил ещё 4 раза по столько, минут через 5 - БАБАХ! А они уже по $2.77! Ну какой же робот в здравом уме и трезвой памяти поверит, что подобные данные актуальны? А я вот "без комплексов" КУПИЛ и ПРОДАЛ! Так что данные оказались актуальными "по факту".  :smile: Короче говоря, я бы на Вашем месте не надеялся не только на "более-менее развернутый", а вообще на ответ. Его там нет, и быть не может.
Роботы всякие и прочие глупости
 
s_mike@rambler.ru, Что-то я вообще ничего не понял...

1. При чём тут, собственно, робот? Представим, что никакого робота нет. Данные приходят в Квик, заполняют соответствующие таблицы, народ смотрит на эти данные и как-то там торгует, "вручную". Робот берёт ТЕ ЖЕ САМЫЕ данные, так чем актуальность данных робота отличается от актуальности данных самого Квика?

2. Вне зависимости от того, кто принимает решение, человек или робот, в заявке на сделку указывается совершенно конкретная цена покупки или продажи, и она НИКАК не зависит от того, сколько там свечей пропущено и каких именно.

3. Если Вы не уверены, что "данные отражают текущее или почти текущее состояние торгов", то как Вы можете быть уверены, что результаты вашей "проверки" (ЛЮБЫМ способом!) дадут Вам такие гарантии?

4. Какая разница, когда запущен терминал и когда робот? Если даже соединение вообще не было установлено, Вы всё равно будете получать какие-то данные (хотя бы нули), а если данные терминала более-менее нормально обновляются (это видно хотя бы по нижней строчке Квика, где тикают часики и работает счётчик полученных записей) то и робот Ваш будет получать более-менее актуальные данные - при чём здесь вообще Lua?

5. Сам я ПРОБОВАЛ "что то писать на луа", хотя с самим языком столкнулся впервые где-то неделю назад. Два мои скрипта работают вполне удовлетворительно (один тестовый, один "боевой", который я "вот прям ща" потихоньку довожу до ума). И мне АБСОЛЮТНО по барабану, насколько там "косой брокер на букву Ф" - ведь я-то сам, надеюсь, не косой программист!  :smile:  
Как прочитать таблицу Текущие торги?
 
В документации на lua указан только тип number, а он принимает значения с плавающей точкой. Иными словами это тип real (float, double) в других языках программирования, но никак не integer.

А что толку мне от флагов терминала? Мне нужен целочисленный тип ДЛЯ СВОИХ данных!  :smile:

Да я решил уже все проблемы с терминалом, спасибо. На досуге попробую проверить, есть ли хотя бы теоретическая возможность программирования данными -- и всё (та сама loadstring). Ну, нет массивов, нет масок - придётся обходиться без них.
Как прочитать таблицу Текущие торги?
 
Ах, чёрт! А я надеялся, что ваша... ибо убрать тип integer из языка, на мой взгляд, есть самая большая дурость. Ладно, бог с ним, с никому не нужным boolean - пусть будет, если нравится, но с целочисленными переменными я за долгие годы программирования (а я уже пенсионер!) работал раз в 10 чаще, чем с вещественными! Если не во все сто...

Пример... ну, вот набросок, как я написал бы это дело на C (предполагаем, что это обработчик прерываний по таймеру или по совершению сделки (чтобы не опрашивать все тикеры по таймеру):

int iPer; // индекс текущего периода расчета
int iData; // счётчик прерываний
double Course; // последнее значение курса соответствующего тикера

static UI16 MaskPer[] = // маски свечей по периодам
{ 0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF };

for (_iData = 1;;_iData++) // цикл приёма внешних данных от QUIK
{ // (текущие значения инструментов)
 Course = ReadValue (); // новое значение курса для выбранного тикера
 for (iPer = 0; iPer < N_PER; iPer++)
 { // цикл набора статистики по периодам
  MO[iPer][0] += Course; // набираем свечу за период
  if (iData & _MaskPer[iPer]) // свеча по данному периоду ещё набирается
   continue; // ждём события "пришла новая свеча"
  MO[iPer][0] /= _MaskPer[iPer] + 1;
  for (i = N_CANDLES - 1; i > 0; i--)
   MO[iPer][i] = MO[iPer][i - 1];
  MO[iPer][0] = 0; // обнуляем последнюю свечу, сдвигая уже набранные
 } // конец цикла набора статистики

Младший уровень лично я собираюсь установить по прерываниям каждые 15 секунд, Таким образом, мы в любой момент времени имеем полные данные по каждому инструменту по всем периодам расчёта (в данном примере, от 15-секундных до часовых свечей). Вуаля! Остальное, как говорится, "дело техники".

Ну вот, по Вашей ссылке, первым же предложением: "Tables in Lua are not a data structure; they are the data structure. All structures that other languages offer---arrays, records, lists, queues, sets---are represented with tables in Lua". Иными словами, никаких структур данных просто НЕТ! Печально... А уж "обоснование" и вообще курам на смех: "Хотя мы МОЖЕМ (!) реализовать массивы и списки, таблицы мощнее. Многие алгоритмы упрощаются до тривиальности с использованием таблиц". И дальше вообще издевательство: "Например, вы редко пишете поиск в Lua, потому что таблицы предлагают прямой (!!!) доступ к любому типу". Ребятки, доступ по ключу - это не прямой, а как раз КРИВОЙ доступ к данным! Даже если обозвать ключи "индексами". Уши бы надрать этому "Роберто Иерусалимскому!

В общем, с языком почти всё ясно: граф (точнее, дерево) объектов построить можно, а простейшую таблицу или даже массив - нельзя. Остаётся разобраться со строковыми переменными: способна ли эта loadstring интерпретировать строки как операторы языка (или, скажем, функции), то есть имеется ли здесь техническая возможность программирования данными.

Спасибо, Роман! Очень понравился ваш сервис общения с клиентами. Вы ведь сотрудник компании? Передайте руководству мою искреннюю благодарность.
Как прочитать таблицу Текущие торги?
 
Спасибо, Роман, я понял. Просто мне было лень разбивать строку из файла (там как раз и код класса, и код инструмента) на несколько подстрок, а сразу вставить туда запятые, как будто это и есть три аргумента. Теперь разделил (примерно так, как Вы описали) - всё работает.

УХ ТЫ! А в описании языка (руководство пользователя) нет ни звука ни про unpack, ни про loadstring! А эти вещи, как я предполагаю, должны бы расширять функциональные возможности совершенно диким образом! Спасибо, на досуге попробую поискать, что это за звери, и с чем их едят...

Нет, похоже, здесь мы друг друга не поняли. Как я могу анализировать указанный бит, если тип данных не integer, а real? Там же, насколько я помню, мантисса с характеристикой, а не двоичное представление числа! Собственно, что я хочу:
Вот тикает время (каждый раз в обработчике прерывания по таймеру я инкрементирую счётчик вызовов). Если он целого типа, то я по маске этого числа ловлю события  2, 4, 8, 16... тиков (маска, соответственно, 0x1, 0x3, 0x7, 0xF, 0x1F...)

Нет, с битами я работаю с закрытыми глазами - я 40 лет программистом, просто с Lua никогда прежде не сталкивался.  :smile:

Ещё такой вопрос: если  правильно понял, возможности объявить массив (одномерный или большей размерности) или таблицу (массив структур) с тем, чтобы адресоваться к его элементом по индексу, здесь не существует? Ведь конструкция вида:
a={}; a[0]={}; a[0][0]="data";
подразумевает для последующего доступа к данным (b=a[i][j]) именно ПОИСК по таблице, но не доступ к её элементам по индексу? Если да, то это должно серьёзно замедлять выполнение скрипта...
Кривые шибки в QLua
 
Давненько я кривее ошибки не видел! Лет примерно 30-35! :)

Суть дела: написал я тестовый скрипт на Lua (чтобы разобраться, что здесь как работает - с языком до этого не сталкивался вообще). Тест заработал, я скопировал код в другой файл, уже почти "боевой", что-то там подрихтовал, запускаю - НЕ работает! Я стал сравнивать оба кода - НУ ВСЁ ТОЧНО ТАК ЖЕ! Проматерившись минут 40, я локализовал, наконец, место глюка. Из серии "не верь глазам своим". Вот полный код теста:

f=true
function main()
while f do
 sleep(5000)
end
message("Скрипт остановлен!")
end

function OnStop()
f=false
end

Как оказалось, ошибка заключается в том (я миллион раз смотрел на это место!), что в "боевом" скрипте у меня стоит sleep(15000) - ну не нужно мне чаще! А эта скотина, как оказалось, через 5 секунд после останова принудительно завершает работу, "воруя" у меня управление. Читаю документацию - там стоит:
[NUMBER time_out] OnStop(NUMBER signal)
Что за "сигнал" - покрыто мраком, и в тестовых примерах никто его не использует, равно как и возвращаемое значение: флаг сбросили - что же тут возвращать? Ан нет - "Функция возвращает количество миллисекунд, которое дается скрипту на завершение работы", а по умолчанию у неё таймаут даётся именно в те самые 5 секунд! По этим словам тоже взгляд скользит, не задерживаясь - какое может быть "время для завершения", если у меня скрипт практически ничего не делает? А вот время на "безделье", на ожидание окончания последнего "sleep" - вынь, да положь! Короче, вот исправленный код, который корректно завершается даже при 15-секундной задержке:

function OnStop()
f=false
return 20000
end

УФ! Не, сейчас-то уже смешно, но тогда!..  :smile:  
Как прочитать таблицу Текущие торги?
 
Добрый день. Парочка вопросов:

1. По документации Lua, доступ к таблице текущих торгов осуществляется через функцию getParamEx, примерно так:
s=getParamEx("FQBR","AAPL-RM","LAST").param_value;
Если  пишу это тупым кодом в теле функции. то всё вроде как работает, возвращается цена последней сделки.
Но если я формирую строку
s=\"FQBR\",\"AAPL-RM\",\"LAST\"
а затем вызываю
getParamEx(s).param_value;
то возвращается nil
Что я не так елаю и есть ли возможность динамически создавать строку аргументов (что-то типа функции eval в JavaScript)?

2. Я не нашёл тип данных integer ВООБЩЕ! И как же мне работать с битовыми масками? Как на Lua реализуется конструкция вида:
if (iData & 0x80) { blah-blah-blah }?
Страницы: Пред. 1 ... 31 32 33 34 35 36 37 38 39 40 41
Наверх