function OnTableEvent(t_id, msg, par1, par2)
if msg == QTABLE_LBUTTONDBLCLK then
local image, value = GetCell(t_id, par1, par2)
message(par1..":"..par2)
message(image)
message(value)
end
?
Значения par1 и par2 выдает, далее выдает пустые значения
Здравствуйте, скрипт на lua создает таблицу с инструментами и котировками. Я нашел как по клику на строку таблицы перехватывать и обрабатывать событие:
Код
function OnTableEvent(t_id, msg, par1, par2)
-- Если был клик левой кнопкой
if msg == QTABLE_LBUTTONDBLCLK then
local top, left, bottom, right = GetWindowRect(t_id);
message ("coordinates: "..top..", "..left..", "..bottom..", "..right);
-- Если это общий стоп
if par1 == 1 -- Номер строки
and par2 == 1 then -- Номер колонки
-- Вызываем необходимую функцию
else
if par2 == 2 then
-- Вызываем необходимую функцию
end
end
end
end
Два вопроса: 1) Можно ли получить содержание кликнутой строки/ячейки таблицы? 2) Можно ли в lua открыть график Quik с параметрами по умолчанию (график цены и объёма, подобный тому который можно построить в таблице Текущих торгов по правой кнопке мышки)?
Пока сделал за два циклы - сначала продаю половину, чтобы выйти в ноль, затем перезапускаю портфель, чтобы обновилась таблица Купить/Продать, получаю новые данные и докупаю сколько нужно.
сергей пишет: Вот куда-куда я не программист, но считаю что это нормально. Во-первых не понятна суть фразы-сразу после сделки. Речь о новой строке в таблице сделок? Думаю здесь кроется приоритет отправки данных с сервера клиентуклиенту... Простая аналогия : Заезжаете на заправку и хотите полный бак. Только после его заправки (сделка) идёте (задержка) за сдачей от предоплаты (лимиты). Возможно стоит указать в коде sleep перед очередной проверкой параметра после сделки, я в этом не секу.
В qpile нет sleep-а, кажется, но я пробовал гонять пустые циклы, задерживая на 3-4 секунды, не помогает, таблица Купить/Продать обновляется только после завершения расчета всего портфеля
например у меня в портфеле 100 лотов Сбера (купленных на имеющиеся средства + на все плечо по максимуму). seccode = "SBER". Я хочу перевернуться, т.е. продать 200 лотов, чтобы получить -100.
Переменная limitCanSell выводит 200, если УДС больше 1, т.е. если стоимость портфеля не опустилась ниже уровня Начальной маржи в таблице Клиентского портфеля. Но если опустилась ниже, то УДС становиться меньше 1, и переменная limitCanSell выдает 100, т.е. ровно столько, сколько мне надо продать, чтобы выйти в ноль.
Получается, что при УДС меньше 1, я не вижу сколько я могу купить с учетом плеча. Может быть я могу купить все 200, а может быть после продажи 100 лотов я потеряю средства и смогу купить только 99 лотов. Чтобы определить кол-во лотов, на которое я могу перевернуться, я, получается, должен сначала выйти в ноль - продать 100 лотов, затем посмотреть в таблицу Купить/Продать и купить то кол-во которое в ней указано.Но у меня получается вот что:
Код
infoBuySell = GET_CLIENT_MARGINAL_BUY_SELL_INFO (firm_id, client_code, classcode, seccode,0)
limitCanSell = floor(GET_VALUE(infoBuySell,"CAN_SELL")/lotSize)
' переменная выдает limitCanSell = 100
подаю заявку на продажу 100 SBER. И снова проверяю:
infoBuySell = GET_CLIENT_MARGINAL_BUY_SELL_INFO (firm_id, client_code, classcode, seccode,0)
limitCanSell = floor(GET_VALUE(infoBuySell,"CAN_SELL")/lotSize)
' Переменная снова выдает limitCanSell = 100
А в таблице Купить/Продать написано 99! И Таблица обновляется только после того, как закончился расчет портфеля. Т.е. Во время расчета портфеля я не могу получить новые данные из этой таблицы, это так? И что же тогда делать?
Другой пример, у меня УДС больше нуля и limitCanSell выдает мне 200, я продаю 100, чтобы получить ноль и снова проверяю таблицу, чтобы проверить, а могу ли я купить еще 100:
Код
infoBuySell = GET_CLIENT_MARGINAL_BUY_SELL_INFO (firm_id, client_code, classcode, seccode,0)
limitCanSell = floor(GET_VALUE(infoBuySell,"CAN_SELL")/lotSize)
' Переменная выдает limitCanSell = 200
подаю заявку на продажу 100 SBER. И снова проверяю:
infoBuySell = GET_CLIENT_MARGINAL_BUY_SELL_INFO (firm_id, client_code, classcode, seccode,0)
limitCanSell = floor(GET_VALUE(infoBuySell,"CAN_SELL")/lotSize)
' Переменная выдает снова limitCanSell = 200
Сделать то сделал, но столкнулся со следующей проблемой:
если сразу после продажи/покупки ценной бумаги обратиться к этой таблице, она выдает старое значение, которые было до продажи/покупки, таблица Купить/Продать обновляется только на после того, как завершился цикл выполнения портфели я начался следующий. Это нормально?
не могу найти, к какой таблице можно обратиться в QPlie, чтобы получить кол-во лотов, которые еще можно купить на остаток средства с учетом плеча?
Чисто визуально я смотрю это в таблице "Состояние счета" (Меню "Торговля"->"Состояние счета"), выбираю от там нужный счет, нужный код клиента, режим Т2 и смотрю колонку "Купить", но через QPile не соображу, как туда добраться.