Sergey Gorokhov (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 68 69 70 71 72 73 74 75 76 77 78 След.
Несколько мониторов и getposition
 
Цитата
sam063rus пишет:
Вы сделали поддержку нескольких мониторов. А что насчет getposition() и setposition() ?
Михаил,
Вопрос не понятен, вроде все работает и на разных мониторах. что не так?
Два срабатывания onOrder при лимитной заявке
 
Здравствуйте,
onOrder срабатывает при каждом изменении заявки
В данном случае, скорее всего изменением было установка UID на заявке.
Это только предположение не более.
доступ к строкам таблицы изменений параметров, почему его нет?
 
Здравствуйте!

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
 
Николай,
Прошу прощения опечатка в имени
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
 
Николая,
Проблема в логике.
При первом срабатывании futures.sec_code ничего не содержит и условие
while futures.sec_code ~= stroka do
нормально срабатывает, когда у Вас 0.

Но при повторном срабатывании функции, в futures.sec_code уже есть запись "SiM5" так как она туда записалась при первом обращении к функции.
Поэтому при повторном вызове условие "while futures.sec_code ~= stroka do" уже нарушено и цикл не выполняется. Для решения проблемы, Вам нужно обнулять futures при каждом вызове функции pos.
Перепишите так:
Код
is_run = 1
fuc = "SiM5"

function OnStop()
   is_run = 0
end

function pos(stroka)
   local i = 0
   local futures = {}
      while futures.sec_code ~= stroka do
         futures = getItem("futures_client_holding", i)
         i = i+1
      end
   return futures.totalnet
end

function main()
   while is_run == 1 do
      j = pos(fuc)
      message(tostring(j),1)
      sleep(1000)
   end
end
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
 
Указанный код у нас работает.
Единственное изменение, определили переменные futures={}, is_run=1 и fuc='RIM5'
Уточните что Вы задаете в переменной fuc?
Также, уточните какое значение Вы видите в таблице "Позиции по клиентским счетам" в колонке "Тек.Чист. Поз" и какое в итоге значение попадает в переменную j?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
 
Цитата
Николай Бехтерев пишет:
а обращаться к таким таблицам через две точки?
да можно

Код
T={
T1={test="Hello!"},
T2={}
} 
message(T.T1.test,1)
GET_PARAM_EX, непонятно работает GET_PARAM_EX
 
3
Цитата
Sergey Gorokhov пишет:
и код контракта укажите SiM3
То есть SiM5
GET_PARAM_EX, непонятно работает GET_PARAM_EX
 
Цитата
Александр пишет:
в чем у меня ошибка?
В программе, перед строкой PROGRAM, добавьте строку
USE_CASE_SENSITIVE_CONSTANTS

и код контракта укажите SiM3
AddLabel
 
Здравствуйте,
Если Вы про метки, то ограничение 99 символов.
Как работает
 
Цитата
Серж пишет:
Имеется ввиду хронология среди однотипных колбеков?
Разнотипные колбеки придут в произвольном порядке, и не обязательно в том, в каком они бы пришли, не будь этой задержки, верно?
Да все верно сказанно
CreateDataSource()
 
В Quik данные приезжают в хронологическом порядке.
То есть
2. 0,1,2,...,n,n+1,n+2,пропуск.
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
 
Цитата
Николай Бехтерев пишет:
а можно ли сделать таблицу из таблиц?
да можно
T={
T1={},
T2={}
}
закрытие всех заявок на срочном рынке
 
Цитата
sam063rus пишет:
как ей пользоваться и все возможные к ней параметры
К сожалению, не представляется возможным, описать все возможные варианты, всех транзакций, всех бирж с которыми работает QUIK, ввиду непреодолимо гигантского их количества. Поэтому, частный случай, лучше смотреть в документаци той конкретной биржи, о которой идет речь.
Как работает
 
Цитата
sam063rus пишет:
а также, вы, таким образом, нам гарантируете, что ни один колбек не пропадёт/будет добавлен в очередь и когда-нибудь обработан?
если один колбек занял терминал, то он не получает данных с сервера.
как только отвиснет, получит пропущенные данные. таким образом, хронология восстановится.
закрытие всех заявок на срочном рынке
 
Цитата
latrop1 пишет:
А где можно документацию на "P2 роутер" поглядеть? (гугл по таким словам не то выдает)
на сайте биржи
http://moex.com/s444
закрытие всех заявок на срочном рынке
 
Цитата
latrop1 пишет:
Спасибо за ответ, стало чуть понятнее.
А почему тогда в Квике случай с "параметр не задан" не отрабатывает аналогично "P2 роутер", а требуется обязательно?
Такова реализация.
Как работает
 
Цитата
dimka пишет:
SetTableNotificationCallback() - я так понимаю устанавливает тоже колбэк на события в таблице ? Значит получается отрабатывая колбэк нажатия кнопки мыши - kill_all_order()... OnOrder() не сработает или я неправильно понял?
SetTableNotificationCallback тоже работает в основном потоке
Соответственно пока работает цикл в kill_all_order остальные колбеки не придут.
Соответственно, как уже было сказано, мы не рекомендуем выполнять в колбеках какие-либо тяжелые манипуляции.
Как работает
 
Цитата
dimka пишет:
1) Во время работы kill_all_order() будут срабатывать OnOrder(),OnTrade() ?
OnOrder сработает столько раз сколько изменится статусы заявок которые Вы снимаете
OnTrade вообще не сработает, так как Вы работаете с заявками а не со сделками.
Цитата
dimka пишет:
2) Если выполняется OnOrder() остальные On...()
Колбеки в LUA работают в одном потоке. пока один колбек занят остальные ждут. Именно поэтому мы не рекомендуем выполнять в колбеках какие-либо тяжелый манипуляции.
Цитата
dimka пишет:
3) Нельзя ли это осветить в документации ?
Что осветить?
CreateDataSource()
 
