Всем доброго дня. Поискал поиском, но ничего не нашел. Вопрос вот в чем. Мне надо в скрипте на 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
Nikolay написал: Чем не устраивает файл с списком кодов инструментов и списком параметров для считывания. Читаете файл при старте, а дальше читаете данные по ним. И не надо заполнять ненужные мелькающие таблицы в терминале.
Да в принципе всем устраивает. Просто нужно добавлять/удалять инструменты периодически и хотелось бы все это делать именно через таблицу текущих торгов, а не прописывать все ручками.
Об этом я в курсе. Задумка была такая, в эту таблицу я загоняю интересующие меня инструменты, а уже из нее я скриптом считываю только их и ничего больше. Может есть другой путь? Сама таблица "Текущие торги" меня вообще не интересует, принципиально я могу скриптом создать таблицу, но как в нее загнать интересующие меня инструменты? Понятно что скриптом без проблем, но принцип должен быть тот же, что и с таблицей "Текущие торги". Т.е. по сути, таблица должна указывать скрипту с чем работать, а инструменты добавляю и удаляю я сам из рабочего пространства Quik.
Всем доброго времени суток. Есть такой вопрос. В терминале Quik есть таблица "Текущие торги #2". Создана прямо из оболочки Создать таблицу -> Текущие торги. В этой таблице находится весь список инструментов меня интересующих. Задача. Могу ли я получить из этой таблицы как минимум class_code и sec_code по каждому инструменту из этой таблицы? Или это в принципе невозможно? Зная идентификатор таблицы я думаю можно без проблем проделать такой фокус, но я его не знаю и понятия не имею где его достать.
Вот только сколько ни смотрел, сколько не читал, все как один говорят/пишут вот тут надо эту цену поставить, тут цена должна быть чуть меньше/больше, а тут вот такая. Т.е. никакого понимания не дают.
Не стал плодить темы, вобщем с 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 вообще не вписывается в логику.
Только этот колбэк не катит, ибо он приходить только после факта сделки. А у меня логика другая, заявка может сниматься еще до факта сделки, но чтобы убить заявку до сделки, нужен order_num, а кроме как из OnOrder или OnTransReply я больше не знаю способов как его получить. Разве что кроме как прямо из таблицы заявок TABLE order NUMBER indx getOrderByNumber(STRING class_code, NUMBER order_id), Но опять же надо знать order_id, а получить его можно только из OnOrder или OnTransReply еще до факта сделки. Правда order_id я не проверял...
Anton, спасибо за пояснение. В принципе нечто подобное я себе и представлял. Но остается открытым вопрос, что же делать то? Но из вашего пояснения получается, что OnTransReply может вызываться на каждую заявку неоднократно? Если это так, достаточно ли фильтровать те, что пришли с order_num = nil и тупо ждать коллбэк с заполненным этим полем, он обязательно появится? QApplication, спасибо, обязательно гляну.
Здравствуйте. Только начал знакомится со скриптами 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 не могу обработать, т.к. понятия не имею о статусе заявки...