nikolz написал: Предположу, что это ошибка автора скрипта, так как в нем не учитывается многопоточность.
Филосов :: . Укажите конкретно в чем ошибка автора. --- Ошибки автора нет. Есть ошибка в QUIK, состоящая в том, что длинные участки фрагментов кода скрипта на "чистом Lua" (без вызова C-функций) блокируют переключение потоков обслуживающего колбеки и выполняющего main. Я не буду повторять свои комментарии по этому поводу. Читайте форум.
ошибка автора в отсутствии знаний. И Ваша тоже так как Вы пишите про "чистый луа" который существует лишь в виде функций на чистом СИ. Это профанация и дилетанты вам верят.
_sk_ написал: 1) В числах разделитель разрядов должен быть точкой. 2) Если после знака равно стоит строка, её надо взять в кавычки. 3) В самом конце строк таблицы stop нужны запятые, а не точки с запятой, как сейчас в некоторых местах. 4) TRANS_ID должно быть числом.
Спасибо. Я имел ввиду сделать из вышенаписанного кода массив для sendtransaction?
для этого надо все параметры записать либо в кавычках либо с помощью функции tostring()
_sk_ написал: Берём следующий скрипт. Если в первой строке стоит flag = true, то скрипт нормально запускается и останавливается из меню скриптов. Если в первой строке поставить flag = false, происходит зависание терминала при остановке скрипта. В зависимости от значения переменной flag либо имеется sleep(0) в функции main(), либо отсутствует на пути выполнения кода.
У меня зависание воспроизводится в терминалах версий 10.0.0 и 10.0.1.
Три вопроса: 1) Может ли кто-то ещё подтвердить, что зависание происходит (чтобы исключить особенность моего компьютера)? 2) Знает ли кто-то причину такого поведения? 3) Что разработчики терминала могут сказать по этому поводу?
Сам скрипт:
Код
local flag = true -- если установить в false, то при остановке скрипта происходит зависание (убирается sleep(0) в функции main)
local foregroundColor = RGB ( 0 , 0 , 0 )
local backgroundColor = RGB ( 192 , 255 , 192 )
local interrupted = false
local tableId
local function setTableColors (foregroundColor, backgroundColor)
local nRows, nCols = GetTable Size (tableId)
if nRows and nCols then
for row = 1 , nRows do
for col = 1 , nCols do
SetColor (tableId, row, col,
backgroundColor, foregroundColor,
backgroundColor, foregroundColor)
end
end
end
end
local function ensureWindowOpened ()
if tableId = = nil then
return
end
if IsWindowClosed (tableId) then
CreateWindow (tableId)
SetWindowPos (tableId, 0 , 0 , 300 , 100 )
SetWindowCaption (tableId, "hang_test" )
InsertRow (tableId, 1 )
InsertRow (tableId, 2 )
SetCell (tableId, 1 , 1 , "11" )
SetCell (tableId, 1 , 2 , "12" )
SetCell (tableId, 2 , 1 , "21" )
SetCell (tableId, 2 , 2 , "22" )
SetSelectedRow (tableId, 1 )
end
setTableColors(foregroundColor, backgroundColor)
end
local function closeWindow ()
local t = tableId
tableId = nil
if t then
DestroyTable (t)
end
end
function OnInit (scriptPath)
tableId = AllocTable ()
AddColumn (tableId, 1 , "col1" , true , QTABLE_STRING_TYPE, 5 )
AddColumn (tableId, 2 , "col2" , true , QTABLE_STRING_TYPE, 5 )
SetTableNotificationCallback (tableId, function (tId, msg, par1, _)
if msg = = QTABLE_SELCHANGED then
SetSelectedRow (tId, 1 )
end
end )
ensureWindowOpened()
end
local function run ()
ensureWindowOpened()
if tableId then
SetSelectedRow (tableId, 2 )
end
end
function OnStop (flag)
pcall(closeWindow)
interrupted = true
end
function main ()
message ( "STARTED" , 1 )
while not interrupted do
run()
if flag then
sleep ( 0 )
end
end
pcall(closeWindow)
message ( "SHUTDOWN" , 1 )
end
причина зависания вероятнее всего в том, что функция main будет исполнена один раз до загрузки всех необходимых для корректной работы данных. Предположу, что это ошибка автора скрипта, так как в нем не учитывается многопоточность.
Sergey Gorokhov, По большому счету так как каналы связи без проблем - оптика 100 Мбод, а сервер и терминалы - это ваше произведение , то хрень тоже Ваше произведение .
сегодня у сбера вообще полный .... подключение к серверу есть работает стакан и TTT -------------- но не работают графики и ГЛАВНОЕ нет фирмы брокера - т е сбербанка и следовательно нет никакого портфеля ------------------
nikolz написал: пардон, поправлю, интенсивно создаете объекты или расширяете таблицы, но не уничтожаете не нужные объекты
Так и не смог найти причину, так как ошибка плавающая. Переписал код по другому - ошибка исезла. Все таки гарантировано, что это проблема в Квике не могу на данный момент сказать.
Рекомендую по возможности не создавать новые таблицы вместо старых, а просто очищать старые. В итоге у вас не будет объектов для уничтожения и частое обращение к куче за новым блоком памяти.
Дмитрий написал: Не могу нигде найти описание ошибки "attempt to perform arithmetic on a table value" - в переводе "попытка выполнить арифметику над табличным значением". Ну а почему нельзя выполнить арифметику над табличным значением? Или что имеется ввиду?
скорее всего, значение таблицы не является числом. Возможно что это либо функция либо таблица. покажите скрипт, если хотите помощь.
nikolz написал: и откуда взялся график после экспирации GAZR-12.22?
мне хотелось бы отобрзить после даты экспирации GAZR-12.22 графики: 1) историю цены GAZR-12.22 до его собственной экспирации 2) историю цены GAZR-03.23 и др. до даты экспирации GAZR-12.22 и после
Возможно не понял, но после экспирации фьючерса его нет, т к он выполнен. --------------- Зачем Вам это, если не секрет. По-моему мнению это не имеет практической пользы.
Шорты осиновые написал: 1. Как можно отобразить график фьючерса с истекшим сроком действия? 2. При замене истекшего инструмента, напрмер GAZR-12.22 на GAZR-03.23, склеиваются графики не GAZR-12.22 + GAZR-03.23, а части графиков GAZR-03.23 до и после экспирации GAZR-12.22?
и откуда взялся график после экспирации GAZR-12.22?
поправил, чтобы тест бесконечно не работал при втором запуске
Код
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(my_table_data_, code_class_, code_paper_, interval_, cntr)
message(code_paper_,1)
Sleep(100);
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
local n=20;
function main()
while n>0 do
if my_table1==nil then my_table1, err = CreateDataSource(code_class1, code_paper1, interval1);
if my_table1 then
my_table1:SetUpdateCallback(function(idx)my_cb_CDS(my_table_data1, code_class1, code_paper1, interval1) end)
end
end
if my_table2==nil then my_table2, err = CreateDataSource(code_class2, code_paper2, interval2);
if my_table2 then
my_table2:SetUpdateCallback(function(idx)my_cb_CDS(my_table_data2, code_class2, code_paper2, interval2) end)
end
end
-------------------------
-- message(tostring(my_table1:Size()),1)
sleep(1000)
n=n-1
end
-------------------------
end -- end main()
function OnInit(script_path)
end
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(my_table_data_, code_class_, code_paper_, interval_, cntr)
message(code_paper_,1)
Sleep(100);
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
while not stopped do
if my_table1==nil then my_table1, err = CreateDataSource(code_class1, code_paper1, interval1);
if my_table1 then
my_table1:SetUpdateCallback(function(idx)my_cb_CDS(my_table_data1, code_class1, code_paper1, interval1) end)
end
end
if my_table2==nil then my_table2, err = CreateDataSource(code_class2, code_paper2, interval2);
if my_table2 then
my_table2:SetUpdateCallback(function(idx)my_cb_CDS(my_table_data2, code_class2, code_paper2, interval2) end)
end
end
-------------------------
message(tostring(my_table1:Size()),1)
sleep(1000)
end
-------------------------
end -- end main()
function OnInit(script_path)
end
я отвечал на вопрос темы, повторю свой ответ. скрипт написан в целом рабочий ---------------------- подтверждаю что при первом запуске подписка не происходит при втором происходит. ---------------------- Подписка при первом запуске вроде бы произойдет если ручками установить флаги инструментов в заказе данных через меню. -------------- Иначе никакие танцы с бубном проблему не решают. =============== считаю, что такое поведение функции подписки мягко сказать - странное.
Nikolay написал: Да, счета и субсчета (т.е. коды) у брокера. Однозначно связать счет и код клиента нельзя, т.к. в таблице кодов больше ничего нет. Но.
Смотрим на таблицу money_limits (Лимиты по денежным средствам), для нее код имеет смысл. В ней есть фирма, есть счет, есть код клиента. Так и выходит, что можно только сказать - а можно ли с этим кодом, на этом счете, по этой фирме что-то сделать. Кодов же много может быть. На одном есть деньги, на другом нет. Хотя подать транзакцию можно, раз доступен код по фирме, счету. Ну и сколько брокеров не видел, фирма для срочного рынка отличается от фондового. По ней, как минимум, отсечь недоступные классы инструментов. И выбирая инструмент, по его классу даем список сочетаний доступных счетов, субсчетов.
Очевидно не правильно объяснил. Да у брокера в амбарной книге записано сколько денег вы ему дали и сколько у вас на ИИС Но бирже это по... ---------------------- Поэтому брокеру Вы можете что угодно сообщать Это никакого отношения к торговле на бирже не имеет так как биржа знает лишь брокера. -------------------------- Более того, если у Вас будет маржин кол, и денег не хватит на одной записи в амбарной книге, то брокер спишет с другой записи. ---------------------- Все эти субсчета - это лишь строчки текста в амбарной книге брокера. Реально с финансами брокер ничего делать не может это делают лишь финансовые организации. -------------- Поэтому все эти коды клиентов и ваши записки брокеру с какого счета взять деньги лишь ваши хотелки и добрая воля брокера поиграть с вами в ваши желания. --------------------- Примерно так.
Добрый день, всем! -------------- Вопрос в продолжении темы топика ------------ Если код клиента нужен для идентификация клиента и таких кодов в терминале может быть несколько ( иначе этот код тождественно равен UID терминала), то почему этого кода вообще нет в заявке на фьючерсы и опционы. как в этом случае различаем клиентов? ------------------ Мое мнение, прежнее - код клиента - это атавизм . Поэтому в документации QLUA этот параметр в транзакции можно не заполнять. ------------------ Хотелось бы услышать начальника транспортного цеха.
nikolz написал: ------------------------ Возможно изначально он был обязателен, но сейчас он подобен аппендиксу у человека. --------------------------- Типа есть, но нафиг нужен.
Нужен. Я меня счет один, а два кода клиента. И необходимо указывать тот, с которого идет торговля. Это субсчет - на одном ИИС, другой простой. На одном есть деньги, на другом нет.
На самом деле это вам лишь видимость. Такая игра кошки с мышкой. Вы сами не торгуете. ИИС это такое искусственное нагромождение с ограничением Ваших прав распоряжение. Поэтому у Вас для как бы счета. но на бирже торгует брокер вас там нет факт исполнения вашего поручения вы можете реально увидеть лишь в его отчете. Терминал квик не является каким либо документом подтверждающим факт исполнения Он лишь подтверждает факт отправки вашего поручения брокеру. Брокер имеет полное право сделать со сделкой все что захочет. ---------------------- Прикольно но факт, реально заключение сделки произойдет лишь на клиринге, так как брокер не имеет право проводить расчеты по сделке. ---------------------- Брокер лишь подает ваши заявки и списывает с вас свое вознаграждение . ----------------------- прикольно, но во времена глобальной компьютеризации брокер - это тоже аппендикс в торговле на бирже.
открываете Руководство пользователя QUIK Раздел 6. Совместная работа с другими приложениями Импорт транзакций Формат .tri-файла с параметрами транзакций Примеры строк, которые могут содержаться в файле -------------- и там есть пример
Тейк-профит и стоп-лимит Лукойл, покупка 1 лота, активация тейк-профита при достижении цены 2000 с отступом в 5% и защитным спредом в 3%, стоп-цена 2222, цена лимитированной заявки 2255, время действия с 10:00:01 по 19:45:45
Nikolay написал: Да, счета и субсчета (т.е. коды) у брокера. Однозначно связать счет и код клиента нельзя, т.к. в таблице кодов больше ничего нет. Но.
Смотрим на таблицу money_limits (Лимиты по денежным средствам), для нее код имеет смысл. В ней есть фирма, есть счет, есть код клиента. Так и выходит, что можно только сказать - а можно ли с этим кодом, на этом счете, по этой фирме что-то сделать. Кодов же много может быть. На одном есть деньги, на другом нет. Хотя подать транзакцию можно, раз доступен код по фирме, счету. Ну и сколько брокеров не видел, фирма для срочного рынка отличается от фондового. По ней, как минимум, отсечь недоступные классы инструментов. И выбирая инструмент, по его классу даем список сочетаний доступных счетов, субсчетов.
теперь я Вам поясню а за одно и себе напомню, про код клиентов, код фирмы и торговый счет. -------- На бирже торгует брокер, а не его клиенты. Код клиента нужен опять же лишь брокеру. Это как бы метка. Она нужна брокеру (бирже она пофиг) чтобы в конце торгового дня списать комиссионные с клиентов и раздать им сальдо. Поэтому код клиента не является обязательным при подаче заявки, так как брокер знает кто подает по UID терминала и автоматом пометит клиента. --------------- Вот поэтому нам и нет надобности знать код клиента и где либо его выставлять. ------------------------ Возможно изначально он был обязателен, но сейчас он подобен аппендиксу у человека. --------------------------- Типа есть, но нафиг нужен.
Пока вам объяснял, то сам вспомнил то, что забыл. ---------------------------- На бирже нет торговых счетов клиентов. ------------------------------- Клиенты все есть лишь в амбарной книге брокера. ---------------------------- Поэтому правильно будет то, что торговый счет - это счет брокера на бирже, куда брокер слил деньги всех клиентов как свои. -------------------------------------- Так как на бирже торгует брокер, а не его клиенты -------------------- Новое, это хорошо забытое старое. ------------------ вопрос снят.
Nikolay написал: Не разработчик, но, кажется, соответствие идет от фирмы, не счета. Счет от класса инструмента. Также от класса инструмента фирма. И по уже по фирме проверяем, что код клиента и счет для одной фирмы.
в качестве примера, что Вы не правы. Предположим несколько клиентов выставляют заявки на одну и ту же акцию Так как класс один и тот же то и фирма одна и та же. Тогда как связать код клиента с его торговым счетом, где его деньги лежат?
это ошибка, которая возникает при частом выделении памяти приложениями. Симптомы Приложения, которые часто выделяют память, могут испытывать случайные ошибки из памяти. Такие ошибки могут привести к другим ошибкам или неожиданному поведению в затронутых приложениях.
Причина Сбои в распределении памяти могут возникать из-за задержки, связанные с ростом размера файла страницы для поддержки дополнительных требований к памяти в системе. Возможной причиной этих сбоев является настройка размера файла страницы в качестве «автоматического». Автоматический размер файла страницы начинается с небольшого файла страницы и автоматически растет по мере необходимости. Корпорация Майкрософт подтвердила, что это проблема в Windows 10. -------------------- Возможно Вы в луа скрипте активно создаете и уничтожаете объекты. Но надо смотреть скрипт.
Nikolay написал: Не разработчик, но, кажется, соответствие идет от фирмы, не счета. Счет от класса инструмента. Также от класса инструмента фирма. И по уже по фирме проверяем, что код клиента и счет для одной фирмы.
если я правильно понимаю, то фирма - это код брокера на бирже поэтому она одна и та же для конкретной биржи а код клиента - это код клиента брокера, который брокер сообщает бирже, когда выставляет заявку А счет торговый - это счет на который клиент заводит деньги и лимит по которому контролирует брокер перед тем как послать заявку на биржу. ---------------- В итоге с одного терминала можно посылать заявки от разных клиентов каждый клиент может иметь несколько торговых счетов но фирма, которая пошлет эти заявки на биржу будет одна и та же - это ее код на бирже. ------------------- код фирмы будет разный лишь для разных бирж и возможно для разных секций. ----------------- Но счета где деньги лежат - связаны в первую очередь с клиентами и потом через код фирмы с биржей. ------------------------- Вопрос остается в силе.
Добрый день, решил написать робота, который работает со всеми доступными в терминале кодами клиентов и вдруг откуда не возьмись появился ... затык. ----------------------- Вопрос: ---------------- Каким образом ,т е на основе каких таблиц или функций, можно установить соответствие кода клиента (таблица client_codes) торговому счету (таблица trade_accounts) ------------------- Спасибо
Дмитрий написал: Добрый день! Вопрос почему то приходит ответ на сделку 2-3-4 раза в function OnTrade(trade_data) [img]file:///C:/Users/algon/OneDrive/%D0%98%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/inet/%D1%81%D0%B4%D0%B5%D0%BB%D0%BA%D0%B8.JPG[/img]
так как нет никакой картинки, то попробую гадать по звездам - возможно это заявка исполняется кусками?
32-разрядное беззнаковое целое число. Этот тип объявлен в Windef.h как показано ниже:
typedef unsigned long DWORD;
и это не long положительного значения, а беззнаковое число. Беззнаковое от знакового отличается лишь исполнением операций сравнения на больше меньше а бинарный код у них одинаковый. ---------------------- Учите мат часть.
nikolz написал: но и бесплатный и безвозвратный заем их активов
с бесплатным понятно, а почему безвозвратный ?
потому что никто не выводит ту сумму ,которую завел. Выводят либо прибыль, либо снова заводят пополняя убытки. В итоге все что завели клиенты это бессрочная и бесплатная халява для брокера. -------------------- Из 24 миллионов буратин (счетов) на бирже активные лишь 1 . Остальные дали беспроцентный заем брокеру.
так как у сбербанка актуальная версия 9.7, то в очередной раз установил ее и снова вернул 8.7 ---------------- 9.7 заметно тормознутая на графиках. ----------------- сейчас на демо тестирую версию 10 пока вроде бы нормально. --------------------- предложите сберу версию 10 вместо кривой 9.
торговля на бирже это не только кило шерсти с клиентов, но и бесплатный и безвозвратный заем их активов на нужды брокера и крупных проф участников. ---------- А В РФ уже 24 млн граждан отнесли свои деньги брокерам. пора уже стричь начинать.
Откуда появляются сверхбольшие годовые ставки по 200 и 300% годовых, или они всегда плавающие для розничных клиентов? Возможно ли при короткой продаже акций нарваться на такие %, если на счете есть денежное обеспечение 100% или от суммы шорта ?
Цитата
25 февраля, на следующий день после рекордного обвала рынка, все активы клиентов «Универ капитала» на общем торговом разделе Московской биржи оказались заблокированы из–за задолженности по сделкам: брокер утратил возможность самостоятельно заключать сделки РЕПО. После этого, пишет Кожевников, Национальный клиринговый центр (НКЦ, входит в группу Мосбиржи) начал осуществлять перенос общей отрицательной денежной позиции клиентского счета штрафными сделками РЕПО, заключаемыми без участия брокера. C 28 февраля по 17 марта НКЦ начислял штрафные проценты за перенос маржинальных клиентских позиций: по ставке 200% годовых в долларах, 300% годовых в евро и 40% годовых в рублях. За указанный период НКЦ начислил процентов на 880 млн руб
Не только у клиентов может быть маржин кол, но и у брокеров тоже может быть и этот кол брокер перекладывает на клиентов. --------------------- Из жалобы этого брокера видно, что на момент продажи активов клиентов, доходность по долларовым облигациям доходила до 400% Так что НКЦ продал по рынку. --------------------------- Далее из письма следует, что убыток составил 15% от объема проданного. ------------------------------ По идее брокер должен был это покрыть своим средствами (он же считает себя крутым), а он просто кинул клиентов и включил дурочка с протянутой рукой к ЦБ.
наступает момент, когда количество ошибок переводит систему на совершенно новый уровень. ------------------------------ И тогда появляется название этому новому. --------------------------------- Ибо если нет названия, то и нет явления.
nikolz написал: на бирже надо не расходы экономить, а убытки сокращать.
Экономия на комиссии биржи хоть и копейки, но если их можно будет избежать добавив одну строчку кода, то почему бы и нет?
Я не против, но суть в том, что Вы реально будете стоять либо вдали от рынка либо против рынка. так как это правило направлено на уменьшение движения рынка, т е Вы станете бесплатным маркет-мейкером, которым биржа платит за сжатие спреда..
чтобы не быть голословным вот Вам пример с биржи. посмотрите сколько в процентах Вы экономите. и сравните с Вашими возможными потерями. А это величина комиссии в процентах на фьючерсы от базового актива.
Возможно я не совсем точно выразился. Я уверен, что теряете Вы не на комиссии , а на убытках при движении рынка против вашей позиции. И эти потери гораздо больше . Но экономия на комиссии - это не способ получить прибыль на рынке, тем более на фьючерсе. Фьючерс - это торговля с плечом. Посчитайте величину комиссии от стоимости актива и сравните это с убытком при движении актива против вашей позиции хотя бы на 1%. -------------------- Если экономить на комиссии, то лучше вообще не ставить заявки. Экономия максимальная.