Karina Dmitrieva написал: Не понятно какой параметр мы должны добавить в ТТТ, чтобы Вы его получали с помощью getParamEx. Предложенные текущие параметры STATUS и TRADINGSTATUS судя по всему Вам не подходят. Параметры, которые Вы видите в ТТТ, едут напрямую с биржи в Рабочее место QUIK, соответственно если на бирже будет транслироваться отдельный параметр для инструментов дополнительной сессии выходного дня, то и мы сможем его показывать в Рабочем месте QUIK.
Мне жаль, что вам не понятно, попробую объяснить. В TTT есть параметры MORN_SESS_ALLOW и EV_SESS_ALLOWED которые по сути являются флагами разрешения каждого торгуемого инструмента для соответствующих сессий. Полагаю биржа не позднее пятницы такой флаг для торгов в выходные дни начнет отдавать и нам очень хотелось бы его увидеть в ТТТ не сильно позже .
Nikolay написал: Они рекомендую как раз два параметра STATUS и TRADINGSTATUS. Первый не все брокеры транслируют. Второй, вроде, все.
Если для параметра TRADINGSTATUS вернулся result == '1', то можно увидеть идут ли торги по значению param_value из возвращаемой таблицы. Здесь на форуме были как-то написаны значения.
Правда для срочного рынка надо еще смотреть на параметр CLSTATE.
Nikolay, у меня замены торговых инструментов делаются в предторговый период. При этом проверяются MORN_SESS_ALLOW, EV_SESS_ALLOWED и FULLCOVEREDFLAG. Я полагаю, что теперь этот набор необходимо дополнить чем-то типа SUNDAY_SESS_ALOWE, иначе будем городить костыли.
Как пользоваться параметром TRADINGSTATUS я как бы в курсе.
Karina Dmitrieva написал: Вам стоит уточнить у Вашего брокера будет ли предоставлен доступ к серверу и возможность торговли в выходные дни, а также об особенностях торговли.
Цитата
Ну прежде всего допуск тикеров к торговле в выходные т.к. биржа заявила что не все инструменты будут допущены.
Рекомендуем смотреть в ТТТ на следующие параметры "Статус торговли инструментом" (Status) и "Состояние сессии" (TradingStatus).
Большое спасибо Катерина за развернутый ответ. Я порекомендую брокеру уточнить у биржи будет ли ему представлен доступ к к торговле в выходные дни. А сам буду каждое субботнее утро в 7-00, 10-00 и в 19-00 проверять статус каждого тикера составлять список инструментов допущенных к торговле на отдельной бумажке и потом из нее создам для робота таблицу рекомендуемых тикеров на воскресенье. Но может все-таки это будет параметр для getParamEx?
Ну прежде всего допуск тикеров к торговле в выходные т.к. биржа заявила что не все инструменты будут допущены.
Кроме того прошла информация о том, что допуск к утренней и вечерней сессии в рабочие и выходные дни будут различаться. Надеюсь понятно, что такая информация торгующему скрипту тоже нужна.
Nikolay написал: Проблема не в инструкции, а в невозможности выполнить действия, сформулированные там. В данном руководстве предлагается использовать платный продукт, который на данный момент не поддерживается на территории где работает терминал. И даже если бы поддерживался, предлагается ради получения имён параметров купить программный продукт за 6000 руб. Спрашивается - это как понимать? Т.е. вывести набор полей в инструкцию - так сложно, что пусть пользователи сами с этим возятся.
Kolossi написал: Еще бы кто рассказал как это выгрузить не имея Экселя (у меня Квик на Mac)
есть простой способ. настройки-программа-буфер обмена-формальные поля. далее капируем всё из таблицы и вставляем куда угодно. хоть в блокнот. там в полях столбцов будут нужные поля
Kolossi написал: Искренне рад за вас. Как замечательно, что коммерческий продукт российской фирмы опционально требует софт, запрещенный производителем к распостранению на территории РФ.
Я уже не раз писал об этом. У меня, например, MS Office нет. Нет желания платить деньги, а устанавливать сломанное тем более. Тем более, что есть бесплатный облачный от того же MS. Раза два в год открыть документы достаточно. Но точно это не нормально - устанавливать тяжеленный пакет с потенциально опасными приложениями (вспоминаем про исполнение скриптов даже не открывая файл) только для того, чтобы узнать формальное описание полей. Мне проще собрать DDE сервер на С для этой задачи. И всё это потому что их описания нет в документации.
При этом и в Python и в Lua полно библиотек, которые выведут данные в .xls файл легко и просто, если уж приспичило. А уж чем этот файл открывать каждый сам решит. Дождутся пока им за обязательную установку Exсel Минцифры нахлобучит.
Искренне рад за вас. Как замечательно, что коммерческий продукт российской фирмы опционально требует софт, запрещенный производителем к распостранению на территории РФ.
Станислав написал: Таблица текущих торгов MORN_SESS_ALLOWE и EV_SESS_ALLOWED это?
Кто-нибудь расскажите мне, убогому, где находится секретная документация включающая эти param_name. Раньше помню админ посылал на... QPile с этими вопросами. Но нет там этого.
Прочел, что во втором квартале ммвб собирается ввести торговлю в выходные дни. Причем в эти дни доступна будет только дневная сессия и не для всех инструментов. Вот бардак-то получим...
nikolz, извиняюсь что бестолково сформулировал вопрос . Я, балбес, разобрался. Вопрос закрыт.
В общем дело было так: Пыльный скрипт из чулана написаный несколько лет назад в первых строках которого было my_folder = getWorkingFolder().."\\scripts\\" Скрипт спокойно запускается и работает в Квике под Lua 5.3, однако при попытке проверки синтаксиса в SublimeText выдавался отлуп типа : ...attempt to call a nil value (global 'getWorkingFolder').
В итоге вылечилось как и должно было :) function OnInit() my_folder = getWorkingFolder().."\\scripts\\" ... end Причина тоже понятна - другая версия Lua в последнем релизе редактора.
Даже в голову не приходило. Я под словом "пустышка" понял пустые функции с тем же именем в коде. Можно подробнее про создание dll и подключения его (куда?) для той же getWorkingFolder()?
Ну как-то ручные манипуляции с пустышками по 3 тысячам строк кода не особо вдохновляют. И даже если собрать все q-функции в одном месте, то делать подмену после каждой правки то еще удовольствие. Возможность подключение к редактору qlua буду изучать. Я просто подумал может быть кто подскажет как в скрипте объявить функцию внешней и успокоить интерпретатор что, мол, она типа существует.
Sublime Text 3 при проверке синтаксиса путем тестовой прогонки скрипта (Build) ругается на встроенные функции qlua, например на getWorkingFolder(). Понятно, что встроенный интерпретатор Lua их не знает и считает не объявленными глобальными переменными. Как его заткнуть? Мешает.
function round (num, idp)
-- Если num некорректное, вернуть как есть
if not num or type(num) ~ = "number" then return num end
-- Если idp не указан, использовать 0 (округление до целого числа)
idp = idp or 0
local mult = 10 ^idp
-- Округление для любого числа
local rounded = math.floor (num * mult + 0.5 ) / mult
-- Если число целое, убрать .0
if rounded = = math.floor (rounded) then
return math.floor (rounded)
end
return rounded
end
local rounded = math.floor (num * mult + 0.5 ) / mult для отрицательных чисел не корректно
function round(num,idp) --функция округления
if idp and num and type(num)=="number" and type(idp)=="number" then
local mult=10^(idp or 0)
local x=0
if num>=0 then
x=math.floor(num * mult + 0.5) / mult
else
x=math.ceil(num * mult - 0.5) / mult
end
if x==math.floor(x) then x=math.floor(x) end -- обрезка нуля
return x
else
return num
end
end
Да, я наверное не четко сформулировал вопрос. : Когда работа функции SetTableNotificationCallback будет приведена в соответствие с заявленной в официальной документации?
За то за это время разработчики сделали для пользователей очень удобную весч - якорек на графике для переключения инструменов. Классно, можно переключать десяток инструментов имея один открытый график. А то, что метки всех инструментов торчат на одном и том же графике по всем углам, это не проблема шерифа.
Settings= {
Name = "Test",
line =
{
{
Name = "Candle",
Color = RGB(255, 0, 0),
Type = TYPE_CANDLE,
Width = 1
}
}
}
function OnCalculate(i)
local candle={O(i),C(i),H(i),L(i),V(i),T(i)}
return ???
end
function Init()
return 1
end
Восемь лет назад разработчики сказали "никак в текущей версии". Версия тогда была 7-я. Что нибудь изменилось?
Kolossi написал: Как в скрипте индикатора можно получить наименование тикера обрабатываемой свечи?
Нужно использовать функцию getSecurityInfo для получения информации о тикере. Вот пример:
local function getTicker(class_code, sec_code) local sec_info = getSecurityInfo(class_code, sec_code) if sec_info ~= nil then return sec_info.short_name else return nil end end
Из этого совета можно сделать анекдот : " Что бы получить имя тикера нужно в параметре функции указать sec_code". Такой же ответ мне выдал ChatGPT, вы не родственники?
Споткнулся тут о проблему: в скрипте индикатора нужно обрабатывать свечи для бумаги прошедшей сплит по правилам, отличным от правил обработки других инструментов. Как в скрипте индикатора можно получить наименование тикера обрабатываемой свечи?
У меня ведется локальная таблица заявок поданных роботом. При исполнении заявки она из таблицы убирается. Периодически эта таблица проверяется на соответствие таблицы заявок квика. В случае несовпадения подается команда на удаление из списка или на снятие заявки в зависимости от типа расхождения.
Nikolay написал: Так данные не обязаны прийти сразу. Установили соединение, ждем данные. Да. было бы хорошо иметь что-то определяющее приход данных. Но этого нет. Можно как минимум проверить, что загружены классы, счета, денежные лимиты. А потом уже заказывать потоки.
Не так. Всегда было: установили соединения, заказали данные, ждем данные. Я не спорю насчет необходимости наличия флага прихода данных, но с тем, что бы при заказе данных выявлялось отсутствие наименования класса столкнулся впервые за много лет.
Nikolay написал: Не уверен, что здесь что-то изменилось. Это просто данные с сервера шли долго (справочники, данные таблиц и т.д.) после установки соединения. На форме уже столько раз об этом спорили, просили разработчиков дать методы определения прихода пактов данных.
Дак вот же оно, в логе - сообщение о коннекте через целую секунду после IsConnected()==1. Что мешает этот признак выставлять после сообщения?
Обнаружилось, что при запуске терминала вместе со скриптом и последующем коннекте функция IsConnected() возвращает значение 1 раньше чем устанавливается фактическая связь с сервером.
в итоге
Код
if isConnected()==1 then
message("IsConnected "..tostring(Isconnected()))
csi,error_desc=CreateDataSource("INDX", "IMOEX", INTERVAL_D1)
...
...
пишет в лог: 10:06:35 isConnected 1 10:06:35 csi Source error==>INDX - unknown class code. 10:06:36 Соединение установлено. Предыдущий вход был 07.03.2024 10:05:04 с адреса 92.62.59.149.
Что за ...? В этой части скрипта я уже лет пять ничего не трогал. Приходится перезапускать скрипт после коннекта.
Для того что бы понять нужна ли вам такая логика достаточно вставить в скрипт использующий эту библиотеку функцию выставления заявок и дать доступ к деньгам. Своим деньгам ;)
Nikolay написал: Для массивов так, конечно, быстрее. pairs применяют для хеш таблиц, где простой итератор не применить.
Я конечно пошутил, но все же полагаю что если (по возможности) использовать массив вместо хэш-таблицы то перебор будет быстрее. Во всяком случае такие выводы у меня получились при сравнении обработки таблицы обезличенных сделок с приличным объемом. in pairs проигрывает построчному перебору.
Через файлы это хорошо, сам пользую. Как для передачи, так и для сохранения для последующего запуска. Вот только бэкапится приходится т.к. при коллизиях и вывыливании терминала в дамп файлы частенько бьются. А поскольку в файл писать приходится часто это становится проблемой.