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

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

Страницы: Пред. 1 ... 27 28 29 30 31 32 33 34 35 36 37 ... 79 След.
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Цитата
Quikos написал:
Я правильно понял, что нужно дождаться пока появится таблица заполнится и только потом вызвать SetUpdateCallback ?
я в настоящее время не использую тики,
Но для таблице обезличенных сделок (тиков) я сделал DDE клиента который стартует всегда при загрузки квика
и позволяет получать в фоновом режиме любые таблицы квика , например доску опционов, или таблицу обезличенных сделок.
--------------
еще использовал колбек onAllTrade , тоже работает нормально.
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Цитата
Kolossi написал:
Пардон, очепятка

while not ds or ds:Size()==0 do
sleep(50)
end

Ну еще счетчик циклов для повторной попытки загрузки
в приведенном выше скрипте эта проблема решается циклом
там же записываются доп параметры в таблицу ds
Кривые шибки в QLua
 
Цитата
Роман написал:
IsRun = true;

function OnInit()
  -- Здесь будет Ваш код для начальной инициализации
end;

function main()
  while IsRun do

  -- Здесь будет Ваш код,
  -- который будет выполнятся,
  -- пока скрипт не остановлен
  message("Hello, World!",1);

  sleep(1);
  end;
end;

function OnStop()
  -- Здесь будет Ваш код,
  -- который нужно выполнить
  -- перед остановкой скрипта
  IsRun = false;
end;
Попробуйте увеличить  sleep(1000);  
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
поправил код скрипта
Код
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1   = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2   = INTERVAL_TICK
------------------------
local function my_cb_CDS(idx,tabl)
message(tostring(tabl.sec)..","..tostring(idx),1)
Sleep(100);
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
   while not stopped do
   if tab1==nil then tab1 = CreateDataSource(code_class1, code_paper1, interval1);
      if tab1 then
       tab1.clas=code_class1; tab1.sec=code_paper1; tab1.int=interval1;
         tab1:SetUpdateCallback(function(idx) my_cb_CDS(idx,tab1) end)
      end
   end
   if  tab2==nil then tab2= CreateDataSource(code_class2, code_paper2, interval2);
      if  tab2 then
         tab2.clas=code_class2; tab2.sec=code_paper2; tab2.int=interval2;
         tab2:SetUpdateCallback( function(idx) my_cb_CDS(idx, tab2) end)
      end
   end
-------------------------
--   message(tostring(my_table1:Size()),1)
   sleep(1000)
   end
-------------------------
end -- end main()
function OnInit(script_path)
end

SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Переписал Ваш скрипт ,
но действительно,
если таблица обезличенных сделок не открыта,
то руками запускается со второго раза,
а автоматом - с первого.  
Очевидно это какая-то особенность или ошибка библиотеки  QLUA.
Код
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1   = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2   = INTERVAL_TICK
------------------------
local function my_cb_CDS(idx,tabl)
message(tostring(tabl.sec)..","..tostring(idx),1)
Sleep(100);
end
--------int main:---------------
function main()
   if tab1==nil then tab1 = CreateDataSource(code_class1, code_paper1, interval1);
      if tab1 then
       tab1.clas=code_class1; tab1.sec=code_paper1; tab1.int=interval1;
         tab1:SetUpdateCallback(function(idx) my_cb_CDS(idx,tab1) end)
      end
   end
   if  tab2==nil then tab2= CreateDataSource(code_class2, code_paper2, interval2);
      if  tab2 then
         tab2.clas=code_class2; tab2.sec=code_paper2; tab2.int=interval2;
         tab2:SetUpdateCallback( function(idx) my_cb_CDS(idx, tab2) end)
      end
   end
-------------------------
   while not stopped do
--   message(tostring(my_table1:Size()),1)
   sleep(1000)
   end
-------------------------
end -- end main()
function OnInit(script_path)
end

SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Цитата
Quikos написал:
Цитата
nikolz написал:
 Скрипт запускаете руками или автоматом с запуском квика?
Если автоматом, то в скрипте надо делать ожидание.
----------------
Проще, если вам нужны тики,
то просто подпишитесь на них через меню  и они будут приходить при старте квика без проблем.
Скрипт запускается полностью вручную.

Это хорошо, что можно подписаться через меню. Но это явный косяк в API.
чтобы понять причину надо смотреть ваш скрипт.
getMoney - значение полей таблицы
 
Цитата
Quikos написал:
Подскажите:

Цитата
Таблица параметров денежных лимитов

Параметр    Тип    Описание
money_open_limit    NUMBER    Входящий лимит по денежным средствам
money_limit_locked_nonmarginal_value    NUMBER    Стоимость немаржинальных бумаг в заявках на покупку
money_limit_locked    NUMBER    Заблокированное в заявках на покупку количество денежных средств
money_open_balance    NUMBER    Входящий остаток по денежным средствам
money_current_limit    NUMBER    Текущий лимит по денежным средствам
money_current_balance    NUMBER    Текущий остаток по денежным средствам
money_limit_available    NUMBER    Доступное количество денежных средств

