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

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

Страницы: 1
Как работать с битовыми флагами?, Как получить бит из битогового флага?
 
Цитата
awkozlov написал:
Код
   function   CntTradesSellPosition (zCLASSCODE,zSECCODE)
cnt =  0 
    local  TableName =  'trades' 
    local  rows_total  =   getNumberOf (TableName)
    for  r = rows_total -  1 ,  0 ,  -  1    do 
       local  table_row =  getItem (TableName,r)
       --message(tostring(table_row.flags));stop() 
       if  table_row.class_code =  = zCLASSCODE  and  table_row.sec_code =  = zSECCODE  and  table_row.flags =  =  36   then   -- сделка продажа 
         cnt = cnt +  1 
       end 
    end 
 return  cnt
 end   

Пишу как самоучка, но мне как-то сложно (невозможно) вытаскивать из битовых флагов эти нужные значения, которые там закодированы в двоичной системе.
В частности мне нужно определить только тип заявки ордера Buy или Sell.

Я так и не нашёл нигде пример алгоритма получения этих битовых значений, поэтому беру 10-тичные числа, но это кривовато, ибо по причине изменения других свойств и числа будут другие.
Вот я методом научного тыка определил коды для продаж  и второй флаг (бит) принимает разные значения:
64 = 1000000
36 = 100100
28 = 11100
1048604 = 100000000000000011100 - Продажа от стоплосса

Прошу, измените мой код, чтобы он нормально обрабатывал эти битовые флаги.

Отвечу, если кому-то еще актуально.
Есть отдельный набор функций "Функции для работы с битовыми масками в структурах данных". В документации по QLUA, обычно идет в комплекте с терминалом.
Для проверки статуса/состояния нужного флага, используется функция "BOOLEAN bit.test(NUMBER х, NUMBER n)". И код приобретает простой вид:


function CntTradesSellPosition(zCLASSCODE,zSECCODE)cnt=0
  local TableName='trades'
  local rows_total = getNumberOf(TableName)
  for r=rows_total-1, 0, -1  do
     local table_row=getItem(TableName,r)
     --message(tostring(table_row.flags));stop()
     if table_row.class_code==zCLASSCODE and table_row.sec_code==zSECCODE and bit.test(table_row.flags, 2) then -- сделка продажа
        cnt=cnt+1
     end
  end
return cnt
end
Слетатают загоровки окон на первоначальные, После выхода из программы заголовок окна меняется на первоначальный
 
Добрый день.

Вот уже пол года прошло с момента жалобы. Версия QUIK 7.16.3.14.
Проблема с "Заголовками окон" не решена.
Очень неудобно.

Или есть какие рекомендации и решение проблемы?
Не нашел.
Как отрабатывается СТОП-заявка на сервере QUIK, Подробности работы сервера QUIK по стоп-заявкам
 
Если позиция LONG, то СТОП призван минимизировать убыток, следовательно на продажу.

Если рассматривается цена последней сделки, или по сути сделки по сигнальной цене, то с этого момента все очевидно.
а) если сделок по сигнальной цене 68,99 не было, то СТОП не сработает.
б) если была хотя бы одна сделка, даже с минимальным объемом в 1 лот, то СТОП сработает и будет продажа.

Спасибо.
Как отрабатывается СТОП-заявка на сервере QUIK, Подробности работы сервера QUIK по стоп-заявкам
 
Не верно указал цены:


69,01 <= BUY лучшая цена для покупки

69,00 <=== золотая середина

68,99 <= SELL лучшая цена для продажи


Какую из этих трех цен сервер QUIK учитывает при анализе СТОПов,
какова его СТОП цена в данный момент, с которой он сравнивает заявки клиентов?

Если СТОП (позиция LONG) выставлен по цене 68,99, и с текущей позиции цена пойдет вверх,
а) сделок по 68,99 не было, что сделает сервер QUIK?
б) сделки по 68,99 были, но уровень не был пробит, что сделает сервер QUIK?
Как отрабатывается СТОП-заявка на сервере QUIK, Подробности работы сервера QUIK по стоп-заявкам
 
Добрый день.

Много обсуждений по СТОП-заявкам, цена выше или ниже, что и как выставляется.
Но нет конкретики в части работы самого сервера QUIK.

СТОП-заявка это услуга брокера, а не биржи. Биржа по простому обрабатывает очередь ордеров.

ВОПРОС:

