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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
TGB написал:
не мог не добавить
А чего бы и нет.

Цитата
TGB написал:
Вам это понятно?
Реже - ложатся. Падают один раз.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
TGB написал:
Зачем весь гемморой, перечисленный в пункте1?
Тут ответ по форуму распределен в виде 1000 веток, где у одних мусор НЕ собирается, у других собирается прям из под рук, третьим самим неясно ничего, но они тоже за какую-нибудь движуху. Причем все это в каком-то митинговом тоне и на пределе нервов, с заламыванием рук и криками "немедленно". Потом, правда, большинство репортеров куда-то исчезает, а намоленные улучшения остаются и накапливаются. Мой любимый пример с фильтрами на ТВС. Наклянчили, сломали десятилетиями как часы работавшую схему. Ау, ребята, шо там, скока трафика наэкономили, больше ли, чем создали разговорами?

Цитата
Владимир написал:
Реальный вызов OnParam идёт по совершенно другим алгоритмам, которые, скорее всего, очень сильно отличаются от такого вызова.
Ну, я малость поизучал, что там в реальности, совсем чуть-чуть. Показал один аспект, а вообще думаю, что с показываниями надо подзавязывать, бессмысленно. Чтобы связать кусок сорца и наблюдаемое поведение со стороны скрипта, нужен еще хороший пласт понимания, что между, а с этим туго, вакуум заполняется выдуманными теориями, в итоге вместо "прояснил" получается "запутал".
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Владимир написал:
Какая с него польза, кроме оверхеда?
Мне, выходит, сейчас придется выступить в роли адвоката сборщиков мусора, кои я сам терпеть не люблю ) Не, не буду )

Цитата
Владимир написал:
в цикле вызывается OnParam
Переименуйте мысленно, квик и подключен быть не должен, чтобы это все прогнать.

Цитата
Владимир написал:
Кто вообще может гарантировать, что умный интерпретатор не заменит конструкцию
Я могу гарантировать, что квик до 9.3.3 включительно не заменит. Большего нам и не требуется. А теперь собственно

Цитата
Владимир написал:
что тут вообще проверяется
Пошла волна, что, мол, все беды от того, что арка перед вызовом колбека отключает сборку мусора, а после - включает. Наблюдение мое было, но вот уже на это списали все беды квика и айти отрасли в целом. Что наблюдать печально, а мои призывы охладить этосамое игнорируются. Вот пришлось показать, что не все беды от этого, и вообще не от этого, и что тупой isConnected из одной инструкции дает почти тот же оверхед, что и новоназначенные враги квика. А миллионные циклы - чтобы вся эта шняга хоть бы сотню миллисекунд длилась, а то ж ее никаким таймером не выловишь.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
TGB написал:
И не тратит на это никаких вычислительных ресурсов?
Тратит, но не на каждом колбеке. По моим наблюдениям, не чаще раза в секунду, если его не подталкивать.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
TGB написал:
Вы обратили внимание на то, как меняется память при запуске вашего теста: до ~ 150 000 кб в конце теста.?
Конечно. Поскольку я своим глазам доверяю (а шага сборки после колбека я в упор не углядел), то я склонен считать,что это к делу отношения не имеет. Квик как-то там прибирается и молодец и флаг ему в руки. Как показывает тест выше, достаточно выключения/включения сборки, чтобы воспроизвести наблюдаемое поведение. Но это еще не все. Эти вызовы - сишные, поэтому их надо сравнить с просто пустыми сишными вызовами. Наиболее близко к этому - вызвать isConnected. И, чтобы два раза не вставать, сравним еще со случаем форсированного переключения потока в тех же местах. Тест и результат ниже. Как видите, дополнительная нагрузка на вызов от приостановки сборщика находится где-то между двумя пустыми сишными вызовами и двумя переключениями потока и не зависит от числа глобальных переменных. Поэтому, я считаю, вопрос об отключении сборщика (мной же поднятый) можно опустить обратно, это здесь влияет мало. Обнаруженная Старателем зависимость оверхеда от числа объявленных переменных растет откуда-то из другого места. Возможно, тоже как-то со сборкой связанного, но не так прямолинейно.
Код
local run = true
local nnn = 5000000

function OnStop()
   run = false
end

function OnParam(cls, sec)
   local str = cls or '' .. sec or ''