Вызвал функцию getMoney() - она вернула условно следующие значения:

money_open_limit:                               0
money_limit_locked_nonmarginal_value:0
money_limit_locked:                            0
money_open_balance:                         1000
money_current_limit:                            0
money_current_balance:                      1000
money_limit_available:                          1000

Там где нули пока что не интересует, там, где 1000 руб - функия вернула корректно, при условии, что у меня не было открытых позиций.

Я специально купил одну акцию и стоиомсть портфеля начала соовтевтнно изменятся, но при вызове getMoney() - возвращается все та же - 1000.
Я закрыл сделку - стоимость изменилась - условно стала 998, но при вызове getMoney() - возвращается все та же - 1000.

Это так и должно быть ? Если да, то, как тогда получить кол-во доступных средств на конкретный данный момент в который вызвается getMoney() ? Под доступными средвами я имею ввиду, если у меня была  1000 на счете, я купил одну какую то акцию по 100 рублей - дсотупно мне стало 900, вот как эти 900 получить ?
выставили заявку - получили  колбек. OnMoneyLimit
------------------
заявка исполнилась и акции Вам зачислили -  сначала колбек OnDepoLimit, а потом OnMoneyLimit.
=============
если прочитаете таблицы раньше, то в ничего не изменится, так как еще не пришла информация.
 
SetUpdateCallback - не срабатывает после первого запуска скрипта
 
Цитата
Quikos написал:
Кто встречался с такой ситуацией ?

Заказываю тики через CreateDataSource:SetUpdateCallback().

Запускаю Квик:
-Загружаю скрипт.
-Запускаю скрипт.
-Скрипт вызывает CreateDataSource.
-CreateDataSource возвращает нулевую таблицу, что говорит о том, что данные придут позже в колбек.
-Колбек больше НИКОГДА не вызывается.

Выгружаю Скрипт и СРАЗУ же его запускаю - данные сразу же начинают приходить.

Кто косячит ? Я или криворукие разрабы ?
Скрипт запускаете руками или автоматом с запуском квика?
Если автоматом, то в скрипте надо делать ожидание.
----------------
Проще, если вам нужны тики,
то просто подпишитесь на них через меню  и они будут приходить при старте квика без проблем.
Маленький баг: звук сделки повторяется при запуске
 
Цитата
СергейК написал:
FYI проблема осталась и ситуация немного изменилась.
Раньше она проявлялась, если в этот день были сделки и менялся сервер подключения.
Сейчас у Открытия остался только 1 сервер. И если сегодня были сделки, то при повторном соединении звук сделки проигрывается всегда.
Т.е. это не потому, что сделки произошли за то время, когда соединения не было (заявок уже нет), а повтор старых.  
при повторном соединение обновляется информация за текущий день. снова приходят данные о заявках и сделках.
играет музыка, все встают, звучит трехкратное ура.  
Функция подключения к серверу
 
Цитата
Quikos написал:
Подскажите, после разрыва соединения, есть ли функция, которая опять начнет установку соединения ?
если установлен флаг "Восстановить связь автоматически", то квик начнет восстановление связи.
Проблема будет в диалоге идентификации и ввода кода с телефона.
Помогите написать скрипт на актуальном языке Lua
 
определить торговый или не торговый день,
а также есть ли догружаемые записи (это для тех кого волнует все или не все в таблицах свечей и обезличенных сделок)
можно по параметрам информационного окна.
getMoney - как понят, что это за Входные параметры ???
 
Цитата
Quikos написал:
У функции getMoney() - какие то не понятные параметры, которая она принимает:

из примера:
Цитата
   -- Параметры для запроса берутся из таблицы "Лимиты по дененым средствам"
   -- client_code = "Код клиента"
   -- firmid = "Фирма"
   -- tag = "Группа"
   -- currcode = "Валюта"
У меня в таблице лимиты по денежным средствам - из перечисленного есть только код клиента, который я естественно и так знаю. Все остальное вообще не понятно ничего.

Что за фирма ? Что за группа ? Кармен или машина времени ?
Валюта ?? Что валюта ? Рубли? Так и писать РУБЛИ ??

Для кого это описание написано ? Для ясновидящих ? А зачем оно им ?
надо смотреть описание таблиц в документации QLua
например,
Позиции по деньгам

Описание параметров таблицы «Позиции по деньгам»:  

