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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 24 След.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Незнайка написал:
Если только в образовательных целях.
Здесь в образовательных. У меня все в длл, там кое-что происходит, для чего важно, из какого потока вызывать. И тут, думаю, на каком-то этапе окажется, что такое деление удобно.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Незнайка написал:
Тоже самое, если запихать содержимое onMainInit в блок do end?
Да.

Цитата
Незнайка написал:
А не проще onMainCleanup выполнить в OnStop?
Проще. Тут идея в том, что пара onMainInit/onMainCleanup строго в мейне выполняется, а еще должна быть пара onQuikInit/onQuikCleanup, выполняемая строго в потоке квика, и там как раз окна должны создаваться/прибиваться и прочее подобное. Может покажу еще, если руки дотянутся. Заинлайнить можно все, задача-то наоборот разложить по полочкам, чтобы с первого взгляда было понятно, что в каком порядке происходит.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Владимир написал:
Но ведь окна (в смысле, таблицы Квика) всё равно надо убивать?
Все равно надо, да, и это придется в OnStop таки делать.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Незнайка написал:
почему?
В данном случае, уточню, а не вообще. Потому что require вносит файл в список модулей и не любит полные пути, dofile же делает что ожидается без лишней автоматики.

Цитата
Владимир написал:
Кстати, что за зверь flush и на кой он нужен? А onMainInit зачем? Почему этого не сделать прямо в main?
1) flush сбрасывает буфер файла на диск, это тот же сишный fflush напрямую. Рантайм создает буфер 4к, пишет туда и сбрасывает блоками по 4к. Если скрипт падает (или виснет) после file:write, последний записанный кусок на диск не попадет, мы тут типа соломки подстелили.
2) onMainInit как раз чтобы вынести бизнес-код из мейна, заодно весь мусор, созданный в процессе инициализации, попадет к коллектору сразу после нее, а не после того, как мейн закончится (т.е. никогда).

Цитата
Владимир написал:
Но я не совсем врубился, что происходит. Можно описание процесса на русском языке?
1) OnStop снижает runStatus с 3 до 2 и крутит спинлок, не давая квику начать отсчет остатка жизни мейна.
2) главный цикл в мейне завершается и мейн выполняет очистку, в нашем случае запись дампа, при этом он уверен, что квик его ждет (висит на OnStop). Тут важен pcall, иначе если при очистке вылетит ошибка, квик так и останется висеть навеки.
3) мейн закончил очистку, понижает runStatus с 2 до 1 и крутит спинлок, это сигнал для OnStop, что очистка закончена.
4) OnStop вышел из спинлока и понизил runStatus c 1 до 0, это сигнал мейну, что OnStop завершен.
5) если при очистке была поймана ошибка, мейн ее теперь бросает заново, теперь квик не ждет нас и не зависнет. Если ошибки нет, мейн просто завершается.
Это не решает проблем с отправкой сообщений окнам из мейна, т.е. при наличии окон придется переделать, чтобы очистка была таки в OnStop. Но решает проблемы с недописанным файлом, если мейн слишком резво закончится. Как-то Старатель о таком писал, а тут у меня воспроизвелось и пришлось порешать.

Цитата
BlaZed написал:
Не могу понять в чем смысл данного ожидания уже после выполнения функции очистки.
Если мейн выбрасывает ошибку, пока OnStop крутит спинлок, квик зависает намертво. Тут мы убеждаемся, что спинлок закончился. Если сделать имя файла "?.lua", будет вылетать ошибка и можно это пронаблюдать.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
БорисД написал:
надеюсь  что они виртуальные
Естественно.

Кто-то (не Владимир ли) жаловался, что завершение скрипта не всегда корректно даже с очисткой в OnStop, вот здесь показано, как завершать скрипт в несколько шагов, но на примере завершения в мейне. Для скрипта с окнами логику надо будет "выворачивать". То есть это все еще не более чем моделька, на универсальность не претендующая.

Насчет соревнований сильно сомневаюсь, тут все завалено задачами, за эту я скорей в качестве прокрастинации схватился.