Здравствуйте,
После заказа данных нужно немного подождать, пока они закачаются
закрытие всех заявок на срочном рынке
 
Здравствуйте,
Вырезка из документации на P2 роутер:
Если параметр code (в Quik это ACCOUNT) не задан или его значение равно ‘%%%’, то производится удаление заявок для всех клиентских счетов.

Если параметр code_vcb (в Quik это BASE_CONTRACT) не задан или его значение равно ‘%’, то производится удаление заявок для всех контрактов.
Ошибка при запуске Луа-скрипта
 
Цитата
asteroid пишет:
В скриптах поменял все пути на адекватные.
Как и в прошлый раз, не факт что проблема в lua.
Проверьте все библиотеки и модули
Опционы
 
Цитата
Дмитрий пишет:
Цитата
Sergey Gorokhov пишет:
Вам нужно попросить брокера предоставить историю графиков по волатильности.
Значит, у брокера есть возможность накапливать и затем передавать клиентам историю за предыдущие дни не только цен сделок и объемов, но и любых других параметров из ТТП?
абсолютно верно
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Цитата
Николай Бехтерев пишет:
Код работает, но при выключении скрипта Quik подвисает.
Открою секрет, у Вас любой код будет подвисать при выключении если Вы не опишите событии OnStop условие выхода из цикла в main.
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Цитата
Николай Бехтерев пишет:
Буду рад, если есть поделитесь справочником (с описанием всех функций) к Lua на русском
LUA не мы придумали, документация есть в интернете www.lua.ru
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Цитата
Николай Бехтерев пишет:
В общем больше вопросов, чем ответов )
Объясняю. Конечный пользователь это лицо творческое, он может указать время срабатывания в произвольном формате.
Может так "20:00:00"
а может и так "200000"
Или еще как-то. В общем как ему вздумается.

В примере показана функция FixTime которая из произвольного формата времени, делает таблицу формата функции os.time
Которая в свою очередь переводит эту таблицу в количество секунд начиная с 1970 года.