ПараметрТипОписание
currcode STRING Код валюты
tag STRING Код позиции
firmid STRING Идентификатор фирмы
client_code STRING Код клиента
openbal NUMBER Входящий остаток
openlimit NUMBER Входящий лимит
currentbal NUMBER Текущий остаток  
currentlimit NUMBER Текущий лимит
locked NUMBER Заблокировано. Сумма средств, заблокированных под исполнение заявок клиента  
locked_value_coef NUMBER Стоимость активов в заявках на покупку немаржинальных инструментов
locked_margin_value NUMBER Стоимость активов в заявках на покупку маржинальных инструментов
leverage NUMBER Плечо
limit_kind NUMBER Срок расчётов. Возможные значения:  
  • положительные целые числа, начиная с «0», соответствующие срокам расчётов из
    таблицы «Позиции по деньгам»: «0» – T0, «1» – T1, «2» – T2 и т.д.;
  • отрицательные целые числа – технологические лимиты (используются для
    внутренней работы системы QUIK)
wa_position_price NUMBER Средневзвешенная цена приобретения позиции
orders_collateral NUMBER Гарантийное обеспечение заявок
positions_collateralNUMBER Гарантийное обеспечение позиций

Как заполняется размер таблицы исторических свечей ?
 
Цитата
Kolossi написал:
Quikos, если я поставлю заявку на покупку и она в итоге сработает, а потом куплю выставленную кем-то на продажу, т.е. совершу две покупки - одну лимитную, одну по рынку, то в ленте сделок эти две сделки будут обозначены одна как "покупка" другая как "продажа".
Потому что в любой сделке присутствует и покупка и продажа в равных долях,  а в ленте отражается та часть сделки которая "по рынку". Как-то так.
расскажу немного иначе.
--------------------------
Если заявка стоит в стакане т е зарегистрирована в очереди на сделку,
то сделка по ней совершится лишь тогда, когда ее цена  станет лучшей на рынке.
и появится встречная заявка по лучшей цене, т е заявка по рыночной цене.
---------------------
Появившаяся встречная заявка и будет инициатором сделки.
и ее направление (купить/продать) будет отмечено в таблице обезличенных сделок.
-------------------
Можно сказать, что сделка называется по направлению заявки, которая двигает рынок.
----------------
Поэтому есть такое выражение "рынок двигают заявки по рыночной цене"
---------------
Очевидно, что заявка на покупку двигает рынок вверх, а на продажу -вниз.
Как заполняется размер таблицы исторических свечей ?
 
Цитата
Kolossi написал:
Цитата
nikolz написал:
 
Цитата
Kolossi  написал:
 Тут не соглашусь. Я  практически не пользуюсь индикаторами после десятка лет экспериментов. Не буду сейчас освещать причины.
Но использую ряд параметров которые делают расчет "от текущего времени назад" Например "изменение объема за последние пять минут"
или "скорость изменения спроса/предложения за последний час. Для этого не подходят пятиминутные или часовые свечи.
Повторю свой вопрос: как узнать что тиковая база получила все исторические данные и идет прием текущих. По первому onAllTrade?
 Полагаю, что решить Вашу задачу для оценки изменения параметров на интервале в 5 минут вполне хватило бы и 1 минутных свечей.
 Вы серьезно это предлагаете? Вычисления с точностью +/- 20% ? Спасибо, не надо ))
Но.
Если мне еще расскажете как получить значение количества сделок "по рынку" не используя ленту сделок я обещаю подумать.

P.S. Только про начинающих и циклы притормозите, перебор слегка.
Я не заставляю Вас что-то делать иначе,
просто рассказал Вам свой опыт решения проблем при создании систем РВ для обработки данных.
--------------------------
Например, могу вычислить по тикам любые параметры без циклов назад,
результат вычисления параметра на текущий момент,  вне зависимости от длины истории,
всегда готов не более, чем через 0.001 секунду.  
----------------------------------------
Относительно Вашего утверждения о точности +-20% , оно голословное.
---------------------------------
Если нет, то покажите результаты теста и я с Вами соглашусь.
как в луа брать данные из excel?
 
поясните, вы будете брать данные из файла или из excel таблицы.
-----------------------
если из файла, то как Вы в него хотите записывать.
Как заполняется размер таблицы исторических свечей ?
 
не мог понять, почему Вас волнует кончили заполнять таблицу или нет.
Но последнее сообщение о расчете изменения параметров взад внесло ясность.
---------------------
поясняю почему.
проблема в том , что для расчета параметров большинство из посетителей этого форума использует цикл назад в историю.
К сожалению это классическая ошибка в построении систем реального времени , к которым относятся торговые роботы, большинства пишущих и не только начинающих.
-----------------
Ранее говорил, что циклы в таких системах - это очень плохо.
Если вы научитесь мыслить (писать свои алгоритмы без таких циклов) то Вас не будет волновать когда же все данные поступят.
Как заполняется размер таблицы исторических свечей ?
 
Для тиков проблема решается просто.
Есть два варианта приема данных
В первом случае принимаем всю таблицу от начала до текущей
Во втором принимаются  пропущенные данные.
-----------------
В обоих случаях проверяем время либо номер принятой колбеком сделки и сравниваем его с последним в таблице и текущим временем сервера
Как заполняется размер таблицы исторических свечей ?
 