Повторюсь еще раз. Есть программы типа велслаба, сьерры, мультичартса, нинзи и других. Смысл начального тестирования идей прямо в квике от меня ускользает, в нем нет для этого ничего. Отобранные во внешней программе стратегии можно перенести на луа, а можно саму программу к квику прицепить. Второе не проще, но нужно сделать один раз. Да и для некоторых программ уже есть готовые адаптеры к квику.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
В общем, дорвался я наконец до квика и, дабы размяться, порешал ту же задачку по-своему. Тксть мои мятые триста рублей. Кое-что интересное здесь можно увидеть в районе OnStop и в конце мейна. Все на спинлоках, чтобы не тащить длл, в длл можно гораздо веселее это сделать. Дамп урезан до просто списка бумаг, как и прежде, не в нем здесь соль.

Основной скрипт
Код
------------------------------------------------------------------------------
--              'CONSTANTS' (Lua has no true constants, you know)           --
------------------------------------------------------------------------------

local inFileName = getScriptPath() .. '\\IN.lua'
local outFileName = getScriptPath() .. '\\OUT.lua'
local mainLoopTimeout = 500

------------------------------------------------------------------------------
--                               BUSINESS LOGIC                             --
------------------------------------------------------------------------------

local inSecList = nil

local function writeSecList()
   local f = io.open(outFileName, 'wb')
   if not f then
      error('Failed to open OUT.lua for write')
   end
   f:write('return {\r\n')
   if inSecList then
      for _, r in ipairs(inSecList) do
         f:write('\t{ classcode = "' .. (r.classcode or '') ..
            '", seccode = "' .. (r.seccode or '') .. '" },\r\n')
      end
   end
   f:write('}\r\n')
   f:flush()
   f:close()
end

-- called in main thread before the main loop
local function onMainInit()
   inSecList = dofile(inFileName)
   -- TODO: further initialization here
end

-- called in main thread on each time step
local function onTimeStep()
   -- TODO: your trading code here
end

-- called in main thread after the main loop 
local function onMainCleanup()
   writeSecList()
   -- TODO: further cleanup here
end

------------------------------------------------------------------------------
--    THE CODE BELOW SHOULD NOT BE EDITED UNLESS YOU FULLY UNDERSTAND IT    --
------------------------------------------------------------------------------

local runStatus = 0

function OnStop()
   assert(runStatus == 3, "Unexpected runStatus in OnStop: " .. runStatus)
   runStatus = runStatus - 1
   while runStatus == 2 do
      sleep(10)
   end
   runStatus = runStatus - 1
end

function main()
   onMainInit()
   runStatus = 3
   while runStatus == 3 do
      onTimeStep()
      sleep(mainLoopTimeout)
   end
   do
      local s, e = pcall(onMainCleanup)
      runStatus = runStatus - 1
      while runStatus == 1 do
         sleep(10)
      end
      if not s then error(e) end
   end
end

И модельный IN.lua для примера со списком бумаг (код тоже может быть добавлен, ПЕРЕД return, конечно же)
Код
return {
   { classcode = "TQBR", seccode = "SBER" },
   { classcode = "TQBR", seccode = "GAZP" },
   { classcode = "TQBR", seccode = "GMKN" },
   { classcode = "SPBFUT", seccode = "RIZ1" },
}
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Владимир написал:
нам такой парсер не нужен
Ну не нужен так не нужен, мое дело предложить.
На всякий случай для тех, кто решит, что нужен, лучше dofile вместо require использовать во избежание чудес.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Владимир написал:
попытаться разговорить народ
Боюсь, разговоры будут шо лучше б не было. Каждый строчит как он хочет, поэтому по коду как таковому я воздержусь. А по вот по чему не воздержусь: формат файла IN выбран неудачно, отсюда куча кода, которого могло бы не быть вовсе.

Давайте представим для начала, что файл состоит только из команд и комментариев. В этом случае мы можем назвать его IN.lua, каждая строка будет командой (на чистом луа, разумеется, безо всяких префиксов) либо комментарием (с двух минусов, как в луа принято), и весь парсинг сведется к require(getScriptPath() .. '\\IN.lua'). Не нужна даже проверка на существование файла, require сама выбросит ошибку в случае ненахода, равно как и в случае синтаксической ошибки в коде команд.