end

function main()

   message('TEST running, wait a bit')

   sleep(1000)

   local t1 = os.clock() * 1000
   for i = 1, nnn do
      OnParam('TQBR', 'SBER')
   end
   t1 = os.clock() * 1000 - t1

   local t2 = os.clock() * 1000
   for i = 1, nnn do
      collectgarbage('stop')
      OnParam('TQBR', 'SBER')
      collectgarbage('restart')
   end
   t2 = os.clock() * 1000 - t2

   local t2x = os.clock() * 1000
   for i = 1, nnn do
      local _ = isConnected()
      OnParam('TQBR', 'SBER')
      _ = isConnected()
   end
   t2x = os.clock() * 1000 - t2x

   local t2y = os.clock() * 1000
   for i = 1, nnn do
      sleep(0)
      OnParam('TQBR', 'SBER')
      sleep(0)
   end
   t2y = os.clock() * 1000 - t2y

   for i = 1, 1000000 do
      _G['var' .. i] = { _ = i}
   end

   local t3 = os.clock() * 1000
   for i = 1, nnn do
      OnParam('TQBR', 'SBER')
   end
   t3 = os.clock() * 1000 - t3

   local t3x = os.clock() * 1000
   for i = 1, nnn do
      local _ = isConnected()
      OnParam('TQBR', 'SBER')
      _ = isConnected()
   end
   t3x = os.clock() * 1000 - t3x

   local t3y = os.clock() * 1000
   for i = 1, nnn do
      sleep(0)
      OnParam('TQBR', 'SBER')
      sleep(0)
   end
   t3y = os.clock() * 1000 - t3y


   local t4 = os.clock() * 1000
   for i = 1, nnn do
      collectgarbage('stop')
      OnParam('TQBR', 'SBER')
      collectgarbage('restart')
   end
   t4 = os.clock() * 1000 - t4

   message('TEST RESULT:' ..
      '\n  gc always on, no globals:            ' .. t1 ..
      '\n  gc stopped, no globals:              ' .. t2 ..
      '\n  gc always on, no globals, c-calls:   ' .. t2x ..
      '\n  gc always on, no globals, sleeps:    ' .. t2y ..
      '\n  gc always on, many globals:          ' .. t3 ..
      '\n  gc always on, many globals, c-calls: ' .. t3x ..
      '\n  gc always on, many globals, sleeps:  ' .. t3y ..
      '\n  gc stopped, many globals:            ' .. t4)

end

[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Вот другой тест, без лишних предположений.
Код
function OnParam(cls, sec)
   local str = cls or '' .. sec or ''
end

function main()

   message('TEST running, wait a bit')

   sleep(1000)

   local t1 = os.clock() * 1000
   for i = 1, 1000000 do
      OnParam('TQBR', 'SBER')
   end
   t1 = os.clock() * 1000 - t1

   local t2 = os.clock() * 1000
   for i = 1, 1000000 do
      collectgarbage('stop')
      OnParam('TQBR', 'SBER')
      collectgarbage('restart')
   end
   t2 = os.clock() * 1000 - t2

   for i = 1, 1000000 do
      _G['var' .. i] = { _ = i}
   end

   local t3 = os.clock() * 1000
   for i = 1, 1000000 do
      OnParam('TQBR', 'SBER')
   end
   t3 = os.clock() * 1000 - t3

   local t4 = os.clock() * 1000
   for i = 1, 1000000 do
      collectgarbage('stop')
      OnParam('TQBR', 'SBER')
      collectgarbage('restart')
   end
   t4 = os.clock() * 1000 - t4

   message('TEST RESULT:' ..
      '\n  gc always on, no globals:   ' .. t1 ..
      '\n  gc stopped, no globals:     ' .. t2 ..
      '\n  gc always on, many globals: ' .. t3 ..
      '\n  gc stopped, many globals:   ' .. t4)

end





Вывод: просто отключение/включение сборщика увеличивает оверхед на вызов в 4 и более раз, шаг тут не нужен. Довод "тогда почему память не растет" может иметь тысячу и один ответ, сомневаюсь, что сейчас арка побежит рассказывать о своих технических решениях.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
TGB написал:
приведу код теста, в котором демонстрируется разница между вариантом с «дерганием» мусорщика в колбеках и вариантом, когда этого «дергания» нет
Попытку раскопать истину поддерживаю. Но зачем 'step' в цикле? Надо просто отключение-запуск и тогда будет примерно аналог того, что видим в коде арки. И вот насколько оверхед будет похож на оверхед в тестах Старателя, настолько можно будет предполагать, что дело именно в этом. А так получается, что тест доказывает, что сборка мусора занимает какой-то ресурс. Все это и без теста знали.
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Цитата
Денис написал:
подключены к системе СБП от ЦБ
Пришлось гуглить, что это ) оказалось - не подключен. Ну да это и неважно.

