не могу найти, к какой таблице можно обратиться в QPlie, чтобы получить кол-во лотов, которые еще можно купить на остаток средства с учетом плеча?
Чисто визуально я смотрю это в таблице "Состояние счета" (Меню "Торговля"->"Состояние счета"), выбираю от там нужный счет, нужный код клиента, режим Т2 и смотрю колонку "Купить", но через QPile не соображу, как туда добраться.
не могу найти, к какой таблице можно обратиться в QPlie, чтобы получить кол-во лотов, которые еще можно купить на остаток средства с учетом плеча?
Чисто визуально я смотрю это в таблице "Состояние счета" (Меню "Торговля"->"Состояние счета"), выбираю от там нужный счет, нужный код клиента, режим Т2 и смотрю колонку "Купить", но через QPile не соображу, как туда добраться.
Добрый день.
Получить данную таблицу ни при помощи qpile, ни qlua нельзя. Однако данный параметр "Купить" можно получить из таблицы "купить/продать" клиентского портфеля.
Сделать то сделал, но столкнулся со следующей проблемой:
если сразу после продажи/покупки ценной бумаги обратиться к этой таблице, она выдает старое значение, которые было до продажи/покупки, таблица Купить/Продать обновляется только на после того, как завершился цикл выполнения портфели я начался следующий. Это нормально?
например у меня в портфеле 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
Вот куда-куда я не программист, но считаю что это нормально. Во-первых не понятна суть фразы-сразу после сделки. Речь о новой строке в таблице сделок? Думаю здесь кроется приоритет отправки данных с сервера клиентуклиенту... Простая аналогия : Заезжаете на заправку и хотите полный бак. Только после его заправки (сделка) идёте (задержка) за сдачей от предоплаты (лимиты). Возможно стоит указать в коде sleep перед очередной проверкой параметра после сделки, я в этом не секу.
например у меня в портфеле 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
А в таблице уже 99!
А может не стоит париться и всегда отнимать один лот, чтобы наверняка?
сергей пишет: Вот куда-куда я не программист, но считаю что это нормально. Во-первых не понятна суть фразы-сразу после сделки. Речь о новой строке в таблице сделок? Думаю здесь кроется приоритет отправки данных с сервера клиентуклиенту... Простая аналогия : Заезжаете на заправку и хотите полный бак. Только после его заправки (сделка) идёте (задержка) за сдачей от предоплаты (лимиты). Возможно стоит указать в коде sleep перед очередной проверкой параметра после сделки, я в этом не секу.
В qpile нет sleep-а, кажется, но я пробовал гонять пустые циклы, задерживая на 3-4 секунды, не помогает, таблица Купить/Продать обновляется только после завершения расчета всего портфеля
Пока сделал за два циклы - сначала продаю половину, чтобы выйти в ноль, затем перезапускаю портфель, чтобы обновилась таблица Купить/Продать, получаю новые данные и докупаю сколько нужно.