Теперь остается вопрос, как в наш чистый луа воткнуть список бумаг. А очень просто, в виде луа-таблицы. Наш IN.lua будет выглядеть примерно так
Код
-- COMMANDS
-----------

-- comment
message('Command 1')

-- another comment
local function cmd2(txt)
  message('Command 2: ' .. txt or '')
end

cmd2('hello')
cmd2('world')
-- cmd2('commented out')

-- SECURITIES
-------------

inSecList =
{
  { classcode = "TQBR", seccode = "SBER" },
  -- NOTE: the next line is commented out
  -- { classcode = "TQBR", seccode = "GAZP" },
  { classcode = "TQBR", seccode = "GMKN" },
  { classcode = "SPBFUT", seccode = "RIZ1" }
}

-- COMMANDS (again)
-------------------

message('Command 3')
Основной файл скрипта сокращается до своего первоначального варианта плюс
Код
require(GetScriptPath() .. '\\IN.lua')
После этой строки мы уже распарсили весь файл, выполнили все команды, и список бумаг у нас уже в глобальной переменной inSecList.
Синхронизация потоков
 
Цитата
Незнайка написал:
Почему так?
table.ssort захватывает лок луа и не позволяет переключить поток с мейна на основной поток квика (или обратно). Между скриптами он не работает, у каждого скрипта свой лок.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Владимир написал:
ДЛЯ КОГО "на аккорде лучше"?
Для опыта,написал же ж.

Цитата
Владимир написал:
Для развода лохов
Кстати о лохах. Лоху обычно затирают про миллиарды и тысячи процентов. Он понимает, конечно, что его лошат, но ожидает лошения на миллиарды, коих у него нет, а потому и игра выглядит безрисковой. В процессе у лоха из заднего кармана утягивают мятые триста рублей. Обнаружив пропажу, лох считает себя победителем: хотели миллиардов, а получили голимую трехсотку, хаха, как я их!
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Владимир написал:
А что, на сделке надо было?
На аккорде лучше. Бесценный опыт, второй раз не захочется уже.

Цитата
Владимир написал:
Именно поэтому он и стал самым богатым человеком планеты!
Ну дос-то он купил допустим. Винду поверх налепил поначалу. Потом нанял толкового чела, который ему сделал (отличное) ядро нт, и с тех пор он это ядро костылит и продает, меняя фантики. Все по канону.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
БорисД написал:
ну теперь можешь считать что встретил
Не, я вряд ли встретил.

Цитата
Владимир написал:
20 лет проработал
На окладе, о чем я и говорю.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Владимир,  так это скрипты с вменяемым техзаданием. Разработку бота по чертежам из интернетов, как у Жванецкого, закончить невозможно, можно только прекратить. Если мечта заказчика настолько сильна, что он готов держать прогера на почасовой оплате для переписывания всех идей из интернетов на луа, все в этом мире возможно. Чет я таких заказчиков не встречал, в основном взаимовыгодное типа. То есть, расшифровывая, кодер потратит три месяца или полгода фултайм на изыскания, а заказчик будет посильно участвовать в виде подбрасывания новых идей каждые полчаса, и в итоге заказчик узнает, что хотел узнать (и что я бесплатно написал выше), а кодер получит в лучшем случае по ставке дворника, в худшем вообще "у нас ничо не работает, платить не за что".

Вообще что-то тестировать в квике не надо. У него тупо нет для этого функционала. Есть куча спецсофта для этого той или иной кривизны, там хотя бы основная задача именно тест. Вот переписать готовое под квик внезапно налетит куча желающих, потому что там понятно, где косяк прогера, а где косяк самой идеи.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
БорисД написал:
кто способен писать за деньги
Тут вопрос не в способен, а в готов. Озвученные подходы кодить в 100500 раз, чтобы в итоге еще раз узнать, что нефик там ловить, желающих мало найдется из тех, кто их когда-то уже закодил и выбросил на помойку. Тут должны сойтись собственный интерес кодера и его способность это все закодить, ну и желание на сигаретки еще получить бонусом.
QUIK + Windows 11
 