Цитата
Владимир написал:
А потому и логически, и физически, завершающие операции нужно бы делать именно в мейне, а в OnStop просто сбрасывать флаг бесконечного цикла.
В идеале да. Тут, как в сях иногда, без break переходим на следующий кейс:

Цитата
Старатель написал:
Получается с той или иной долей вероятности можно налететь на такое при любом значении в return и даже без него?
Трудно сказать с уверенностью про все случаи. По логике, если TerminateThread не вызывается (т.е. когда WaitForSingleObject дождалась завершения мейна), все происходит как ожидалось. Ну с поправкой на то, что цикл сообщений стоит. Вообще я бы не так сделал, как сделано. Сейчас оно примерно так
Код
void OnScriptStopButtonClick()
{
    int timeout = ScriptOnStop();
    if(WAIT_TIMEOUT == WaitForSingleObject(scriptmainthread, timeout))
        TerminateThread(scriptmainthread);
    ScriptCleanup();
    NotifyMainWindow(script_stopped);
}
а лучше бы было как-то типа
Код
void OnScriptStopButtonClick()
{
    int timeout = ScriptOnStop();
    ScriptDisallowCallbacks();
    SetTimer(timeout, ScriptStopProcedure);
    NotifyMainWindow(script_stopping);
}

void ScriptStopProcedure()
{
    if(WAIT_TIMEOUT == WaitForSingleObject(scriptmainthread, 0))
        TerminateThread(scriptmainthread);
    ScriptCleanup();
    NotifyMainWindow(script_stopped);
}
Однако есть подозрение, что при закрытии квика с работающими скриптами они останавливаются в WM_DESTROY, и оттуда вот так выйти и ждать таймеров не выйдет, т.к. окно будет прибито виндой раньше, чем дождемся таймеров. В итоге, если все это верно, это улучшение потребует вообще весь квик переделывать, что вряд ли.

Цитата
Денис написал:
Функции обратного вызова перестают работать после окончания работы функции OnStop() или после ее вызова?
Правильней будет сказать, что перестает работать скрипт. Колбеки не могут быть вызваны, пока окружающий OnStop код в квике не закончится, а когда он закончится - скрипта уже не существует. Пока обрабатывается OnStop (и любой другой колбек), другой колбек вызван быть не может. Мы так считаем, хотя Владимир вроде находил какой-то случай, когда колбек оказывался вложенным, но списали на случайный глюк.
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Владимир, тут речь именно про return 0 из OnStop, что форсирует прибитие мейна. Логически мы все делаем в OnStop, потом из него выходим и оставляем какой-то таймаут, чтобы мейн успел добежать до своего end, т.е. физически он свое "ничего" делает последним, а логически из ничего и выходит ничего.
Как считать данные из таблицы текущих торгов?
 
Цитата
Владимир написал:
риски скорее у Васи
Да, есть такое. Надеюсь, он не полезет квик хачить. Проблема не в том что не всхачит, а в том, что потом будет хачить до конца жизни каждую версию и все в рамках "гарантийного обслуживания", то есть даром.
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Цитата
Денис написал:
попробую без оператора return
Ага, я не заметил, return 0 надо убрать, выше написал почему, квик видит ноль и прибивает мейн немедленно, хотя тот уже и сам хотел завершиться.
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Денис,  все же в мейне конец чуть иначе предполагался
Код
function main()

-- Открывается отладочный файл лога
   File_Log_Debugger = io.open(File_Name_Log_Debugger, "w")

   while not Stopped do   
   
      Flag_Svetofor = "Red"
      
      if File_Log_Debugger and tostring(File_Log_Debugger) ~= "file (closed)" then
         File_Log_Debugger:write("Тестовая строка\n")
         File_Log_Debugger:flush()
      end -- end if

      sleep(1)
   end -- end while конец обработки цикла ожидания робота выход по останову

   Flag_Svetofor = "Green" -- вот сюда его родимого