Лучшим способом сравнить время является перевод его в секунды. Поэтому именно этот способ и был выбран.
Ели подход не нравится, пожалуйста можете сравнивать часы и минуты отдельно, это Ваше право.
Опционы
 
Цитата
sam063rus пишет:
а график улыбки волатильности нам тоже можно построить? )) или покупать для этого Stratvolat.dll?
График улыбки есть только в модуле Stratvolat.
Опционы
 
Цитата
Роман пишет:
Проблема в том что он отражает данные только в пределах одной торговой сессии!
Здравствуйте,
Это не проблема терминала QUIK. Это значит что Ваш брокер не предоставляет своим клиентам такую услугу.
Вам нужно попросить брокера предоставить историю графиков по волатильности.
Обращение к индикатору с разными параметрами.
 
Цитата
Дмитрий Минеев пишет:
Как это поможет решению моего вопроса?
переписать пример так, чтобы он генерировал функции, кажется сложнее, чем переписать так, чтобы была глобальная таблица, в которой хранились бы нужные данные о предыдущих значениях. Для каждого периода своя ячейка в таблице.
Опционы
 
Здравствуйте,
График Волатильности можно построить так же как и любой другой график по параметру из Таблицы Текущих Параметров (ТТП).
Первый вариант, в ТТП найти нужный опцион, найти колонку Волатильность, нажать на значении в этой колонке правой кнопкой мыши и выбрать График "Волатильность"
Второй вариант. меню "Экспорт данных" - "Графики". Выбрать "Добавить график (индикатор)" Нажать там "Новый источник" в левой части окна, выбрать нужный опцион. В правой выбрать "Таблица истории значений параметров", и выделить значение "Волатильность", после чего нажать Да.
Точно также можно построить график открытого интереса по фьючерсам, только параметр называется Количество открытых позиций
Обращение к индикатору с разными параметрами.
 
Цитата
Дмитрий Минеев пишет:
То, что вы описали - понятно. Но предложенный вами вариант не подходит. Пользователь в параметрах указывает интервал, за который будут считаться средние. Т.е. я заранее не знаю, сколько функций создавать. Есть ли другой выход? Или возможно как то создать динамический массив из функций?
Все зависит от Вашего воображения.
Перепишите пример так чтобы он запоминал последнее значение индикатора в переменной.
Данные за последние 5 свечей с объемами, Как прописать формулу в lua из qpile?
 
Здравствуйте,
Сейчас Вы написали только пару строк обращения к элементу таблицы, чего явно не достаточно для понимания того как работает Ваш код. Если хотите получить 5 свечек, то для этого сделайте так чтобы в таблице self.PriceSeries были эти самые 5 свечек
Обращение к индикатору с разными параметрами.
 
Здравствуйте,
Особенность индикатора EMA в том что для его расчета требуется знать свое предыдущее значение.
В нашем примере для этого используется механизм замыканий.
Так как для разных периодов Вы используете одну функцию, то происходит пересечения, когда функция с одним периодом берет предыдущее значение из функции с другим периодом.
Для решения проблемы, используйте две разные функции EMA
  if index == 1 then
EMA3   = _EMA()
EMA4   = _EMA()
line   = {}
  end

и далее по коду, для разных периодов используйте разные функции
Ускорение QPILE
 
Цитата
Роман пишет:
Скажите поддерживает ли система QPILE асинхронная обработка портфеля?
Просто у меня работает два портфеля и судя по времени второй запускается после того как обработается первый.
Здравствуйте,
Нет не поддерживает. И да QPILE портфели работают по очереди
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Здравствуйте,
Например так:

Код
START_TIME = "20:00:00"
WORK_DONE = false

   function FixTime(V)
      V=tostring(V)
      local Out = os.date("!*t",os.time())
      local len = string.len(V)
      if len>6 then
         Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)%p(%d%d)%p(%d%d)")
      elseif len==6 then
         Out.hour,Out.min,Out.sec  = string.match(V,"(%d%d)(%d%d)(%d%d)")
      elseif len==5 then
         Out.hour,Out.min,Out.sec  = string.match(V,"(%d)(%d%d)(%d%d)")
      end
      return Out
   end
   
function main()
   START_TIME=FixTime(START_TIME)
   
while true do
   if os.time()<os.time(START_TIME) then
      WORK_DONE=false
   elseif not WORK_DONE then
      message('время работать',1)
      WORK_DONE=true
   end
   sleep(1000)
end
end
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
 
Цитата
aidan1387 пишет:
Так, окей. Что вы подразумеваете под "после разрыва и установления связи, если отписать от заявок а потом подписаться и вызвать старт"? В вашем примере вы на старте приложения подписываетесь, на завершении - отписываетесь. Перезапуск приложения? Другого способа у вас там в примере нет. И, естественно, там без перезапуска ничего никуда не перезапрашивается.
Видимо мы говорим о разных примерах.
Я говорю про пример который можно скачать по указанной ранее ссылке, который называется API_Tester_DLG
Подписаться это кнопка "Subscribe"
Отписаться это кнопка "Unsubscribe"
Старт, это кнопка "Start"
И на этом примере все прекрасно работает. Там же Вы найдете исходные коды.
Цитата
aidan1387 пишет:
В какой момент он должен присылать мне историю?
В тот момент когда Вы ее запросите.

Еще раз повторю, посмотрите пример, потыкайте кнопки, воспроизведите разрыв связи.
Потом посмотрите код у себя.
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
 
Цитата
aidan1387 пишет:
Если б там был рабочий пример касательно моего вопроса, я б тут не писал.
Вот именно на том примере, который там, очень легко проверить, что после разрыва и установления связи, если отписать от заявок а потом подписаться и вызвать старт, то увидите все заявки которые были до разрыва.
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
 
Цитата
aidan1387 пишет:
Тут возникает еще вопрос: как получить историю более чем за день? Но, хотя бы с первым разобраться.
Никак, потому что биржа ее не хранит. Ее может хранить брокер и предоставлять клиентам в виде отчета.
Цитата
aidan1387 пишет:
Мне может отписываться надо когда есть соединение?
Если произошел разрыв связи, то считаем что это форс мажор, то есть аварийная ситуация.
А значит лучше всего отписаться и заказать все по новой.
Цитата
aidan1387 пишет:
Можно мне рабочий пример перезапроса без перезапуска моего приложения на псевдокоде хотя бы?
Все существующие примеры поставляются вместе с библиотекой. Ссылка была приведена выше.
Цитата
aidan1387 пишет:
По поводу каких-то фиксов не сказано ничего. 1.2 исправит мою проблему?
Рекомендация обновить библиотеку никак не связана с описанной проблемой.
Просто добрый совет, всегда использовать актуальные версии программ.
Ошибка при запуске Луа-скрипта
 
Цитата
sam063rus пишет:
))))))))))))))))))))))а я нигде не сказал, что я его использую. это всё Ваши мысли )))))))))))))))))))))))
Я не в курсе обстоятельств озвученной проблемы. Поэтому если не затруднит, уточните тему письма которое писали или дайте ссылку где Вы описывали суть проблемы.
Синхронизация состояния клиента TRANS2QUIK.dll с рабочим местом
 
Цитата
aidan1387 пишет:
Первый - запросить текущий стейт у рабочего места. Но, функции запроса текущей позиции или списка заявок и сделок нет.
Здравствуйте,
Есть TRANS2QUIK_START_ORDERS для получения текущих заявок и тоже для сделок TRANS2QUIK_START_TRADES
Цитата
aidan1387 пишет:
Версия TRANS2QUIK.dll: 1.1
Это старая версия, рекомендуем установить обновление до 1.2 с нашего сайта
http://www.quik.ru/depot/Trans2QuikAPI_1.2.rar
Ошибка при запуске Луа-скрипта
 