Цитата
Роман написал:
в 16:00 должна новая сформироваться, а она формируется только в 16:05
Это ж лютый неликвид, там скорее всего первая сделка четырехчасовки и была в 16:05. Если б на скриншоте был сам график с отметками даты и времени, можно было бы точно сказать.
EMA, Расчет средней скользящей
 
Цитата
Dr Wed написал:
По факту и в одно и в другое поле попадает номер свечи.
Сейчас не в той обстановке, чтобы вдумчиво в код повтыкать, могу ошибиться, но вроде как в p текущий индекс, а в l индекс последней закрытой свечи. На текущей свече же может быть несколько вызовов. Аналогично в tmp.p текущее рассчитанное значение, а в tmp.pp - значение для предыдущей закрытой свечи.

Цитата
Владимир написал:
Зачем нам "вторые космические"?
Я и говорю, нам такой хоккей не нужен )
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
Зачем резать курицу, несущую золотые яйца?
Несущую не надо. А когда в куриную башку приходит идея колонизации марса и она стартует на второй космической с прицепившимися где-то на границе стратосферы космическими туристами, лучше поглядеть на это со стороны, вскоре сверху жареные тушки икаров повалятся, мы ж не хотим среди них оказаться.

Цитата
Dr Wed написал:
Что такое it в коде индикаторов от arqa?
Это итератор, судя по всему.
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
волшебное слово
Я и так вижу в наших диалогах "волшебные слова". Но смущает, что они "из разных сказок", не должны бы в одном месте быть одновременно. Для меня реально волшебное слово - это стоп-слово. Т.е. момент, когда "все, чудеса закончились, сворачиваемся и едем присматривать остров". Без оного есть хороший шанс в какой-то момент свернуться не совсем добровольно и на остров уже не поехать.
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
Нам деньги надо зарабатывать, а не монетки бросать.
Ну их же всем раздают просто так, подошел и заработал, изи. Собственно, в некоторые периоды так и есть, тогда интернет заполоняется рассказами, как победить рынок с помощью простого советского. Потом победители куда-то исчезают, видимо, покупают себе острова и там счастливо живут.
Цитата
Владимир написал:
Что ещё за "42"?
Отсылка к "автостопом по галактике" (читать не стоит). Там мегакомпьютер после многолетних расчетов ответа на вопрос о смысле жизни (или типа того) выдал ответ 42. Тксть ответ мы теперь знаем, осталось понять, в чем был вопрос.
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
что такое "надо много отсчетов"
Закон больших чисел. Грубо говоря, есть монетка, мы заранее знаем, что вероятность орла равна 0.5. Но с трех бросков можем получить и 1, и 0, и 0.33, и 0.66 (а 0.5, гыгы, даже теоретически не можем получить с трех бросков).

Цитата
Владимир написал:
Основной закон рынка одним словом
Это все знают, 42.
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
Вся эта кухня по определению вероятностная
Именно. Чтобы оценка распределения сформировалась более-менее близко к оригиналу, надо много отсчетов. А оригинал-то нестационарный, так что просто удлинить выборку - это собрать в кучу много разных распределений, в итоге получить нормальное и этот самый винеровский процесс. Так что если есть возможность увеличить выборку "на месте", ей стоит воспользоваться. Тут полный аналог неопределенности Гейзенберга: хотим точное распределение - непонятно, где оно было; хотим точно знать, где оно было - непонятно, какое оно было )
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
пока очередная свеча не накопится, её для анализа просто НЕТ
Это правильно, при обычном применении "незакрытой свечи" это будет заглядывание в будущее на тесте и феерический слив в реалтайме. Но посмотрите на картинку с другой стороны. Пусть есть десятиминутные свечи 10:00-10:10, 10:10-10:20 и т.д. Можно ли вместо них использовать свечи 10:01-10:11, 10:11-10:21 и т.д.? Можно же, какая разница. Или 10:02-10:12, или 10:03-10:13... Ну так давайте настроим десять систем, каждая на своем вот этом сдвинутом фрейме, почему нет? Ну и в конце, раз они все одинаковые, может и будем просто каждую минуту считать очередной сдвинутый десятиминутный фрейм? И у нас получился скользящий фрейм, все свечи в котором, однако, вполне себе закрытые. Ну и минутный сдвиг тут для примера, а чего бы нам секундный не взять.

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