end -- Конец функции main()
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Цитата
Старатель написал:
Сначала скрипт штатно останавливается, при этом никаких ошибок не выдаёт.
Дело в том, что нештатно останавливается. Если OnStop возвращает 0, сразу за ней выполняется WaitForSingleObject(main, 0), возвращаясь немедленно из-за нулевого таймаута, и сразу же TerminateThread. Там потом еще уведомление главному окну посылается. Видимо, какие-то сопли после этого всего остаются.
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Цитата
Денис написал:
Как посигналить? Если Stopped = true
Да, этот момент уже в коде присутствует и упомянут для полноты. Мониторить не в каждом, но при работе с окнами - да, попытка что-то сделать с окном из мейна, когда OnStop подвешен на цикле - дедлок. Строго говоря, даже проверка перед вызовом такой функции небезопасна, флаг может встать между проверкой и актуальным вызовом (хотя маловероятно).

Цитата
Денис написал:
То есть еще один цикл со sleep(0)?
Да, как по ссылке выше показывал. Это по сути спинлоки за отсутствием нормальной синхронизации в луа, мьютекса или семафора или хоть чего-нибудь.

Цитата
Денис написал:
в то время, пока в основном потоке OnStop() подвешен на цикле со слипом - операторы main() в дополнительном потоке продолжают выполняться?
Да, но в силу устройства луа нужен какой-нибудь сишный вызов в цикле ожидания (в данном случае слип), иначе все встает.

А вообще я б лучше предложил сделать последним таки мейн, вот с этой всей синхронизацией на выходе, пусть вся логика отработает как требуется, в том числе последнее полезное действие в OnStop, но чтобы последнее слово было за мейном, даже просто голый return. Так надежнее, будет одна точка выхода на все случаи.
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Цитата
Денис написал:
прямого ответа на свой вопрос еще не встречал
Словами кратко
1) из OnStop как-то посигнальте мейну, что пора завершаться
2) придержите OnStop с помощью цикла со слипом (обязательно со слипом), пока мейн не просигналит в ответ, что он вот-вот завершится
3) придержите OnStop еще чуть-чуть тем же способом, чтобы мейн точно уже завершился
4) вуаля, OnStop последний из могикан, мейна уже нет.
Но убедитесь, что мейн не выбросит ошибки, пока OnStop его ждет, иначе как раз и получится описанная ситуация с зависанием всего.
Как считать данные из таблицы текущих торгов?
 
Цитата
Владимир написал:
не сможет реализовать ни один человек с планеты Земля
Чрезмерно категоричное утверждение. В конце концов, табличка квикова - это окно, у него есть определенный апи, и этот апи гораздо легче расковырять, чем можно было бы подумать. Другое дело, что я б попытался заказчика отговорить от такого решения, даже если ему бюджет девать некуда, бо оно требует ковыряния в кишках квика, а кишки квика имеют свойство неожиданно меняться в одной из новых версий. Но если он крайне желает хорошенько заплатить за приключения себе на копчик, то тксть любой каприз, с оговоркой, что на новую версию новый каприз будет за новый бюджет.
Как грамотно сделать функцию OnStop() последней в теле скрипта?, Скудное описание функции обратного вызова OnStop() в официальной документации
 
Цитата
Денис написал:
Вставьте в функцию main() оператор while true do end и никакого принудительного завершения не произойдет. QUIK повиснет намертво из-за бесконечного цикла в main()
А вставьте оператор while true do sleep(0) end и принудительное завершение таки произойдет. Чудеса да и только.

Цитата
Денис написал:
поделится опытом использования в скриптах функции OnStop()
Уже делился, там дальше по ветке разбросано несколько вопросов-ответов, почему так и зачем так. И в целом можно по форуму поискать всякого разного, как там потоки переключаются и прочая. В частности, вышеименованные чудеса перестанут таковыми быть.
Агрегировать объемы по ценам
 
Александр,  это просто гистограмма, лежащая на боку. Режете диапазон цен на сколько-то кусков, по цене тика смотрите, в какой кусок он попал, и в этом куске добавляете объем тика.
Медленный вывод в таблицы QLua через SetCell
 