Цитата
Kolossi написал:
Цитата
nikolz написал:
но с тиками проблема в том, что они уж точно придут пакетом сразу куча сделок и все в один текущий момент
физически терминал будет перелопачивать "вчерашний день", так как куча сделок уже прошла.
Полагаю что тики как правило пытаются использовать начинающие, но реально они имеют ценность лишь в HFT и в дата центре и скорее всего не в терминале КВИК.
Тут не соглашусь. Я не практически не пользуюсь индикаторами после десятка лет экспериментов. Не буду сейчас освещать причины.
Но использую ряд параметров которые делают расчет "от текущего времени назад" Например "изменение объема за последние пять минут"
или "скорость изменения спроса/предложения за последний час. Для этого не подходят пятиминутные или часовые свечи.
Повторю свой вопрос: как узнать что тиковая база получила все исторические данные и идет прием текущих. По первому onAllTrade?
Полагаю, что решить Вашу задачу для оценки изменения параметров на интервале в 5 минут вполне хватило бы и 1 минутных свечей.
Но спорить не буду, Ваше право считать по тикам.
Как заполняется размер таблицы исторических свечей ?
 
но с тиками проблема в том, что они уж точно придут пакетом сразу куча сделок и все в один текущий момент
физически терминал будет перелопачивать "вчерашний день", так как куча сделок уже прошла.
Полагаю что тики как правило пытаются использовать начинающие, но реально они имеют ценность лишь в HFT и в дата центре и скорее всего не в терминале КВИК.
Как заполняется размер таблицы исторических свечей ?
 
Цитата
Kolossi написал:
Цитата
nikolz написал:
Если Вам очень важно знать все ли свечи Вы приняли,
то просто проверьте дату и время последней и сравните с текущем временем и датой.
nikolz,  а как для ds с тиковым интервалом?
Тики, если не ошибаюсь,  это таблица обезличенных сделок.
С ними проще работать используя колбек onAllTrade.
Можно также использовать дату время  сделки, и дату время сервера ну и текущую дату время.
Ищу программиста для написания индикатора OSMA
 
Цитата
Дмитрий Куканов написал:
Цитата

предпоследний график - MACD
последний - это OsMa.  Раскраску полностью не делал.
а это источник:
 
SetCell crash, Устновка цветов не по порядку вызывает краш Quik а
 
Цитата
Mikhail написал:
Да понятное дело, что при наличии промежуточных колонок все работает.
Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил?
Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков.
На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
я хотел бы Вам заметить,
что делать так:
  for k=1,15 do
  SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
     end
для таблице в которой Вы определили лишь 0 и 15 столбец не корректно.
Предполагаю, что разработчики не учли слишком низкий уровень пользователей и не установили защиту от ...
которой в природе не существует
CreateDataSource("TQBR", "VTBR", 1), Получаю ошибку: TQBR - unknown class code.
 
Цитата
Kolossi написал:
CreateDataSource
INTERVAL_M1 - имеет тип NUMBER и равен 1.
В луа нет понятия "константа"
Как заполняется размер таблицы исторических свечей ?
 
Цитата
Quikos написал:
Подскажите пожалуйста, когда я запрашиваю таблицу исторических свечей через CreateDataSource, то таблица сразу приходит заполненная окончательным размером или размер меняется по мере заполнения ?

Теоретически таблица сразу должна заполнится итоговым размером. Правильно ?
Нет.
Начнем опять от печки.
Сервер посылает терминалу квик(клиенту) запрошенные данные пакетами.
Когда терминал принимает пакет данных он начинает их раскладывать по архивам(таблицам).
Вы запросили свечи .
сервер послал вам столько, сколько уместилось в пакет.
Терминал вытаскивает по одной из пакета и кладет их в таблицу,
при этом в Size вы получите текущее число элементов в таблице.
----------------
Если Вы принимаете свечи через колбек, то номер свечи будет равен номеру последней вытащенной терминалом.
Иначе может быть так, что Вы получите результат лишь после того как терминал разберет весь пакет.
-----------------
если число свечей много и все они не уместились в стандартный пакет , то сервер может посылать их несколькими пакетами
и тогда терминал будет принимать их также  несколько раз.
в итоге Вы можете получить несколько значений size.
-----------------------------------
Но так скорее всего не будет, либо будет пр первом подключении к серверу.
---------------------
Если Вам очень важно знать все ли свечи Вы приняли,
то просто проверьте дату и время последней и сравните с текущем временем и датой.
Может ли такое быть
 