Цитата
Владимир написал:
алгоритмический выкидыш
Та не, с этим все нормально, под ним математика строгая. Вот можно ли эту математику ради наживы применить, другой вопрос. Напрямую вряд ли.
EMA, Расчет средней скользящей
 
Цитата
Владимир написал:
"Чтобы дать больший вес новым данным, была создана экспоненциальная скользящая средняя (EMA)"
Чудесные писатели чудесных текстов, была создана, типа сидели-сидели и создали и сразу торговля как поперла. Это просто БИХ-фильтр первого порядка, соответственно где применяющий понимает, что он творит, - там полезен, в прочих случаях очередной бубенчик. А цикл не нужен, достаточно последнюю точку рассчитать.
формирование свечей в QUIK (BUG), (QUIK vs QLUA)
 
Цитата
QApplication написал:
Но как же быть вот с этими трейдами?
А что ноль после номера трейда означает? Это не offmarket часом?
Кривые шибки в QLua
 
TGB,  нет квика под рукой, посмотрите плиз, вот так воспроизведется?
Код
local for_OnParam = 2
local N_OnParam = 0
IsRun = true

function OnParam(p1, p2)
   for i = 1, for_OnParam do 
      N_OnParam = N_OnParam + 1                                                                              
   end
end

function main()
   while IsRun do 
    do
      local OnParam_begin = N_OnParam   
      local J = 100000000   
      while ( J > 0  )   do   J = J - 1  end
      if N_OnParam ~= OnParam_begin then
         message ( ' Переключение колбека и потока main:  N_OnParam - OnParam_begin = ' .. tostring(N_OnParam - OnParam_begin))
      end      
   end
   sleep(10)  
   end
end   
   
function OnStop()
   IsRun = false
   return 10000   
end

Баги QUIK 8.13
 
Цитата
Roffild написал:
В Lua нет try-catch.
В луа есть try-catch, называется pcall.
Кривые шибки в QLua
 
TGB,  если уж говорить о возможных причинах, я бы посмотрел на хайли лайкли происходящий рехэш таблицы при вставке. Проверить это при наличии сорцев просто, поставить бряк на рехэш и запустить ваш тест. А так "из общих соображений" можно весь луа перерыть.
Подскажите Как залить JSON массив в LUA массив (таблица)? Массив 2х мерный. JSON лежит с текстовом файле.
 
Цитата
Alex написал:
А как ее установить ?)
Там жеж англицким по белому написано, забросить файл json.lua рядом с вашим и в вашем json = require "json", и потом json.decode(строка-с-джейсоном).
Цитата
Владимир написал:
вероятность нарваться на труднонаходимые ошибки
имеется, да. Но что-то мне подсказывает, что лисапедный парсер будет не сильно лучше, потому как иначе и вопроса бы не возникало.
Подскажите Как залить JSON массив в LUA массив (таблица)? Массив 2х мерный. JSON лежит с текстовом файле.
 
Хоть бы так например. Ну или изобрести лисапед самостоятельно.
Не могу получить данные по некоторым фьючерсам функцией CreateDataSource
 
Цитата
Дмитрий написал:
работает для инструмента Si-12.21 (SiZ1), но не работает для GOLD-12.21 (GDZ1)
У первого шаг цены 1, у второго 0.1, формат %d для целых чисел.
Кривые шибки в QLua
 
Цитата
TGB написал:
Параметр nup = 0 означает, что это C - функции
Этот параметр указывает количество upvalues, прицепленных к каждой функции. Их можно и к сишным функциям прицепить. Соответственно причина явно не в этом. И таки нет, там все просто, lua_pushcfunction + lua_setglobal (возможно, в сорце это один вызов и компилятор его автоматом так разворачивает, тем не менее).
Нельзя ли ключ из secring.txk использовать из токена?, qcrypto32, secring.txk, yubikey, rutoken, openssl, pki
 