Цитата
Владимир написал:
в 6 раз
Да, верно, в 6 раз. Но на 522%, первые 100% уже были на 0.018.
Медленный вывод в таблицы QLua через SetCell
 
Цитата
Daniil Pozdnyakov написал:
получили увеличение загрузки CPU  лишь на 10%
Вообще-то на 522%. Или в пять раз. Была загрузка 0.018, стала 0.112, считаем 100 * (0.112 - 0.018) / 0.018 = 522.
Странный авто-масштаб свечного графика объёма
 
Анекдот напомнило.
Пациент: доктор, когда я делаю так (дотягивается левой пяткой до правого уха), у меня хрустит в спине, как быть?
Доктор: не делайте так.

Свечи (и бары, кстати, тоже) - четырехмерные, объем - одномерный. Любопытно, что вы хотели увидеть в результате. Или, другими словами, чему должны быть равны OHLC для свечи, отображающей одно значение V.
Логика выставления и перевыставления алгозаявки
 
Цитата
D7DSk написал:
Цена аукциона закрытия была выше  моей продажной.
Цена аукциона определяется после окончания аукциона. Т.е. когда вы (или сервер) увидели цену аукциона, на аукцион уже ничего выставить нельзя. Поэтому и получилось
Цитата
D7DSk написал:
После аукциона закрытия связанная с алго лимитная заявка появилась в таблице заявок
Повторная подписка на свечи через CreateDataSource не работает на версии 9.2.3.15
 
Цитата
Сергей написал:
способы обхода
Когда временно не нужны данные, можно на датасорце вызвать SetEmptyCallback, когда снова понадобились - SetUpdateCallback. Датасорец оставлять до закрытия скрипта или до когда уже точно больше не понадобится. Оно даже на баг не похоже, а больше похоже на защиту от желающих задудосить сервер.
Работа с метками, ошибки при закрытии/открытии программы Quik., Свои уровни на графике из файла.
 
AndyWise,  OnClose вызывается, скрипт даже файл создать успевает. Вариант засинхронизировать в обе стороны, как здесь, тоже ничего не дает. То есть завершается все точно в правильной последовательности (иначе зависло бы), но метка так и остается (про метку код убрал для простоты).
Код
local run = true
local running = true

function OnStop()
   run = false
   while running do sleep(50) end
   running = true
end

function OnClose()
   local f = io.open(getScriptPath() .. '\\HELLO.txt', 'w')
   f:write('HELLO')
   f:flush()
   f:close()
   run = false
   while running do sleep(50) end
   running = true
   sleep(100)
end

function main()
   while run do
      sleep(100)
   end
   running = false
   while not running do sleep(50) end
end
Работа с метками, ошибки при закрытии/открытии программы Quik., Свои уровни на графике из файла.
 
AndyWise, попробуйте вот что поменять:
1)
Код
function OnInit()
   IsRun  = true; --Скрипт запущен!
   IsStopped = false;  --------------------------<
   WrkDir = getScriptPath().."\\";
   PicDir = WrkDir.."Lua_Pict\\";
   ...
end
2)
Код
function main()
   ...
   DelAllLabels(GRAPF_ID);
   IsStopped = true;  ---------------------------<
end
3)
Код
function OnClose()
   IsRun = false;
   sleep(500); -- половина задержки мейна, потом начинаем поллинг
   while not IsStopped do sleep(50) end;