Какой показатель цены, для сервера QUIK, является СТОП-ценой.
Возьмем для примера цену фьючерса BR-xx.
В каждый момент времени, с учетом спреда, существует 3-и цены:


69,01 <= BUY лучшая цена для покупки

69,00 <=== золотая середина

59,99 <= SELL лучшая цена для продажи


Какую из этих трех цен сервер QUIK учитывает при анализе СТОПов,
какова его СТОП цена в данный момент, с которой он сравнивает заявки клиентов?

Если СТОП (позиция LONG) выставлен по цене 59,99, и с текущей позиции цена пойдет вверх,
а) сделок по 59,99 не было, что сделает сервер QUIK?
б) сделки по 59,99 были, но уровень не был пробит, что сделает сервер QUIK?
Не создает таблица, attempt to call global 'AllocTable' (a nil value)
 
Добрый день.

Так и не получил ответ на поставленный вопрос.
В чем я был не точен в формулировке?


Раздел "Список функций, доступных из скрипта индикатора" перечисляет функции терминала, которые можно вызывать для получения информации об инструменте и прочих статусах.
Этих функций более чем достаточно. В их перечень входят функции для работы с таблицами getNumberOf и getItem, т.к. все данные в QUIK хранятся в таблицах.

ВОПРОС в том, почему не получается создать свою (пользовательскую) таблицу в скрипте индикатора?
Прямых противоречий, в документации, для вызова функции AllocTable() нет. Эта функция скорей имеет отношение к интерфейсу (GUI), а не к системным таблицам.
Какая разница как создана таблица терминалом или пользователем?
Как создать свою (пользовательскую) таблицу в отдельном окне на вкладке графика, что бы данные в ней менял скрипт индикатора?
Не создает таблица, attempt to call global 'AllocTable' (a nil value)
 
Добрый день.

Есть желание, при создании индикатора, выводить информацию и при необходимости управлять параметрами индикатора через пользовательскую таблицу.

--
Table_ID = nil -- Глобальная переменная
--
function Init()
   Table_ID = AllocTable()
   ......
end
--

При запуске индикатора сразу выдается ошибка:

attempt to call global 'AllocTable' (a nil value)

Что еще требуется для создания таблицы.
Ограничения, на использование в индикаторах, в документации не упоминаются.
Выгрузка данных по ODBC в PgSQL (postgresql), Ошибка в модуле выгрузки
 
Значит это явно проблема терминала.
Пробовал разные версии и сборки ODBC драйвера от PgSQL, результат не изменен.
Выгрузка данных по ODBC в PgSQL (postgresql), Ошибка в модуле выгрузки
 
Забыл указать, что запрос так же должен завершаться символом ";".

.
Выгрузка данных по ODBC в PgSQL (postgresql), Ошибка в модуле выгрузки
 
Добрый день.
Выполняется выгрузка обезличенных сделок в БД PgSQL (ODBC).
Структура таблицы вывода:
 Num (Type = numeric)
 Date (Type = date)
 Time (Type = time without time zone)
 Security (Type = text)
 Class (Type = text)
 Price (Type= numeric)

При выполнении настроек драйвера и модуля ODBC, никаких ошибок не выдается.
В момент выгрузки выдается ошибка:

ОПЕРАТОР:  INS ERT IN TO MarketData.IndexData.MarketTradeIndx (Num, Date, Time, Security, ClassCode, Price) VALUES (42858.000000, '03.11.2017', '11:16:48', 'RTSI', 'INDX', 1124.140000)
ОШИБКА:  ссылки между базами не реализованы: "marketdata.indexdata.markettradeindx" (символ 13)

Эта ошибка полностью идентична и в файле quik_odbc.log, и в лог файле на сервере БД и при перехвате данных Wireshark.

Исследование проблемы показало, что если в консоле БД, выдать эту же команду то ошибка сохраняется по причине не правильности формата.

Но запрос вида:

MarketData=# INS ERT IN TO "MarketData"."IndexData"."MarketTradeIndx" ("Num", "Date", "Time", "Security", "ClassCode", "Price") VALUES (42858.000000, '03.11.2017', '11:16:48', 'RTSI', 'INDX', 1124.140000);
INSERT 0 1
MarketData=#

ВЫПОЛНЯЕТСЯ.

Какие необходимо выполнить настройки терминала QUIK или ODBC драйвера, что бы имена полей БД и имя самой БД заключались в кавычки?

.
Страницы: 1
Наверх