Цитата
Arrigo написал:
Используете в телефоне "разблокировку по отпечатку"? ))
Возможно кого-то шокирует, я вообще сотовой связью не пользуюсь. Есть мыльница, в которую аккумулятор вставляется непосредственно перед авторизацией где-то по смс и вынимается непосредственно после. Мыльница ничего такого не умеет и слава богу.
Нельзя ли ключ из secring.txk использовать из токена?, qcrypto32, secring.txk, yubikey, rutoken, openssl, pki
 
Цитата
suturee написал:
Пальцы не нужны.
Принято, откладываем пальцы в сторону.
Цитата
suturee написал:
этот приватный ключ внутри токена и должен генерироваться, и за его пределы не выходить.
Все равно не понимаю, как оно может работать на автомате без митма со стороны поставщика ключа. Пусть квик начал подключение, ему нужен сессионный ключ, где он будет искать его, если таблетка у юзера где-то далеко? Или она на сервере воткнута? Кто тогда кнопку жмет? Если она таки у юзера, надо юзера как-то найти и запрос ему послать, что малореально без помощи сервера производителя таблетки, а это значит, что итоговый сессионный ключ пойдет тоже через сервер производителя таблетки (обратно от юзера к квику). Что в общем и есть митм тксть по обоюдному согласию.
Нельзя ли ключ из secring.txk использовать из токена?, qcrypto32, secring.txk, yubikey, rutoken, openssl, pki
 
Цитата
suturee написал:
чтобы ключ не лежал в открытом виде на диске
Он и не лежит в открытом виде. Введите неправильный пароль в окне авторизации и убедитесь, что квик не сможет ключ извлечь.
Цитата
suturee написал:
нельзя ли это всё бесплатно сделать лучше чем сейчас
Либо я чего-то не понял, либо бесплатный ключик стоит от 2500 рубликов и до ой-ой. Также интересно, а пальчики юзера как в железку попадают вместе с приватным ключом? Сливаются ли они при этом куда-то? А то как-то эти все удобства уже проходили, сначала в бой бросаются те, кому "нечего скрывать", а потом уже ВСЕ ЗАКОНОМ ОБЯЗАНЫ.
Отладка QUIK 8.13
 
Цитата
TGB написал:
для вас чем меньше ядер у ПК, тем лучше?
Я такого не писал нигде и никогда. Что уж так грубо набрасывать-то.

Кому охота в граммах прикинуть, что такое лок шины и чем он плох, вот это надо собрать в релизном конфиге и запустить.
Код
#include <cstdio>
#include <intrin.h>
#include <process.h>
#include <Windows.h>

static const unsigned int NTHRD = 64;
static const unsigned int NITER = 10000000;
static volatile long cnt[NTHRD];

static unsigned int __stdcall RawLoopThread(void * pvoid)
{
   volatile long * pcnt = cnt + reinterpret_cast<unsigned int>(pvoid);
   *pcnt = 0;
   for(unsigned int n = 0; n < NITER; ++n)
      *pcnt = *pcnt + 1;
   return *pcnt;
}

static unsigned int __stdcall InterlockedLoopThread(void * pvoid)
{
   volatile long * pcnt = cnt + reinterpret_cast<unsigned int>(pvoid);
   *pcnt = 0;
   for(unsigned int n = 0; n < NITER; ++n)
      _InterlockedIncrement(pcnt);
   return *pcnt;
}