end
Словами: в OnClose сбросить IsRun и не возвращаться из колбека, пока мейн не завершится как обычно. Но не наглухо колбек повесить, иначе мейн будет ждать и зависнем.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Владимир написал:
долбаные "try…catch",
Цитата
Владимир написал:
тормоза
Наоборот. Без try-catch у вас будет
Код
if(call(... if(call(... if(call... if(call(...
и так далее на всю глубину стека вызовов. Идея в том, что эти все иф никогда не должны исполниться. Вообще. Поэтому их и не должно быть вообще, а должен быть блок try-catch, который работает безо всякого оверхеда на основном пути. То есть там нет ни одной ассемблерной инструкции, не говоря уже про аццкий иф, ломающий конвейер.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Anton написал:
не проверял под отладкой
А теперь проверил. Коллектор выключается на каждом OnParam и каждом OnAllTrade. Вариант "оно отключено и не влияет" отпал.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
TGB написал:
надо убрать запуски мусорщика (lua_gc) в колбеках
Я позже разбирался с этим, запуска сборки как таковой там нет, это вызовы отключения/включения сборщика. Но при включении сборщика есть побочный эффект - сбрасывается переменная debt в стейте и, получается, на следующем шаге сборщику придется оценивать количество мусора заново (как минимум, а как максимум он еще и шаг сделает). Это совершенно недокументированная особенность луа, так что я б не стал арку в этом обвинять. И там есть некая переменная, уже аркина, которая неизвестно что содержит, я не проверял под отладкой. Возможно, даже этих отключений сборки не происходит, хотя, судя по наблюдаемому поведению, они таки есть.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
Шорты осиновые написал:
в США и Европе
Не знаю, с ними дела не имел.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
ISINhere2001 написал:
нужда приспичила
Вы можете позвонить брокеру и разместить заявку по телефону, у всех брокеров это есть.

Много лет этой фигней занимаюсь и всегда в самых интересных точках были глюки. Всегда. В совсем допотопные времена чудесным образом вырубался интернет (ага, весь). Часа на два. Потом это прошло, стал вырубаться квик и "вы уже работаете в системе" или что-нибудь подобное. Потом просто начинало все лагать на несколько минут, типа торгуй-торгуй, но наощупь. Брокеры были разные, рынки разные, депозиты разные, чудеса всегда были одни и те же. Откуда следует вывод, что никто вам не даст
Цитата
купить на падении, или завершить торговый цикл шорт
, так что идею порвать динозавров одним ловким движением надо сразу выбросить и не забивать себе голову. Не порвете, затопчут. Курочка по зернышку клюет (в хорошую погоду, добавлю я).
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
Старатель написал:
более 10% годовых получается
А если еще шортов охота, придется два ляма в гарантийный занести, и на остаток получается еще больше.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
ISINhere2001 написал:
таких знаний
Так-то почти все "такие знания" в брокерском договоре написаны, ничего в них нет ни удивительного, ни нового.

Цитата
ISINhere2001 написал:
что может служить резервной системой?
Ыщо один брокер? Прямой доступ? Это все неудобно, дорого и не панацея. В целом у меня нет ответа. Точнее ответ есть в ортогональном направлении: ну лежит и лежит, потом поторгуем.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
D7DSk написал:
следы размещения средств не спрятать.
А зачем их прятать-то. Что мешает банку А открыть брокерский счет банку Б и учитывать его на том же общем счете? Ничего. Что мешает банку Б натарить офз на все плечи? Ничего.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
D7DSk,  не сказано, что счет отдельный для каждого клиента. Более того,
Цитата
3.9. В случае если договором первичного брокера и последующего брокера не  предусмотрен обособленный учет обязательств клиентов, то все  обязательства, исполняемые за счет или в пользу разных клиентов  последующего брокера учитываются солидарно на омнибусном счете  внутреннего учета или на разделе этого счета (далее - учет обязательств  на нетто-основе).
Т.е. по дефолту ваши денежки должны быть в общем котле, который учитывается "как целое" (а-ля неттинг). Хотя брокер ведет внутренний учет по каждому клиенту отдельно (и должен это делать). НКЦ тоже на нетто-основе считает. Ну и дальше дело техники.

Цитата
D7DSk написал:
станет ли Сбер нарушать закон
Зачем же нарушать то, что специально под него написано. Наоборот, на страже.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Старатель,  уточнил свежачок, 3000 в день. В пересчете на гречку цена та же.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
Старатель написал:
сколько стоит
Последний раз сталкивался - было 25к в месяц, но это давно, тогда на мамбе брали 60к в квартал плюс брокер накидывал свое. Сейчас оно в нкц переехало, там вроде как по формуле от остатка средств с отрицательной ставкой, но я так понимаю, что условного васю с десятью лямами туда и не подпустят.
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
ISINhere2001 написал:
что такое неразделенные счета ?
Это когда брокер бабло всех клиентов заносит на один счет и торгует с этого счета. В противоположность сегрегированному счету, где если лежит копейка, ее трогать нельзя, на неразделенном брокер может своободную копейку использовать по своему усмотрению, если это тксть не мешает основному процессу. Что и делается. Но иногда основной процесс неожиданно активизируется, а копейка где-то задействована и быстро ее не извлечь.

Цитата
ISINhere2001 написал:
чтобы брокер смог продать купленное вчера-сегодня
Вы с брокером не торгуете, он сливаемое клиентами не выкупает, скорее всего просто зареповал "лишние" бумаги и разместил "лишние" деньги, а тут оно всем понадобилось вдруг. А вот маркетмейкеры могли накушаться, да. Но не в этот раз, думаю. Когда их сильно прижимает, "технический сбой" случается на самой бирже )
Корреляция между интенсивностью биржевых торгов и проблемами на серверах брокеров
 
Цитата
ISINhere2001 написал:
резкое увеличение объема торгов
Технически биржа может в разы большие объемы обработать. Тут скорее дело в том, что основная масса ритейла сидит на неразделенных счетах, и когда весь ритейл кидается торговать (особенно в одну сторону), у брокера внезапно заканчиваются лимиты (потому что он "лишнее" бабло давно уже разместил). Народ заявки шлет, лимита нет, куды деваться? А давайте сервера положим.
Обезличенные сделки в квике
 
Цитата
ISINhere2001 написал:
стирает таблицу обезличенных сделок и начинает заново ее загружать
Если стирает вообще все, это скорей всего означает, что подключается на другой сервер. Тогда в меню "соединения" поставить галку "использовать параметры последнего подключения".
Стоп лосс с задержкой
 
Цитата
NoneB написал:
Первая производная графика цены
не существует, график точечный. Его иногда (=всегда) рисуют линией для облегчения восприятия, не более. Можно говорить о конечных разностях только.

Цитата
NoneB написал:
средние скользящие линии являются первыми производными
Не являются. Если бы являлись, интеграл скользящей средней давал бы график цены, а на практике он в небо улетит. И они не линии, они тоже точки, определенные только там, где определен график цены. И даже если эти точки соединить линиями, непрерывной функции не получится, а получится ломаная.
Объясните, пожалуйста, один момент в коде.
 
Для простоты посмотрим на четырехбитные числа. Пусть есть сборник флагов flags = 0b0010 и нам надо проверить, установлен ли бит с индексом 1 (второй бит то есть). Мы берем единицу 0b0001, сдвигаем влево до позиции интересующего бита (в примере на 1 бит, получаем 0b0010) и выполняем побитовую операцию AND с флагами: 0b0010 AND 0b0010 = 0b0010, результат не равен нулю, то есть TRUE. А если бит 1 не установлен, а установлен другой какой-то, пусть нулевой, т.е. flags = 0b0001, наша операция даст 0b0001 AND 0b0010 = 0b0000, результат равен нулю, то есть FALSE. А при проверке нулевого бита код тот же, просто сдвиг на 0 позиций делает ничего.
Как получить значение параметра "дата торгов" из таблицы сделок?
 
Цитата
meteop написал:
параметр для конкретной сделки получить
Если любой ценой получить, то можно из таблицы обезличенных сделок свою сделку по номеру выудить. Я же предположил, что пока идентификатор сессии не сменится, не сменится и TRADEDATE, а когда сменится - будет очищена таблица сделок и как бы уже нечего и получать.
Как получить значение параметра "дата торгов" из таблицы сделок?
 
meteop,  getInfoParam('TRADEDATE')
Установка QUIK на Linux под Wine, Проблемы с актуальными на сегодняшний день версиями
 
Андрей,  тут столько намешано, что получается каждое предложение отдельно правильное, а текст в целом - нет. Чтобы текст в целом обрел смысл, нужно отделить архитектуру процессора от операционной системы.

Если мы говорим об архитектуре. Байкал - это прекрасно и здорово, он вообще-то не сильно отличается от эпловского М1, например, назло врагам. Эльбрус - может быть сколько угодно прекрасным по задумке и реализации, это просто "нитакой как фсе", на котором мало что будет работать когда бы то ни было, а в режиме эмуляции интела он завсегда любому интелу проиграет в разы. Поэтому в гражданском обороте ему делать нечего и говорить о нем применительно к гражданским задачам незачем.

Поэтому, говоря об архитектуре, мы должны спросить арку: не пора ли (попробовать) собрать квик под арм-винду. И все.

Если мы говорим об операционной системе. Не буду говорить, что линукс устарел задолго до того, как юный билли гейтс решил приделать к досу окошки, это только к холивару приведет. Линукс просто другая операционная система, под которую надо писать другой квик. Вообще с нуля. Поэтому хайли лайкли этого никогда не случится.
Может кто уже мучился с лучшим BID, OFFER?!, Пытаюсь реализовать алгоритм выставления лучшими заявками...
 
Цитата
Владимир написал:
Мне брокер сказал, что если стоит "умный заказ", то все остальные настройки не имеют значения, я всё равно должен получать реальные данные.
Это по дизайну. На практике может "самопроизвольно" сброситься галка (настройки - заказ данных - текущие параметры, посмотрите, стоит ли галка на бид на этом инструменте).
Цитата
Владимир написал:
цена выставлявшейся заявки тоже стояла, как вкопанная
Что как бы подтверждает предположение. Не стоял же этот бид пять часов, даже в неликвиде шевеление есть какое-то.
Прецизионная точность мышки и паралич подсказки
 
Цитата
NoneB написал:
ToolTip Класс
Не туда смотрите, это дотнет. Квик - суровый сишный продукт, там вот как все непросто.
Может кто уже мучился с лучшим BID, OFFER?!, Пытаюсь реализовать алгоритм выставления лучшими заявками...
 
Цитата
Владимир написал:
реальный бид каждый раз запрашивался заново из ТТТ перед подачей заявки.
Если фильтр по инструменту слетел, там было все время одно и то же, все пять часов, хотя реальный бид упрыгал конечно далеко. А по другим инструментам все могло ехать и ехать как положено. Есть ли в логе цена выставлявшейся заявки? Она менялась?
А графики в Квике не настоящие!!!
 
Александр,  я говорю только о том, считать ли свечи на сайте биржи непогрешимым идеалом, и говорю что нет. В обсуждение по существу не хочу углубляться, бо сам признаю только ордерлог как единственный источник истины и что я там из него нагорожу и по какому алгоритму это мое дело, так что не мне здесь высказывать мнение, как должно быть.

Алгоритмы да, разные. В принципе есть куча точек, где построение свечек может разойтись, не только по времени. Например, цена закрытия это последняя сделка или официальная цена закрытия согласно методике ее расчета? Везде по-разному, и для разных задач разное нужно.
А графики в Квике не настоящие!!!
 
Цитата
Александр написал:
разве сайт биржи не является "эталоном" построения свечей
Неа. Тут как-то тема была "о несоответствии", так при разгребании по ордерлогу оказалось, что битая свеча была таки на сайте биржи, а не в квике.
Может кто уже мучился с лучшим BID, OFFER?!, Пытаюсь реализовать алгоритм выставления лучшими заявками...
 
Цитата
Владимир написал:
Выставляет заявку, и... BID стоит, как вкопанный, а мой придурок ставит, снимает, ставит, снимает... вот так пять часов и простоял!
Если заявка попала в стакан и там есть встречный бид, она не может не исполниться, это означало бы, что сломана биржа, что вряд ли. Поэтому либо заявка по факту выставлена не была, либо стоящий как вкопанный бид стоит только в воображении клиента (например, слетел фильтр на получение этого параметра), а реальный бид далеко ниже.

Цитата
Владимир написал:
коллбек не может быть вызван, пока не завершено выполнение другого коллбека
Это проистекает из того, как квик обрабатывает очередь сообщений в основном потоке. Выбрал сообщение, дернул колбеки, обновил таблицы, пошел за следующим сообщением. Т.е. даже если что-то и приехало в процессе, квик этого пока не видит. Но есть теоретическое исключение: если внутри колбека идет работа с окном, И эта работа содержит некий модальный цикл сообщений, И одним из выбранных сообщений в этом цикле будет сообщение о приезде чего-то нового, обработка вновь приехавшего произойдет внутри колбека и, следовательно, увидим вложенный колбек. Модальные циклы в дизасме видел, пытался воспроизвести вложенный колбек - не удалось, сделал вывод, что на основных путях такого не бывает. Но если сильно постараться, то может и бывает. Есть также другое (более простое) объяснение: гонки в коде логирования.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
Наверх