Цитата
Айдар написал:
Допустим, крайняя сделка была по цене ask - в данном случае цена поднялась вверх. Но может ли такое быть, что если  далее сделка тоже по ask - но цена опустилась вниз? При просмотре сохраненных данных иногда выявляются такие моменты. Вот хочу понять, или у меня в коде косяк или что-то другое
Может.
Все банально просто.
Вам присылают не все стаканы и не все Last в TTT.
------------------------
Посмотрите эту ситуацию в таблице обезличенных сделок.
Там должны быть все сделки.
SetCell crash, Устновка цветов не по порядку вызывает краш Quik а
 
Цитата
Mikhail написал:
Да понятное дело, что при наличии промежуточных колонок все работает.
Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил?
Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков.
На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
вообще-то этот вылет уже был на форуме и я дал точно такое же решение.
предполагаю причина банальна.
Так как квик вылетает, то это не учтенная  изначально разработчиками QLUA особенность VMLua.  
Но проявилась она на 9 версии, потому что в этой версии что-то радикально изменили.
SetCell crash, Устновка цветов не по порядку вызывает краш Quik а
 
Цитата
Mikhail написал:
Вот такой код вызывает краш Квика версии 9.7.1.10 (в версии 8.13 все было ок) после остановки работы скрипта и закрытия созданного им окна.
Предыстория - в связи с настойчивой рекомендацией БКС обновил квик. Пр запуске моего скрипта на новой версии Квик стал вылетать. Стал разбираться - и вот.
Суть в том, что если имеется пропущенная колонка (переменная row_color=15 а не 1) то при остановке скрипта происходит вылет квика. Если поставить row_color=1 то все работает ок.
Код
   function   main ()
is_run =  true 
row_color =  15 

t_id  =   AllocTable ()
 AddColumn (t_id,  0 ,  "0" ,  true , QTABLE_STRING_TYPE,  15 )
 AddColumn (t_id, row_color, tostring(row_color),  true , QTABLE_STRING_TYPE, 11 )

   t  =   CreateWindow (t_id)
    SetWindowPos (t_id,  0 ,  0 ,  500 ,  500 )

     for  i  =   1 ,  15   do 
       InsertRow (t_id, i)      
    end 
   
       for  k =  1 , 15   do 
          SetCell (t_id, k,  0 , tostring(k)) 
       end       


 while  is_run  do 

          for  k =  1 , 15   do 
    SetColor (t_id, k, row_color,  RGB ( 0 , 255 , 0 ),  RGB ( 0 , 0 , 0 ),  RGB ( 255 , 255 , 255 ),  RGB ( 0 , 0 , 0 )) --Crash here 
       end 
 sleep ( 500 )
 end 
 end 
  
добавьте строку так:
Код
function main()
is_run=true
row_color=15

t_id = AllocTable()
 for i=0,15 do  AddColumn (t_id,i, "", false, QTABLE_STRING_TYPE,8)  end -- добавили
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
Можно ли в QUIK торговать на демо счете?
 
пардон, ответ по ошибке не в тот адрес
я отвечал автору темы
5ton
Можно ли в QUIK торговать на демо счете?
 
JIMB,
Не в обиду будет сказано, но Ваш вопрос очень не конкретный и очень наивный.
Посмотреть котировки это не тоже самое что посмотреть оборот торгов за 15 лет.
------------------------------
Но даже если вы и посмотрите то что в этом толку?
-----------------------
Вы как собираетесь отлаживать свой алгоритм торговли на истории в 15 лет?
И предположу еще и на тиках.
-----------------------
Вы для начала посмотрите какие есть торговые платформы которые позволяют отлаживать алгоритм.
Сколько они стоят и что на них конкретно кто-либо разработал.
-----------------------------
И поймете, ответ на свой вопрос.
Помогите написать скрипт на актуальном языке Lua
 
Я бы вообще бы вынес описание инструментов в текстовый файл,
чтобы можно было менять набор не зная луа и не редактируя скрипт.
Можно ли в QUIK торговать на демо счете?
 
можно, но...
Помогите написать скрипт на актуальном языке Lua
 
Цитата
Forbius написал:

Не такой популярный язык LUA, обзвонил всех знакомых кто в IT, ни кто этот язык не знает... интуитивно  обычной логикой тоже наскоком его не понять.
https://eligovision.ru/media/upload/lua.pdf
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
если Вы не догнали, то вот копия моего ответа на ваш вопрос темы:
---------------
Если у брокера есть ваши деньги либо активы колбеки будут при загрузке и обновлении экрана.
Ну а если ничего нет, то на экране тоже все пусто.
-------------------------
Я Вам уже сказал что данные приходят самые свежие.
Если Вы уже купили что-то то это уже есть в таблице
а таблица всегда придет вся
никто не станет вам посылать по кусочкам.
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
если у Вас теперь нет позиции, то на каком  эккаунте есть позиции?
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
Цитата
Рустем написал:
После перезапуска терминала, если автозапускается скрипт, то ф-я getNumberOf("futures_client_holding") выдет 0, хотя на эккаунте есть позиции.Есть какой-то способ проверить, что все данные пользоватьеля подгузились ?
вообще-то я для Вас написал и скопировал из документации.
------------------------
Я ответил на ваш вопрос, который вы задали в начале темы.
--------------
После перезапуска терминала, если автозапускается скрипт, то ф-я getNumberOf("futures_client_holding") выдет 0, хотя на эккаунте есть позиции.
Есть какой-то способ проверить, что все данные пользоватьеля подгузились ?
------------------
Теперь Вы изменили свой вопрос и с претензиями что Вам на него не ответили.
--------------------
прикольно, что вам помогают, а вы с претензиями что  не врубаетесь и виновато зеркало.
Есть смысл делать так ? Это экономит ресурсы ?
 