static void MeasureLoop(unsigned int (__stdcall * pfn)(void *), const char * name)
{
   unsigned long long t = ::GetTickCount64();
   HANDLE threads[NTHRD] = { 0 };
   for(unsigned int n = 0; n < NTHRD; ++n)
   {
      unsigned int tid;
      threads[n] = reinterpret_cast<HANDLE>(_beginthreadex(nullptr, 0,
         pfn, reinterpret_cast<void *>(n), CREATE_SUSPENDED, &tid));
   }
   for(unsigned int n = 0; n < NTHRD; ++n)
      ::ResumeThread(threads[n]);
   ::WaitForMultipleObjects(NTHRD, threads, TRUE, INFINITE);
   t = ::GetTickCount64() - t;
   for(unsigned int n = 0; n < NTHRD; ++n)
      ::CloseHandle(threads[n]);
   printf("  %s:\n    %0.9f seconds\n    %0.9f microseconds per iteration\n",
      name, t / 1000.0, t * 1000.0 / NITER);
}

void main(void)
{
   printf("Performance:\n");
   ::MeasureLoop(::RawLoopThread, "RawLoopThread");
   ::MeasureLoop(::InterlockedLoopThread, "InterlockedLoopThread");
   printf("Press ENTER to exit\n");
   getchar();
}

Отладка QUIK 8.13
 
Цитата
TGB написал:
То есть. когда вы пользуетесь браузером, у вас QUIK перестает работать?
Утрировать можно сколько угодно. Браузер более-менее нормально написан, поэтому не перестает. А вот когда квик с полными таблицами стартует, кое-что таки наблюдается. Речь-то шла блокируют ли ядра друг друга, так вот блокируют только в путь, например, каждый Interlocked* лочит шину, при этом все ядра встают и ждут. Сравните по времени цикл с v = v + 1; с аналогичным по функционалу циклом с InterlockedIncrement(&v), особенно если таких циклов несколько в разных потоках.
Отладка QUIK 8.13
 
Цитата
TGB написал:
в любой операционной системе на ПК с одним одним ядром ЦП
Выделил ключевое. Как только ядер больше одного, тут же начинают весьма себе блокировать.

Цитата
TGB написал:
а я пишу о "светлом" будущем, когда длинные участки участки непрерывного байт-кода не должны блокировать друг друга
Устройте его себе сами. Потом расскажете, удобно ли.
info.log
 
Цитата
QApplication написал:
Даже не могу представить что туда можно продублировать
Все OnParam например.
Расширить список функций обратного вызова
 
Цитата
Старатель написал:
Хотелось бы что-то типа такого "из коробки" без необходимости дёргать GUI.
Об чем вся и ветка. Так-то задача на десять строк, если говорить о монолитной аппе. Но qlua в основную аппу не зашит, он плагин, так что на практике может быть довольно геморройно это сделать.
Подскажите как отправлять инфу из QUIK в телеграм?
 
Цитата
Александр написал:
io.input() / io.output()
Они же просто переопределяют стандартный ввод и вывод. Как минимум надо иметь уже открытый хэндл, на который переопределять, что сводится к задаче где его взять, которая в общем тут и обсуждается.
Количество открытых позиций (ОИ)
 
Стих,  это особенность деривативов. Акций существует столько, сколько их выпустил эмитент, они из рук в руки переходят, но количество всегда постоянно (допэмисии и сплиты не считаем). Фьючерса в природе нет, пока не произошла сделка между покупателем и продавцом, в этот момент возникает один контракт. Потом он может опять же из рук в руки переходить. Если у кого-то был шорт и он купил контракт, эти две позиции взаимно уничтожаются и становится контрактом меньше. Вот ОИ и показывает, сколько сейчас живых контрактов.
OnTransReply возвращает order_num = nil
 
Цитата
Старатель написал:
про 0 (ноль)
Ага. Что, кстати говоря, косячок-с, по логике нил должен быть, номер-то не изменился у заявки, он просто уже недоступен.
OnTransReply возвращает order_num = nil
 
Старатель,  https://forum.quik.ru/messages/forum10/message50381/topic5978/#message50381
Расширить список функций обратного вызова
 
Цитата
Старатель написал:
с учётом, что SetSelectedRow - синхронное сообщение?
В данном случае да, колбек дернут из потока квика, SendMessage отправляется из потока квика в поток квика, а это просто прямой вызов оконной процедуры.
OnTransReply возвращает order_num = nil
 
Цитата
Алексей написал:
Но ведь колбэки именно под это и заточены.
Ну так они и дернутся в каком-то неведомом порядке и количестве, свою задачу выполнят.

