Функции getLinesCount и getNumCandles возвращают nil
Пользователь
Сообщений: Регистрация: 18.09.2021
10.08.2022 16:24:37
Всем доброго дня. Поискал поиском, но ничего не нашел. Вопрос вот в чем. Мне надо в скрипте на LUA использовать функции getLinesCount и getNumCandles. Вобщем открываю нужные мне индикаторы, например RSI, как положено присваиваю ему уникальный идентификатор и из скрипта пытаюсь получить количество линий и свечей. Обе функции возвращают значение nil... Все значения вывожу в тестовую таблицу. При этом все остальные значения отображаются корректно. Что я делаю не так? Опять же получение занимает некоторое время, именно поэтому для теста все сделал в бесконечном цикле. Позже это все перенесется в коллбэки. Как я понял из руководства по LUA функция CreateDataSource вышеупомянутым функциям вообще не нужна. Тем не менее даже из нее тестовый вывод работает. Но как я понял именно CreateDataSource работает исключительно с Price для выбранного инструмента. А если работать с графиками индикаторов нужна getCandlesByIndex?
Код
while not stopped do
ds, Error = CreateDataSource (CLASS, SEC, INTERVAL_M5);
local count = getLinesCount(ischBB)
local num = getNumCandles(ischBB)
SetCell(t.t_id, row, 1, NAME)
SetCell(t.t_id, row, 2, tostring (PRICE_STEP),2)
SetCell(t.t_id, row, 3, tostring (PRICE_SCALE))
SetCell(t.t_id, row, 4, tostring (count))
SetCell(t.t_id, row, 5, tostring (num))
SetCell(t.t_id, row, 6, tostring (ds:Size()))
sleep(1000)
end
Получить строки таблицы Текущие торги.
Пользователь
Сообщений: Регистрация: 18.09.2021
28.07.2022 13:01:25
Цитата
Владимир написал: , Так добавляйте и удаляйте - в чём проблемы? Что за периодичность? Раз в полгода? ::
Ну примерно 2-3 раза в неделю
Получить строки таблицы Текущие торги.
Пользователь
Сообщений: Регистрация: 18.09.2021
28.07.2022 10:14:56
Цитата
Nikolay написал: Чем не устраивает файл с списком кодов инструментов и списком параметров для считывания. Читаете файл при старте, а дальше читаете данные по ним. И не надо заполнять ненужные мелькающие таблицы в терминале.
Да в принципе всем устраивает. Просто нужно добавлять/удалять инструменты периодически и хотелось бы все это делать именно через таблицу текущих торгов, а не прописывать все ручками.
Получить строки таблицы Текущие торги.
Пользователь
Сообщений: Регистрация: 18.09.2021
28.07.2022 07:33:22
Цитата
Владимир написал: Ах, да - "Текущие торги #2" и "Текущие торги" это одна и та же таблица
Да, но сути это не меняет
Цитата
nikolz написал: есть два варианта, но они не на lua.рассказать?
Да, не видел этой темы. Все таки эта задача судя по всему нереализуема средствами Qlua. Придется вручную все это делать
Получить строки таблицы Текущие торги.
Пользователь
Сообщений: Регистрация: 18.09.2021
27.07.2022 18:45:23
Об этом я в курсе. Задумка была такая, в эту таблицу я загоняю интересующие меня инструменты, а уже из нее я скриптом считываю только их и ничего больше. Может есть другой путь? Сама таблица "Текущие торги" меня вообще не интересует, принципиально я могу скриптом создать таблицу, но как в нее загнать интересующие меня инструменты? Понятно что скриптом без проблем, но принцип должен быть тот же, что и с таблицей "Текущие торги". Т.е. по сути, таблица должна указывать скрипту с чем работать, а инструменты добавляю и удаляю я сам из рабочего пространства Quik.
Получить строки таблицы Текущие торги.
Пользователь
Сообщений: Регистрация: 18.09.2021
27.07.2022 17:15:50
Всем доброго времени суток. Есть такой вопрос. В терминале Quik есть таблица "Текущие торги #2". Создана прямо из оболочки Создать таблицу -> Текущие торги. В этой таблице находится весь список инструментов меня интересующих. Задача. Могу ли я получить из этой таблицы как минимум class_code и sec_code по каждому инструменту из этой таблицы? Или это в принципе невозможно? Зная идентификатор таблицы я думаю можно без проблем проделать такой фокус, но я его не знаю и понятия не имею где его достать.
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
22.09.2021 16:44:19
Например STOP_ORDER_KIND=ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
22.09.2021 16:07:06
Daniil Pozdnyakov, спасибо, буду изучать. Правда там не все типы, но насколько я понимаю все, которых нет в файле, это комбинация основных?
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
22.09.2021 15:48:10
С проскальзыванием понятно, вдруг не мне не хватило, будем продавать/покупать в рамках проскальзывания.
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
22.09.2021 15:26:59
Вот только сколько ни смотрел, сколько не читал, все как один говорят/пишут вот тут надо эту цену поставить, тут цена должна быть чуть меньше/больше, а тут вот такая. Т.е. никакого понимания не дают.
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
22.09.2021 15:16:21
Не стал плодить темы, вобщем с order_num разобрался, спасибо. Пришел к выводу что надо брать из таблицы заявок еще и статус заявки, так как бы надежнее :) Сейчас разбираюсь с простым и по исполнению тэйк профитом и стоп лоссом. Вообще в голове сумбур полный, ибо они работают как на покупку так и на продажу. Хочу для начала разобраться с простым. Читаю документацию и вижу это
Код
Тэйк-профит и стоп-лимит Лукойл, покупка 1 лота, активация тэйк-профита при достижении цены 2000 с отступом в 5% и защитным спрэдом в 3%, стоп-цена 2222, цена лимитированной заявки 2255, время действия с 10:00:01 по 19:45:45
ACTION=NEW_STOP_ORDER;
TRANS_ID=10055;
CLASSCODE= TQBR;
SECCODE=LKOH;
ACCOUNT=L01-00000F00;
CLIENT_CODE=Q7;
OPERATION=B;
QUANTITY=1;
PRICE=2255;
STOPPRICE=2000;
STOP_ORDER_KIND=TAKE_PROFIT_AND_STOP_LIMIT_ORDER; OFFSET=5;
OFFSET_UNITS=PERCENTS;
SPREAD=3;
SPREAD_UNITS=PERCENTS;
MARKET_TAKE_PROFIT=NO;
STOPPRICE2=2222;
IS_ACTIVE_IN_TIME=YES;
ACTIVE_FROM_TIME=100001;
ACTIVE_TO_TIME=194545;
MARKET_STOP_LIMIT=NO
В частности недопонимаю когда ее выставлять? Вижу, что операция продажа. Следовательно чтобы что то выставить на продажу надо сначала купить? Как я понимаю здесь, при достижении цены 2000 на уже купленной акции активируется тейк профит? Или же я неверно понимаю логику тэйк профит, активируется когда цена достигнет 2000 + 5% и -3% защитного спреда? При этом условии акция будет продана? Не понятно что такое стоп цена 2222? Да и цена лимитированной заявки 2255 вообще не вписывается в логику.
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
20.09.2021 08:51:32
Цитата
Anton написал: Спасение в том, чтобы не закладывать никакой порядок колбеков и даже факт их появления.
Только этот колбэк не катит, ибо он приходить только после факта сделки. А у меня логика другая, заявка может сниматься еще до факта сделки, но чтобы убить заявку до сделки, нужен order_num, а кроме как из OnOrder или OnTransReply я больше не знаю способов как его получить. Разве что кроме как прямо из таблицы заявок TABLE order NUMBER indx getOrderByNumber(STRING class_code, NUMBER order_id), Но опять же надо знать order_id, а получить его можно только из OnOrder или OnTransReply еще до факта сделки. Правда order_id я не проверял...
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
18.09.2021 19:00:45
Anton, спасибо за пояснение. В принципе нечто подобное я себе и представлял. Но остается открытым вопрос, что же делать то? Но из вашего пояснения получается, что OnTransReply может вызываться на каждую заявку неоднократно? Если это так, достаточно ли фильтровать те, что пришли с order_num = nil и тупо ждать коллбэк с заполненным этим полем, он обязательно появится? QApplication, спасибо, обязательно гляну.
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
18.09.2021 17:17:00
Принципиально у меня тоже самое, насчет price не проверял, но order_num = nil это точно.
OnTransReply возвращает order_num = nil
Пользователь
Сообщений: Регистрация: 18.09.2021
18.09.2021 16:13:25
Здравствуйте. Только начал знакомится со скриптами Lua в Quik. Возникла проблема. Если вкратце, отправляю заявку sendTransaction с необходимыми параметрами. В терминале вижу, что заявка принята и отображается как активная, OnTransReply возвращает status = 3, trans_id ровно тот что и присваивал при отправке заявки. Все прекрасно ровно до тех пор, пока мне не понадобится, например, снять заявку. Начинаются чудеса какие-то. Параметр order_num = nil, но в терминале то в таблице заявок я прекрасно вижу эти номера. Почитав документацию, там некоторые параметры, помеченные звездочкой,
* – параметр может иметь значение nil
НО! Интересует, при каких же условиях они будут возвращаться как nil? Ни слова об этом в документации. Опять же таки, как поступить если нужен order_num? 1. Обрабатывать OnTransReply только на status? 2. Обрабатывать коллбэк OnOrder? Опять же таки я не нашел в документации ни слова о том при каком условии он вызывается? Только при условии что trans_reply.status = 3 или вообще при любой попытке отправить заявку, даже неудачной? В первом случае получив и обработав OnOrder можно не запариваться с OnTransReply и его статусом по идее, разве что для информации. Во втором случае в коллбэке OnOrder обязательно нужно проверить trans_reply.status. И опять же появляется другой вопрос, в какой последовательности оба этих коллбэка идут??? Если OnOrder может прийти раньше OnTransReply, то получается полнейшая ерунда, order_num в OnTransReply я получить не могу, а OnOrder не могу обработать, т.к. понятия не имею о статусе заявки...