Цитата
sam063rus пишет:
Цитата
Sergey Gorokhov пишет:
Но как только путь где-либо поменять (например открыть другой скрипт из другой папки), то первый теряет свою папку и после перезапуска уже не запускается.
включаю квик, никаких других путей/открытых файлов/скриптов - НЕТ. возникает ошибка. алгоритм действий - отправить файл для анализа в арку->получить ответ, что у них это не воспроизводится->технично похерить тему.
То что у нас проблема не воспроизводится, не значит что мы ее закрыли.
Это значит что у нас не достаточно информации для определения причин сбоя.
Это могут быть какие-либо нюансы, которые Вы не указали, но они приводят к проблеме (может использование любимого Вами IDA Pro?)
А также просьба (пока еще) сдерживать эмоции и общаться культурно.
В какой таблице найти информацию о short
 
Здравствуйте,

Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ.
info.exe
 
Цитата
sam063rus пишет:
так ли
Тогда мы не будем отвечать на поставленные вопросы, потому что они касаются внутренней архитектуры терминала
info.exe
 
Цитата
sam063rus пишет:
Вопрос[ы]:
1. Для чего в главном файле квика info.exe секция экспорта?
2. значит ли это, что это сделано для того, что часть кода/плагинов писалась независимыми разработчиками и, соответственно, компания просто не стала раскрывать все исходники, а ограничилась лишь интерфейсом взаимодействия лишь с самыми необходимыми функциями?
3. значит ли это, что так сказать, IPluginContext - не совершенен?
Вы имеете в виду пункт меню Экспорт данных?
Если так то он для экспорта данных.
Но скорее всего имеется в виду что то другое, не так ли?
стабильность соединения
 
Цитата
Andrey пишет:
Эм почему-то ПК по вайфаю не подключается...))))точнее к сети подрубился, но без доступа к интернету, подвисает на идентификации и висит. При этом планшеты и телефоны, и ноут по вайфаю работают))))
ну это уже не к нам :)
стабильность соединения
 
Здравствуйте,
Виноват ли Wifi или нет, проверить достаточно просто.
Достаточно через кабель подключить ноутбук (на котором также наблюдается проблема) и протестировать некоторое время.

Раньше мы уже встречали ситуации когда именно при работе через WiFi возникали похожие проблемы (можно поискать на старом форуме) И качество WiFi связи тут абсолютно не причем.
Скорее проблема в каких-либо специфичных настройках на стороне самого роутера.
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Николай Бехтерев пишет:
Вводить третью промежуточную таблицу?

Смотря чего Вы хотите добиться.
Сейчас, в событии OnTransReply, Вы присваиваете значение table_order из переменной order, которая не существует.
То что она есть в событии OnTrade не значит что ее можно использовать где попало.
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Николай Бехтерев пишет:
Когда это table_order превращается в nil?
Вот здесь

Код
function OnTransReply()
   table_order = order
end
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
 
Цитата
Дмитрий пишет:
А как же это? Значит, можно и без них?
Троеточие означает переменное количество аргументов. Можно с ними можно и без них.
Я привел пример без троеточий
функция обратного вызова для SetUpdateCallback(), как понять, по какому инструменту она сработала?
 
пример функции от Михаила

Код
function mycallbackforallstocks(index,class,security) 
   message(tostring(index).. " " ..class .. " " .. security,1)
end

function DataSource(class,security,interval)
   local ds = CreateDataSource(class,security,interval)
   ds:SetUpdateCallback(function(index) mycallbackforallstocks(index,class,security) end)
   return ds
end

function main()
DataSource("TQBR","LKOH",INTERVAL_TICK)
   while not_stopped do
      sleep(1000)
   end
end
Страницы: Пред. 1 ... 68 69 70 71 72 73 74 75 76 77 78 След.
Наверх