Кстати говоря, еще раз перечитал первое сообщение и похоже, что вопрос-то немного о другом, нил приезжает в OnTransReply при снятии заявки? Это нормальное поведение тогда на некоторых классах. Опять же, в описанном мной варианте вас это не должно тревожить, у вас есть trans_id, по которому вы найдете объект транзакции, а из него получите ссылку на объект заявки, которую снимали. В любом случае предлагаю создавать свои объекты для заявок и транзакций, а не полагаться на "выдерну из таблицы", поскольку в таблице нет одной важной вещи - статуса (вашего, не квиковского), т.е. "что я с этим объектом сделал и чего от него жду".
OnTransReply возвращает order_num = nil
 
Цитата
Алексей написал:
он обязательно появится?
Он может и совсем не появиться. Выше QApplication дал ссылку, там он как раз разбирался с тем, что не приходит. Или если соединение потеряно непосредственно после отправки транзакции. Спасение в том, чтобы не закладывать никакой порядок колбеков и даже факт их появления. Вы хотите создать заявку - создаете объект заявки со статусом "ожидает отправки", затем создаете объект транзакции со ссылкой на объект заявки и отправляете, меняя статус заявки на "отправлена", затем колбеки как-то меняют состояние транзакции и заявки, при этом в колбеке транзакции вы также меняете состояние заявки (а ссылка на заявку у вас в транзакции есть). В какой-то момент состояние заявки становится "выставлена", или даже сразу "исполнена", или "снята", или "отвергнута", или "соединение потеряно, фикзнает что с ней", тут вам транзакция больше не нужна, вы ее удаляете, не глядя, что там с ней случилось.
OnTransReply возвращает order_num = nil
 
Алексей,  если коротко - придет позже еще один OnTransReply уже с номером заявки.

Если чуть длиннее, общая проблема состоит в том, что все рассматривают транзакцию как метод класса заявки, и OnTransReply как асинхронный колбек завершения этого метода, то есть примерно так
Код
class Order
{
    void SendTransaction(...);
    virtual void OnTransReply(...);
    virtual void OnOrder(...);
};
, в то время как транзакция является самостоятельным классом и OnTransReply это событие изменения чего-то в этом классе, т.е. примерно так
Код
class Order
{
    virtual void OnOrder(...);
};

class Transaction
{
    SendTransaction(...);
    virtual void OnTransReply(...);
};
При первом подоходе вы, естественно, ждете однократного события завершения транзакции со всеми полями. При втором нет ничего странного в том, что состояние транзакции меняется в несколько подходов. Когда оно изменится настолько, что дальнейшая судьба транзакции вам станет неинтересна (в вашем случае, когда придет номер заявки), вы можете этот объект удалить и игнорировать дальнейшие его изменения.

OnOrder может приходить раньше OnTransReply, но с учетом вышесказанного вас это не будет беспокоить, поскольку состояния классов меняются независимо (хотя как результат изменения состояния транзакции вы будете, скорее всего, и как-то менять состояние ордера).
Подскажите как отправлять инфу из QUIK в телеграм?
 
Цитата
Александр написал:
В чём прикол?
Дык сервер еще написать надо, который этот пайп создаст и будет его слушать. Речь о том, что на стороне луа особой поддержки не надо, она есть и так.
CreateDataSource для минутных интервалов
 
Цитата
QApplication написал:
QUIK пару часов был online.Может нужно каждый таймфрейм активировать (просмотреть на графике) для каждого инструмента?
Так вот CreateDataSource его и активирует. Неважно сколько квик был онлайн, если минутки до скрипта заказаны не были, только после заказа они начнут ехать, а это время какое-то. Потом еще вопрос, вы не из индикатора заказываете? В индикаторах работать не будет.
Подскажите как отправлять инфу из QUIK в телеграм?
 
Цитата
Nikolay написал:
либо named pipes - надо написать(найти) dll обмена на стороне lua
Код
io.open("\\\\.\\PIPE\\MySuperPuperServer", "wb")
Тока flush не забывать после записи.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 24 След.
Наверх