В этом месте не помешала бы возможность подключения через Lua-скрипт к любому серверу и получения сообщения об ошибке подключения в том же скрипте. Тогда каждый пользователь мог бы написать для себя правила переключения на резервные сервера.
Надо делать так, как надо. А как не надо - делать не надо.
Вы можете более подробно описать концепцию работы функции CreateDataSource: то, как вы представляете себе, как она должна работать? А то постоянно натыкаешься на какие-то неожиданности и не знаешь, как реагировать: то ли это ошибка, то ли так и задумано было...
Надо делать так, как надо. А как не надо - делать не надо.
Если не открыта ТВС или тиковый график, то при заказе всех сделок из скрипта сбрасываются настройки по уже заказанным инструментам. После остановки скрипта настройки "Заказ всех сделок..." полностью сбрасываются, как будто ничего не заказывалось (даже если функция :Close() не вызывалась).
Надо делать так, как надо. А как не надо - делать не надо.
Сегодня произошло следующее: В QUIK не открыто ни одного окна, кроме "Доступные скрипты"; запущен только один скрипт, заказывающий все сделки по определённому списку инструментов по классу SPBOPT. Через некоторое время получаю такую ошибку: При этом скрипт продолжает работать: судя по логу все сделки продолжают успешно заказываться. Есть подозрение, что, ошибка выскакивает из-за того, что заказ всех сделок по большому списку инструментов происходит длительное время, в течение которого процесс info.exe загружает одно ядро процессора на 100%.
Надо делать так, как надо. А как не надо - делать не надо.
sam063rus пишет: касаемо всего остального и многопоточной работы и Ваших выводов по этой теме, могу только сказать, что Вы похоже совсем не читали мной приведённый выше форум: quik2dde.ru
Из каких таких моих слов вы делаете эти выводы? Нет, ну правда. Я ж не спорю. Я высказал своё мнение, основанное на моём опыте, в т.ч. и с визуальными таблицами QLUA. Поправьте меня, если ошибаюсь. Да, есть проблемы с общими переменными, таблицами при работе в двух потоках. Но это не означает, что нужно отказаться от работы в main(), просто нужно учитывать эти особенности. Более того, "тяжёлые" вычисления желательно переносить в main(). Форум читал, но признаюсь честно, не всё. Но нигде не видел там призывов "работу с майн лучше свести к минимуму". В ваших словах тоже нет никакой конкретики, кроме отсылки на форум, типа: "там где-то что-то написано".
Надо делать так, как надо. А как не надо - делать не надо.
Поймите меня правильно: судя по вопросам автор темы только начинает изучать графические возможности QLUA. Не стоит вводить в заблуждения пользователей своими убеждениями. Поэтому я и предложил обосновать фразу "надо забыть про работу в "майне". Полагал, что, возможно узнаю что-то новое для себя, а не спора ради. Но увы... :( Касаемо вашего примера: по моим убеждениям (поправьте, если не прав) инициализацию, в т.ч. создание визуальных таблиц, не стоит выполнять в основном потоке без определённой на то необходимости. Т.к. создание таблиц занимает время; создание больших таблиц - много времени. При создании таблицы в основном потоке работа других скриптов может быть приостановлена на это время, особенно если их работа строится исключительно на колбеках. К тому же, создать таблицу можно в main, а заполнять значениями по событиям в колбеках - нет проблем. ;)
Что касается враппера, то тут дело вкуса. Но его использование не освобождает пользователя от необходимости следить за порядком вызова функций. К тому же, ИМХО, при частой модификации / обращении к элементам таблицы, использование враппера может снизить производительность скрипта.
Цитата
Дмитрий пишет: А об этом где-то разработчики писали или это тоже из разряда нигде не упоминающихся особенностей?
Разработчикам "эта особенность" давно известна, но, судя по тому, что они не считают нужным сообщать о ней где либо, то скорее это - т.н. "пасхалка". И периодически на форуме появляются сообщения от пользователей, радостно спешащих поделиться своей "находкой". :D
Надо делать так, как надо. А как не надо - делать не надо.
sam063rus, Во-первых, вы мне не тыкайте. Мы с вами не пасли коров в одном колхозе. Во-вторых, судя по вашей активности на форуме, потроллить пришли сюда вы.
Я вопросы задаю не интереса ради, а уточнить чтобы, может, я что-то упустил при разработке. Но, похоже, ничего конкретного вы мне сказать не можете.
Цитата
sam063rus пишет: тут разговор про то, что размер кода, равно как и число переменных значительно увеличаться, что приведёт к полной неразберихе в коде.
При использовании враппера уменьшится количество необходимых переменных для хранения идентификаторов таблиц? Насчёт неразбирихи - это от автора творения зависит. :)
Цитата
sam063rus пишет: имеется ввиду, что враппер уже описан и в нём УЖЕ учтён правильный порядок
Ничего подобного: попробуйте добавить строку до создания окна.
Насчёт работы в main, то тут зависит от конкретной поставленной задачи. Не бывает одного универсального решения для всех задач.
Надо делать так, как надо. А как не надо - делать не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
Ниже под спойлером текст, относящийся только к Николай Камынин
Скрытый текст
Брокерская компания перекладывает плату за QUIK на своих клиентов в том или ином виде, т.к. Брокер - не благотворительная организация. Для многих клиентов в отчётах есть отдельная строка, что-то вроде "Плата за использование ИТС QUIK". Для них что, создаётся отдельная версия терминала, лишённая "багов"?
Цитата
Николай Камынин пишет: Вместо того, чтобы наезжать на разработчиков
Где я наезжал на разработчиков? Не надо "загоняться".
Цитата
Николай Камынин пишет: Кроме того, терминал QUIK-это программа подачи поручений, исполнение которых не является обязательным для брокера. Т е Вы ему сообщили? Он Вас услышал? Все!! Если окажет услугу (купит или продаст) - возьмет денюшку если нет, то нет.
Цитата
Николай Камынин пишет: перечитайте внимательно ГК РФ, ФЗ о защите прав потребителя, ФЗ о рынке ценных бумаг и регламент брокера.
Я смотрю, вы уже начитались или кто-то вправил вам. Вот ваши слова несколько месяцев назад:
Цитата
По закону, если брокер не предупредил клиента о каких-то условиях до получения поручения, то он обязан исполнить это поручение.
Или для вас закон действует как-то по-другому? Не знаю, куда и кому вы там заглядываете, но предлагаю вам перестать писать сообщения, не относящиеся к теме и не несущие никакой смысловой нагрузки.
Надо делать так, как надо. А как не надо - делать не надо.
sam063rus пишет: 1. надо забыть про работу в "майне", как дурной тон.
Обоснуйте.
Цитата
sam063rus пишет: 2. что будет если таблиц будет несколько?
Идентификатор таблицы вам на что?
Цитата
sam063rus пишет: 3. при создании объекта "таблица", (без использования враппера), имеет очень большое значение порядок вызова методов
Можно подумать, с использованием враппера порядок вызова не имеет значения. Единственное, заголовок можно задать до вызова функции :Show(). Но только потому, что в самой функции :Show() заголовок задаётся повторно после CreateWindow():
Код
function QTable:Show()
-- отобразить в терминале окно с созданной таблицей
CreateWindow(self.t_id)
if self.caption ~="" then
-- задать заголовок для окна
SetWindowCaption(self.t_id, self.caption)
end
self.created = true
end
Надо делать так, как надо. А как не надо - делать не надо.
Антон Соболь пишет: Понял что акция из заблокированной не успевает переходить в Доступно. что делать?
Сейчас уже не помню, разве в QPILE нет возможности проверить количество доступных лотов в таблице лимитов по бумагам? Очевидно, нужно дождаться, чтобы лимиты обновились.
Надо делать так, как надо. А как не надо - делать не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
Николай Камынин, вообще-то QUIK - платная ИТС: http://quik.ru/bank/products/quik-broker/order/tariffs/ То, что вы ею пользуетесь бесплатно, не отменяет сего факта. Вы либо оплачиваете её использование из комиссии, либо это оплачивает другой клиент вашего брокера, у которого оборот выше.
Надо делать так, как надо. А как не надо - делать не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
Серж пишет: просто создав в Lua функцию, возвращающую список классов, по которым запрещены транзакции
Вернее, функцию, возвращающую список классов, по которым разрешены транзакции. Соответственно, по остальным классам транзакции запрещены - можно даже не пытаться. Ну, а дальше, как уже упоминалось, "методом научного тыка", при необходимости, проверять требуемые бумаги.
Надо делать так, как надо. А как не надо - делать не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
sam063rus пишет: брокеру для этого придётся писать, а точнее, опять же заказывать ЗА СВОЙ СЧЁТ серверный модуль для квика у ARQA
Вот эту часть уже сейчас можно было бы реализовать без каких либо изменений в серверной части, просто создав в Lua функцию, возвращающую список классов, по которым запрещены транзакции:
Цитата
Sergey Gorokhov пишет: 1) по классу может стоять запрет на транзакции в правах. В этом случае подать заявку через интерфейс нельзя, просто пункт меню будет не активен.
Это сняло бы большую часть вопросов, т.к. чаще ограничения ставятся на весь класс.
Надо делать так, как надо. А как не надо - делать не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
Albert Eritsyan пишет: А втором случае есть какие либо специальные коды отказов в транзакции (либо четко ограниченный круг таковых, обусловленных именно наличием такого рода ограничений)?
Если в ответ на транзакцию нет номера заявки, и нет какого либо цифрового кода в круглых скобках и нет слова FORTS, значит заявка была отвергнута сервером. Кроме случая когда транзакции не доступны (нет прав) И кроме случаев когда тест транзакции содержит синтаксическую ошибку. В этом месте ошибку возвращает терминал Quik
Несмотря на то, что способов запретить транзакции "великое множество", есть какой-то определённый список ошибок, возвращаемых на такую транзакцию, и этот список ограниченный. Верно?
Sergey Gorokhov, чтобы облегчить автору задачу, вы могли бы опубликовать этот список ошибок, чтобы он мог определённо знать, что вот эта вот транзакция не прошла по причине того, что брокером запрещены операции по данному классу/инструменту.
Далее на сегодняшний день, я вижу только один вариант решения поставленной задачи: безусловная отправка транзакции и анализ ответа. Если ответ пришёл с ошибкой, подтверждающей, что транзакция по инструменту запрещена, то данный инструмент заносится в "чёрный список", и по нему транзакции более не отправляются.
Надо делать так, как надо. А как не надо - делать не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
sam063rus пишет: Главный вопрос: Что будет, если в один момент прошла транзакция на основании информации из старых списков, а в следующий момент списки изменились и оказалось, что новая связанная транзакция уже невозможна исходя из изменившихся списков?
Изменения в доступности списков вступают после реконекта клиента к серверу. Поправьте, если не прав.
Надо делать так, как надо. А как не надо - делать не надо.
Список доступных для транзакций инструментов, получение списка инструментов для совершения транзакций с учетом различных аккаунтов у одного и того же брокера.
Тут вопрос ещё в том, а знает ли сам терминал по каким инструментам трейдеру разрешены операции? Или он узнаёт об этом только, когда в ответ на транзакцию с сервера приходит ответ с ошибкой?
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий, вот вам ещё пища для размышления: если у вас есть рублёвый счёт и вы не совершаете на нём никаких операций, то его состояние в долларовом выражении будет меняться в зависимости от текущего курса. Возвращаясь к вашему примеру: У вас на счёте сумма, эквивалентная 100$, т.е при курсе 30 руб./$ - 3000 руб. Вы не стали совершать никаких сделок ни с нефтью ни с долларом. Когда цена на доллар выросла до 60 руб./$, вы, к своему удивлению, обнаружили, что можете купить только 50$. Т.е., потеряли 50$, не совершая никаких сделок! Вот такая математика. :)
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: Я на досуге перечитаю еще раз спецификацию контракта на нефть сорта брент.
Спецификация тут не при чём. Вам надо понять простую вещь: вы продаёте контакты за рубли, поэтому фин. результат проще считать в рублях. А потом конечную цифру можете конвертировать в доллары при желании.
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: в общем случае не соответствует действительности. Именно из-за особенностей расчета вар.маржи в приведенном Вами примере мы можем получить как прибыль, так и убыток.
Дмитрий, я привёл пример, так сказать, "на пальцах", чтобы не усложнять ситуацию. Потому как вы в более простых ситуациях считаете неправильно. Зачем вам усложнять ещё этими особенностями начисления вариационной маржи? Для начала надо понять простые вещи.
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: И зачем в данном случае открывать длинную позицию по фьючерсу на курс доллар-рубль на сумму 100 долларов, если потом закрывать ее только на 50? Что мне делать с оставшейся позицией на 50?
Вы же хотели получить фин. результат в долларах. Вот эти 50$ и будет ваша прибыль от сделки по брент. Можете делать с ними, что хотите. А длинную позицию по доллару на сумму 100$ открываем, чтобы захэджировать риски изменений курса доллара. 100$ - потому что продали брент за 100$, а не за 50$. При закрытии позиции по брент, конвертируете 50$ в рубли, чтобы откупить фьючерс брент, который теперь стоит 50$. Но, напомню, рассчитываетесь за него вы рублями. Спот это или срочный рынок - не имеет разницы. Просто на срочном рынке у вас блокируется ГО в меньшем объёме, чем стоимость контракта. Но вы должны открывать позицию на суммы эквивалентные указанным.
Цитата
Дмитрий пишет: А если ее тоже закрыть, то фин.результат и вовсе окажется равным 87,5$.
Как вы считаете вообще?
Цитата
Дмитрий пишет: А при торговле фьючерсами в приведенном Вами примере фин.результат составит уже не 50$, а (37.5$ + 25$) = 62,5$ 37.5$ - от продажи фьючерса на нефть, а 25$ - от купленного фьючерса на курс доллар-рубль (50$*60 - 50$*30 = 1500 руб. = 1500/60 долл. = 25$)
А это вообще разрыв "стандарта". При торговле фьючерсами фин. результат составит (я не беру в расчёт кривую изменения курса пока открыта позиция):
по брент финансовый результат в рублях +100*30 - 50*60 = 0
по доллару: -100*30 + 100*60 = +3000
Итого: 0 + 3000 руб = 3000/60 = 50$
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: А Вы попробуйте добавить в список соединений несколько одинаковых (на один и тот же сервер). Тогда он будет их перебирать столько раз, сколько Вам нужно, пока не дойдет до соединения с другим сервером.
А это мысль. Спасибо.
Цитата
sam063rus пишет: мне приходится указывать помимо пароля ещё и место ключеового контейнера. а стоит серверу потерять коннект - ЭЦП сразу воет, что надо ввести ключ
Это одна из причин, почему я не использую ЭЦП и не перехожу к брокеру с обязательной авторизацией по ЭЦП.
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: Еще большая засада заключается в том, что если Вы купили сегодня фьючерс по 60, а он за день упал до 50, то с Вас спишут 10$ маржи, переведя в рубли по курсу, например, 70 (10*70 = 700 рублей). Завтра фьючерс вырос обратно до 60$. Вы не закрываете позицию, надеясь на дальнейший рост. Если курс на этот день окажется не 70, а 60, то Вам зачислят маржув размере 600 рублей (10*60). На следующий день, видя, что цена не растет, Вы закрыли позицию по цене 60$. А курс доллара опять вырос до 70. Согласно Вашему примеру на день закрытия позиции Вы должны получить нулевой результат (60$*70 - 60$*70). Но на самом деле Вы окажетесь в убытке на 100 рублей (разница между списанной в первый день и зачисленной во второй день маржой).
Серж пишет: Серж , вам надо определиться в чём вы считаете свою прибыль: то вы считаете в рублях, то в долларах. Это же очевидно, что в одной валюте может быть прибыль, а в другой - большой убыток.
Ой, блин, сам с собой разговариваю )) Конечно же, это вам Дмитрий, надо определиться в чём вы считаете свою прибыль: то вы считаете в рублях, то в долларах.
Надо делать так, как надо. А как не надо - делать не надо.
Серж, вам надо определиться в чём вы считаете свою прибыль: то вы считаете в рублях, то в долларах. Это же очевидно, что в одной валюте может быть прибыль, а в другой - большой убыток.
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: Вы имели в виду - купил фьючерс на доллар-рубль? Если просто купить доллары, то их как было 100, так и останется столько же, независимо от курса. Но Вы правы только при условии что рубль обесценился на столько же, на сколько нефть.
Дмитрий, мне кажется, что вы чего-то недопонимаете или недоговариваете. Ваша фраза:
Цитата
Дмитрий пишет: Поэтому к тому моменту когда Вы закроете позицию и решите сконвертировать свою прибыль в доллары, Вы сможете купить лишь 45*50/60 = 37,5 долларов.
Я вам говорю:
Цитата
Серж пишет: Потому что продали вы фьючерс за рубли. Если бы вы сразу конвертировали рубли в 100$, то ваш финансовый результат составил бы порядка 50$.
Т.е., когда вы открыли шорт по брен, вам надо было открыть лонг по доллару на сумму 100$. В момент закрытия позиции по брен, вы закрываете лонг по доллару на 50$. И ваш финансовый результат составит 50$. От курса доллара в данном случае зависит ваша прибыль в рублях, но не долларах.
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий, понятно, что маржа зачисляется/списывается каждый день. Я просто, так сказать, на пальцах объяснил из чего складывается прибыль по долларовым контрактам. Т.е., это, как бы, ответ на ваш вопрос:
Цитата
Дмитрий пишет: А если мы купим, к примеру, фьючерс на нефть (цена в долларах) когда доллар по 80 и продадим его за ту же цену когда доллар упал до 60, то никаких убытков или прибыли мы не получим.
Да, действительно, грубо говоря, в долларах фин. результат не изменится, в отличии от рублей. На самом деле, следует учитывать как изменялся курс доллара, пока мы держали позицию, как вы описали в посте #17.
Цитата
Дмитрий пишет: Т.е. Вы не оплачиваете стоимость нефти в рублях, покупая фьючерс, так же как и не получаете ее стоимость в рублях, продав его.
Вы оплачиваете фьючерс именно в рублях, т.к. депозит рублёвый. Но это всё лирика...
Цитата
Дмитрий пишет: Поясню в чем именно засада - если Вы продали фьючерс по 100, а купили по 50, то по идее должны заработать 50 долларов. Но так как этот доход зачисляется Вам не единовременно при закрытии позиции, а каждый день небольшими частями, причем пересчитывается при этом в рубли по курсу на день зачисления, то при равномерном росте курса доллара за это время с 30 до 60 средний курс окажется 45. Поэтому к тому моменту когда Вы закроете позицию и решите сконвертировать свою прибыль в доллары, Вы сможете купить лишь 45*50/60 = 37,5 долларов.
Потому что продали вы фьючерс за рубли. Если бы вы сразу конвертировали рубли в 100$, то ваш финансовый результат составил бы порядка 50$. И дело тут не в том, что маржа зачисляется "каждый день небольшими частями", а в том, что ваши рубли обесценились.
Надо делать так, как надо. А как не надо - делать не надо.
Для долларового актива при изменении курса доллара, будет меняться его цена в рублёвом выражении. Так, если бы вы купили брент по 100$ при курсе 30 руб./$, а продали по 50$ при курсе 60 руб./$, то в рублях вы бы ничего не заработали и не потеряли. Именно поэтому был обвален курс национальной валюты, чтобы не потерять поступления в бюджет при снижении цен на нефть. Т.к., бюджет верстается в рублях, то поступления в бюджет от продажи нефтепродуктов остаются примерно на том же уровне.
Надо делать так, как надо. А как не надо - делать не надо.
Серж пишет: А то приходится отключать возможность автоматического переключения, иначе при каждом "чихе" QUIK будет прыгать с одного сервера на другой и перекачивать все данные заново.
Нужно, чтобы QUIK переключался на другой сервер через заданное количество неудачных попыток подключения.
Надо делать так, как надо. А как не надо - делать не надо.
Добавьте в настройки соединений параметр "При n неудачных попыток переключаться на другой сервер". А то приходится отключать возможность автоматического переключения, иначе при каждом "чихе" QUIK будет прыгать с одного сервера на другой и перекачивать все данные заново.
Надо делать так, как надо. А как не надо - делать не надо.
Для того чтобы получить текущее состояние данных достаточно CreateDataSource. Однако чтобы фактически произошла подписка на новые данные (а новыми считаются любые полученные с сервера) то нужен колбек SetEmptyCallback или SetUpdateCallback.
Добавьте эту информацию в документацию, а то ведь спрашивать будут. Естественно, после устранения ошибок, связанных с работой функции CreateDataSource.
Надо делать так, как надо. А как не надо - делать не надо.
Сергей Горохов, ARQA Technologies пишет: Для того чтобы получить текущее состояние данных достаточно CreateDataSource. Однако чтобы фактически произошла подписка на новые данные (а новыми считаются любые полученные с сервера) то нужен колбек SetEmptyCallback или SetUpdateCallback.
Однако, в текущей версии CreateDataSource работает не так, как было задумано разработчиками. Это описано в теме по ссылке, которую я давал выше.
Надо делать так, как надо. А как не надо - делать не надо.
Серж пишет: to разработчикам , было бы удобно, если бы в QUIK добавили тот функционал, что есть в QMinEditor, в частности: открытие графика из архива локальной БД.
А что касается пожелания. Зарегистрируете его?
Надо делать так, как надо. А как не надо - делать не надо.
Со 2-м и 3-м пунктом понятно. По 1-му пункту нужно именно задавать в "человеческом" формате: "dd.mm.yyyy", "yyyy-mm-dd", "dd/mm/yy", "yyyymmdd" и т.д. Можно как в Эксель: "D.M.YY", "YY-M-D", "D/M/Y", "YYMD"
Надо делать так, как надо. А как не надо - делать не надо.
Серж пишет: определить время начала интервала для заданного таймфрейма
Есть время события, есть таймфрейм. Нужно определить время начала свечи, если угодно. Вроде, уже сам сделал:
Код
function getTimeInterval(Time, Interval)
Interval = Interval*60 -- приводим к секундам
local z = 3*60*60 -- приводим к часовому поясу Москвы
return os.date('!%d.%m.%Y %X', math.floor((Time+z)/Interval)*Interval)
end
local Time = os.time({year=2015, month=02, day=10, hour=18, min=40, sec=20}) -- Время в числовом формате
local Interval = 4*60 -- интервал (таймфрейм) в минутах: 4 часа
print(getTimeInterval(Time, Interval))
Надо делать так, как надо. А как не надо - делать не надо.
Zoya Vdovina пишет: Нов версии терминала 6.16.1, проблема была исправлена. (Задержки при открытии формы ввода заявки по опционам.)
Да, действительно, в v.6.16.1.15 проблема задержки открытия формы ввода заявки по опционам устранена. Ведь можете, когда хотите. И даже видео не понадобилось.
Но проблема со стоп-заявками осталась. Чтобы воспроизвести эту проблему вам не нужен архив терминала. Вам нужно подключение к реальному серверу. Утверждаю это с полной уверенностью, потому как проверил на чистом дистрибутиве QUIK-Junior, в котором проблемы нет, изменив настройки подключения к боевому серверу: на боевом сервере возникают описанные проблемы со стоп-заявками по опционам. Как говорится: "было бы желание"...
Надо делать так, как надо. А как не надо - делать не надо.
В v.6.16 функция getSecurityInfo работает. Проверьте, содержится ли необходимый инструмент в списках getClassesList() и getClassSecurities(ClassCode) непосредственно перед вызовом getSecurityInfo()
Надо делать так, как надо. А как не надо - делать не надо.
Задача: определить время начала интервала для заданного таймфрейма.
Код
function getTimeInterval(t, i)
i = i*60 -- переводим в минуты
return os.date('%d.%m.%Y %X', math.floor(t/i)*i)
end
local t = os.time({year=2015, month=02, day=10, hour=18, min=40, sec=20})
local i = 4*60 -- интервал 4 часа
print(getTimeInterval(t, i))
Но кажет не то время.
Надо делать так, как надо. А как не надо - делать не надо.
Подтверждаю, есть такая проблема на опционах. И не только для стоп-заявок. Для обычных заявок то же самое. Я писал об этом ещё в ноябре прошлого года. Тема "Ввод заявки". Меня просили снять видео, "как я открываю форму ввода заявки на опционах и на каком-нибудь другом классе". Извините, но снимать видео, чтобы подтвердить то, что я итак описал в письме, у меня нет желания.
Есть предположение, что это происходит из-за большого количества бумаг в классе SPBOPT.
Цитата
Zoya Vdovina пишет: Проверили на 6.16.1.15. Описанная Вами проблема не воспроизвелась.
Если проверяли на демо, то там такой проблемы нет: на боевом сервере по классу SPBOPT более 5 тыс. инструментов, на демо - всего 362.
Надо делать так, как надо. А как не надо - делать не надо.
1) getSecurityInfo может вернуть nil, если список бумаг ещё не загружен, тогда получите ошибку: "attempt to index a nil value" 2) если seccode содержится в нескольких классах, то getSecurityInfo может вернуть не тот class_code, который вы ожидаете 3) если вы знаете код класса, тогда зачем getSecurityInfo("",seccode).class_code ?
Надо делать так, как надо. А как не надо - делать не надо.