Цитата
Nikolay написал:
Если надо обработать много (много) в цикле, то да. В обычной практике - это просто дело вкуса и привычки.
Код
   local  k  =  10local s  =   100 

 for  i  =   1 ,  10000000   do 
    k, s  =   math.max (k, s),  math.min (k, s)
    k, s  =  k * i, s * i
    k, s  =   math.min (k, s),  math.max (k, s)
 end   
[Done] exited with code=0 in 2.068 seconds


Код
   local  math_max  =  math.max
 local  math_min  =  math.min

 local  k  =   10 
 local  s  =   100 

 for  i  =   1 ,  10000000   do 
    k, s  =  math_max(k, s), math_min(k, s)
    k, s  =  k * i, s * i
    k, s  =  math_min(k, s), math_max(k, s)
 end   

[Done] exited with code=0 in 1.597 seconds
этот пример очень плохой
результат его запуска показывает что ускорение всего в 1.5 раза.
-----------
в этом тесте много накладных расходов не связанных с данным вопросом.
если же интересует именно присвоение функции локальной переменной то
надо делать лишь эти функции  т е
сравнивать
k, s  =   math.max (k, s),  math.min (k, s)
и
  k, s  =  math_max(k, s), math_min(k, s)
-------------------
в этом случае получаем  0.6 мкс и 0.2 мкс т е 3 раза
Есть смысл делать так ? Это экономит ресурсы ?
 
Цитата
Евгений написал:
Скомпилированный скрипт индикатора ускорит загрузку квика ? Если например там открыто 30 графиков с этим индикатором ?
нет.
"комплиляция" скрипта луа - это не создание машинного кода,
а замена текcта байт-кодом,
это делает и сам квик в момент загрузки скрипта
время на это уходит менее секунды.
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
Цитата
Рустем написал:
Цитата
nikolz написал:

Если у брокера есть ваши деньги либо активы колбеки будут при загрузке и обновлении экрана.
Вопрос же не в том, приходят ли вообще колбеки.
Да, они как-то приходят.
Но по ним нельзя понять состояние портфеля.

За время отсутствия коннекта позиция могла быть продана или куплена по ранее размещенной в системе заявке, маржинколу, дейстями юзера и т.д. и т.п.

Программа запустилась при старте QUIK.
Да, пришла пачка колбеков, но в ней нет колбека по конкретной позиции, скажем "CNZ2", которой программа активно торгует.
Как программа может понять что это означает:
- в портфеле нет позиций "CNZ2" и  ждать бесполезно
или
-  колбек по данной позиции еще просто не успел прийти и  надо еще подождать  ?
фантазия не имеет границ.
Вы придумываете как спать на потолке.
данные приходят блоками, а это не одно число а много.
Я Вам уже сказал что данные приходят самые свежие.
Если Вы уже купили что-то то это уже есть в таблице
а таблица всегда придет вся
никто не станет вам посылать по кусочкам.
-------------------
Не надо придумывать то, что не бывает никогда.
================
По Вашим рассказам могу сделать вывод, что у вас либо плохой канал связи либо перегружен процессор.
Ищите решение Ваших проблем в этом направлении а не придумывайте сказки.
Как из Quik Junior сделать рабочий терминал?
 

"В половине двенадцатого с северо-запада, со стороны деревни Чмаровки, в Старгород вошел молодой человек лет двадцати восьми.

За ним бежал беспризорный.

— Дядя! — весело кричал он. — Дай десять копеек!

Молодой человек вынул из кармана налитое яблоко и подал его беспризорному, но тот не отставал.

Тогда пешеход остановился, иронически посмотрел на мальчика и воскликнул:

— Может быть, тебе дать еще ключ от квартиры, где деньги лежат?

Зарвавшийся беспризорный понял всю беспочвенность своих претензий и немедленно отстал."

Ввод собственных данных в виде индикатора в квик, индикатор для квик
 
1) Начните с учебника по программированию на луа.
Для освоения Lua возьмите редактор текста SciTe.
В нем встроен отладчик и возможность запуска скиптов луа.
------------------------
2) Напишите свой алгоритм в редакторе и исполните его.
------------------------
3) изучите описание библиотеки QLUA и перепишите свой скрипт с учетом функций библиотеки.
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
Цитата
Рустем написал:
Цитата
nikolz написал:

----------------
При подключении,  сервер передает клиенту всю необходимую для него информацию.
-------------------------------
Если у Вас есть деньги или активы на фьючерсах, то вы получите по ним информацию.
------------------------
при приходе этой информации вызывается соответствующий колбек.
------------------------
Если колбеков не было то и в таблицах будет пусто.
---------------------
Т е не было колбеков - ждемс.
-----------------------
Пришли данные вызываются колбеки.
------------------
Для фьючерсов  это:
 OnFuturesClientHolding - изменение позиции
 OnFuturesLimitChange - изменение ограничений
 При этом информация в них самая свежая,
свежее только в яме на бирже.
------------------

Спасибо что потратили время и постарались разжевать.
Но я не нашел в нем ответа на мой вопрос:

Подключился к серверу и жду колбеков.
Их все нет и нет.
Как понять что это означает:
- в портфеле нет позиций и ждать бесполезно
или
- оно еще просто не успело прийти и надо еще подождать ?


Ваше предложение
Цитата
getInfoParam( "SERVERTIME")=="" do sleep(1000) end --ждемс
не работает - я приводил выше логи, которые показывают что даже если значение не пустое, это не означает что QUIK уже все получил и выдает верные значения.

Предложение  Nikolay  
Цитата
процесс ожидания можно построить на том, чтобы время последнего переданного пакета "догнало" время сервера.
тоже не работает, т.к. значения полей совпадают и запаздывают одновременно.(тоже видно по приведенным логам)
Можно было бы сверять с локальным временем, но и тут засада.
Время серверов (QUIK же к разным серверам брокера может подключиться) отличается от локального. Бывает что на несколько секунд (это при том что на локальной машине стоит активная синхронизация).
Поэтому "запаздывание" можно отловить только с точностью до нескольких секунд.
Это означает что мы не можем распознать наличие небольшого запаздывания.
Т.е. опять же, получим от QUIK недостоверную инфу о состоянии портфеля.
Вы невнимательно прочитали.
Если у брокера есть ваши деньги либо активы колбеки будут при загрузке и обновлении экрана.
Ну а если ничего нет, то на экране тоже все пусто.
Что делать?
Звонить брокеру и выяснять почему Вас кинули.
Ищу программиста для написания индикатора OSMA
 
Судя по первой строке это мувинг.
Дайте ссылку на описание индикатора.
напишу, если будет понятно .  
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
Цитата
Рустем написал:
Цитата
nikolz написал:

колбеки есть.
для futures_client_holding
это OnFuturesClientHolding(TABLE fut_pos)

И как они помогуют понять, что завершилась передача данных по портфелю ?

Если это событие не пришло - то как понять что это означает:
- в портфеле нет позиций
или
- оно еще просто не успело прийти ?
т е Вам разжевать?
----------------
Жуем.
При подключении,  сервер передает клиенту всю необходимую для него информацию.
-------------------------------
Если у Вас есть деньги или активы на фьючерсах, то вы получите по ним информацию.
------------------------
при приходе этой информации вызывается соответствующий колбек.
------------------------
Если колбеков не было то и в таблицах будет пусто.
---------------------
Т е не было колбеков - ждемс.
-----------------------
Пришли данные вызываются колбеки.
------------------
Для фьючерсов  это:
  • OnFuturesClientHolding - изменение позиции
  • OnFuturesLimitChange - изменение ограничений
При этом информация в них самая свежая,
свежее только в яме на бирже.
------------------

Позиции по клиентским счетам (фьючерсы)

ПараметрТипОписание
firmid STRING Идентификатор фирмы
trdaccid STRING Торговый счет
sec_code STRING Код фьючерсного контракта
type NUMBER  Тип лимита. Возможные значения:  
  • «0» – не определён;
  • «1» – основной счет;
  • «2» – клиентские и дополнительные счета;
  • «4» – все счета торг. членов
startbuy NUMBER Входящие длинные позиции
startsell NUMBER Входящие короткие позиции
startnet NUMBER Входящие чистые позиции
todaybuy NUMBER Текущие длинные позиции
todaysell NUMBER Текущие короткие позиции
totalnet NUMBER Текущие чистые позиции
openbuys NUMBER Активные на покупку
opensells NUMBER Активные на продажу
cbplused NUMBER Оценка текущих чистых позиций
cbplplanned NUMBER Плановые чистые позиции
varmargin NUMBER Вариационная маржа
avrposnprice NUMBER Эффективная цена позиций
positionvalue NUMBER Стоимость позиций
real_varmargin  NUMBER Реально начисленная в ходе клиринга вариационная маржа. Отображается с  точностью до 2 двух знаков. При этом, в поле «varmargin» транслируется  вариационная маржа, рассчитанная с учетом установленных границ изменения цены  
total_varmargin  NUMBER Суммарная вариационная маржа по итогам основного клиринга начисленная по  всем позициям. Отображается с точностью до 2 двух знаков
session_statusNUMBER Актуальный статус торговой сессии. Возможные значения:  
  • «0» – не определено;
  • «1» – основная сессия;
  • «2» – начался промклиринг;
  • «3» – завершился промклиринг;
  • «4» – начался основной клиринг;
  • «5» – основной клиринг: новая сессия назначена;
  • «6» – завершился основной клиринг;
  • «7» – завершилась вечерняя сессия
Ограничения по клиентским счетам:

ПараметрТипОписание
firmid STRING Идентификатор фирмы
trdaccid STRING Торговый счет
limit_type NUMBER Тип лимита. Возможные значения:  
  • «0» – «Денежные средства»;
  • «1» – «Залоговые денежные средства»;
  • «2» – «По совокупным средствам»;
  • «3» – «Клиринговые денежные средства»;
  • «4» – «Клиринговые залоговые денежные средства»;
  • «5» – «Лимит открытых позиций на спот-рынке»;
  • «6» – «Суммарные залоговые средства в иностранной валюте (в рублях)»;
  • «7» – «Залоговые средства в иностранной валюте»
liquidity_coef NUMBER Коэффициент ликвидности
cbp_prev_limit NUMBER Предыдущий лимит открытых позиций на спот-рынке»
cbplimit NUMBER Лимит открытых позиций
cbplused NUMBER Текущие чистые позиции
cbplplanned NUMBER Плановые чистые позиции
varmargin NUMBER Вариационная маржа
accruedint NUMBER Накопленный доход  
cbplused_for_orders NUMBER Текущие чистые позиции (под заявки)
cbplused_for_positions NUMBER Текущие чистые позиции (под открытые позиции)
options_premium NUMBER Премия по опционам
ts_comission NUMBER Биржевые сборы
kgo NUMBER Коэффициент клиентского гарантийного обеспечения
currcode STRING  Валюта, в которой транслируется ограничение
real_varmargin NUMBER Реально начисленная в ходе клиринга вариационная маржа. Отображается с  точностью до 2 двух знаков. При этом в поле «varmargin» транслируется  вариационная маржа, рассчитанная с учетом установленных границ изменения цены

Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
Цитата
Рустем написал:
Цитата
Kolossi написал:
Интересно, если CreateDataSource получает, к примеру, часовую свечу с временем текущего часа равной текущему часу сервера, можно ли считать что загрузка завершена?
Неизвестна последовательность загрузки данных.
Скорее всего она вообще не определена.
То, что загрузилась последняя свеча, не означает что данные по портфелю загрузились.
Если бы последовательность данных была предопределенной, то разработчики не хранили бы скромное молчание в ответ на вопрос "как узнать что все данные загрузились ?", а просто бы указали на какие данные надо смотреть, чтобы быть уверенным, что все остальные дынные уже загрузились.

А всего-то надо сделать кол-бек ф-ю onDataLoaded()
И никаких проблем с совместимостью в зад это не создаст :)
колбеки есть.
для futures_client_holding
это OnFuturesClientHolding(TABLE fut_pos)
Удастся ли регулярно переносить исторические данные с другого компьютера?
 
если версия квика одинаковая, то проблем нет.
QUIK 10, Ошибки, зависания и пр.
 
Все просто, если ошибки на уровне локального кода функций, то это модификация,
а если ошибки на уровне метода, то это новая версия.
Очевидно, что 9-я с ошибками на уровне метода.
И ее на уровне кода функций уже не исправить.
QUIK 10, Ошибки, зависания и пр.
 
и еще, учтите, что номер getItem считает от 0,
т е чтобы правильно прочитать 1
надо записать так:
Код
if getNumberOf("depo_limits")>1  then  _tab = getItem("depo_limits", 1) end
QUIK 10, Ошибки, зависания и пр.
 
Цитата
Quikos написал:
  _tab = getItem("depo_limits", 1)
попробуйте так:
Код
if getNumberOf("depo_limits")>0 then  _tab = getItem("depo_limits", 1) end
Qlua - тупо вешает Квик
 
Если Вы задаете вопрос с целью получить помощь, то выкладывайте свой скрипт.
иначе это просто бла-бла-бла.  
Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?, Как из скрипта lua узначть что терминал QUIK загрузился полностью и подгрузил данные эккаунта ?
 
Цитата
Рустем написал:
Уважаемые,

После перезапуска терминала, если автозапускается скрипт, то ф-я getNumberOf("futures_client_holding") выдет 0, хотя на эккаунте есть позиции.
Есть какой-то способ проверить, что все данные пользоватьеля подгузились ?
попробуйте так:
while  getInfoParam( "SERVERTIME")=="" do sleep(1000) end --ждемс
Страницы: Пред. 1 ... 27 28 29 30 31 32 33 34 35 36 37 ... 79 След.
Наверх