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

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

Страницы: Пред. 1 ... 27 28 29 30 31 32 33 34 35 36 37 ... 71 След.
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
для тех,кто не знает:
 
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
если это медленно< то можно загрузить внешнюю функцию на СИ
в этом случае  1 миллион сортируется за 0.085 секунд
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
мульон значений сортируется примерно за 0.5 сек  на 64-разрядной версии Windows 10. Intel Core I7-4500U  
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
для тех, кто не знает.
-----------------------
В луа реализована сортировка, поэтому нет надобности городить сортировку.
-----------------------
сортировка пузырьками - это медленная сортировка.
------------------------
читаем документацию:
Внутри table.sort используется быстрая сортировка, и она написана на C.
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
вот фрагмент из исходников обращения к элементу массива.
Кто знает СИ да увидит.
----------------
   for (; i <= lim; i++) {
     if (!ttisnil(&t->array[i-1]))
       lc++;
   }
   nums[lg] += lc;
   ause += lc;
 }
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
для тех,кто не в курсе.
читаем документацию:
-----------------------
Реализация таблиц (они же массивы, объекты или хеш-таблицы).
Таблицы содержат свои элементы в двух частях: часть массива и часть хэша.
Все неотрицательные целочисленные ключи являются кандидатами на сохранение в   части массива.
Фактический размер массива равен наибольшему 'n' такому, что   используется более половины слотов между 1 и n.
Хэш использует сочетание таблицы разброса в цепочке с вариацией Брента.
Основным инвариантом этих таблиц является то, что если элемент не находится  в своей основной позиции
(т. е. «исходной» позиции, которую его хэш дает ему ),
то конфликтующий элемент находится в своей собственной основной позиции.
Следовательно, даже когда коэффициент загрузки достигает 100%, производительность остается хорошей.
-------------------------
Для тех, кто не понял, поясняю:
---------------------
Массивы в луа - это массивы в памяти.
Если используете индексы - целые числа, то это фактически массивы  СИ.
---------------
Передача массивов в функции выполняется по ссылке,
т е копия массива не делается а передается указатель.
Метки в индикаторе, При перезапуске Квика получается наслоение меток
 
это картинки для версии квика 9.5.0.42
два индикатора:

один удаляем:


Удивительно, но у меня все работает правильно.
Метки в индикаторе, При перезапуске Квика получается наслоение меток
 
версия квика 9.7.1.10
Метки в индикаторе, При перезапуске Квика получается наслоение меток
 
Для тех, кто в танке.
==============
Вот вам картинки удаления меток при удалении  индикатора.
=============
На графике два индикатора метки м1 - первый, m2- второй

 


удаляю один индикатор:
 
Метки
 
Цитата
s_mike@rambler.ru написал:
Цитата
Старатель написал:
 
Цитата
s_mike@rambler.ru  написал:
в лучшем случае метка показывается не там где надо
 Интереса ради (чисто разговор поддержать). Какое время задавали? По Мск или локальное и где метка в этом случае показывается?
Все просто-препросто. Берем самую правую свечу графика, получаем ее время и в это же время ставим метку. А вот вам хрен, Волобуев!

У дворового пса блох меньше.
если без словесного поноса.
Вы берете открытую свечу,верно?
следовательно вопрос касается возможности установки метки на открытой свече. верно?
тогда вопрос.
возникает ли такая же проблема для свечи закрытой.
--------------------
а чтобы клиент не занимался херней,
вы ему объясните что в розетку не надо ради любопытства засовывать два пальца,
если не изучили документацию, а вы как разработчик не разрешили это делать.
====================
Если чел въехал в столб, нажав скорость вместо стоп,
это проблема не производителя авто.  
Метки
 
Вроде бы никогда не было проблем с метками. задаешь и все выставляется.
Но мазохизмом таким, правда, не занимался.
А оно Вам надо?
Кривые шибки в QLua
 
Я работаю с потоками в квике даже с пулом потоков
в тестах максимально открывалось 15 потоков.
О тестах уже писал.
В тесте выставлялись заявки и после выставления снимались
по 200 инструментам за 4 часа работы было выставлено и снято 200 тысяч заявок.
Не было ни одной ошибке типа "заявку снять невозможно"
Ни одного зависания.
----------------  
Я это к тому, что Ваши рассуждения лишь доказательство ошибок в вашем софте.  
Кривые шибки в QLua
 
Цитата
Павел Bosco написал:
Цитата
TGB написал
2.  
Цитата
Павел Bosco  написал:
вопрос, как увидеть существование блокировки при вызове quik lua api для меня остался открытым.
У меня встречный вопрос: Если вам нужно просто реализовать своего робота, а не выполнять научно-исследовательскую работу  :: , то зачем вам нужны потоки и прочая "лабуда"? Пишите своего робота на QLua, как советует Владимир, стараясь обходиться даже без внешних библиотек. Это хороший совет для всех и, особенно, для начинающих.

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

я предполагаю, что мой тест провалился, потому что обрамление в lock/unlock происходит только для вызовов из lua байткода. а я вызывал sleep через pcall в своей c функции. в этом случае обрамления не происходит. тогда я попробовал даже дополнительный способ: вставил вызов функции sleep внутрь новой lua функции m_sleep, чтобы получить задействовать VM, но и тут ожидаемого "обрамления" не произошло.
возможно там где-то есть и хитрые проверки, чтобы не получалось так, что мы из C функции вызываем из неё другую C функцию, та вызывает lua функцию и мы получаем блокировку.

потом я переделал main на Lua, тест стал выглядеть так
main (lua) -> _main© [создание двух потоков] -> thread © -> m_sleep (lua) -> sleep(10000) (lua)
но оба потока завершаются через 10 секунд одновременно.
байткод не причем,
-----------------
/*
** macros that are executed whenever program enters the Lua core
** ('lua_lock') and leaves the core ('lua_unlock')
*/
#if !defined(lua_lock)
#define lua_lock(L)     ((void) 0)
#define lua_unlock(L)   ((void) 0)
#endif
-----------------------------------------
/*** макросы, которые выполняются всякий раз, когда программа входит в ядро Lua
** ('lua_lock') и оставляет ядро ('lua_unlock')
*/
#если !определено(lua_lock)
#определить lua_lock(L) ((void) 0)
#определить lua_unlock(L) ((недействительный) 0)
#конечный код
-----------------------
таким образом, это макросы для ядра VMLua и они определяются на стадии сборки VMLua.
Если разработчики их определили, то они есть иначе это пустышки.
=================
при вызове через pcall
эти макросы тоже работают если их определили:
===========

LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc,
                       lua_KContext ctx, lua_KFunction k) {
 struct CallS c;
 int status;
 ptrdiff_t func;
 lua_lock(L);
 api_check(L, k == NULL || !isLua(L->ci),
   "cannot use continuations inside hooks");
 api_checknelems(L, nargs+1);
 api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread");
 checkresults(L, nargs, nresults);
 if (errfunc == 0)
   func = 0;
 else {
   StkId o = index2addr(L, errfunc);
   api_checkstackindex(L, errfunc, o);
   func = savestack(L, o);
 }
 c.func = L->top - (nargs+1);  /* function to be called */
 if (k == NULL || L->nny > 0) {  /* no continuation or no yieldable? */
   c.nresults = nresults;  /* do a 'conventional' protected call */
   status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func);
 }
 else {  /* prepare continuation (call is already protected by 'resume') */
   CallInfo *ci = L->ci;
   ci->u.c.k = k;  /* save continuation */
   ci->u.c.ctx = ctx;  /* save context */
   /* save information for error recovery */
   ci->extra = savestack(L, c.func);
   ci->u.c.old_errfunc = L->errfunc;
   L->errfunc = func;
   setoah(ci->callstatus, L->allowhook);  /* save value of 'allowhook' */
   ci->callstatus |= CIST_YPCALL;  /* function can do error recovery */
   luaD_call(L, c.func, nresults);  /* do the call */
   ci->callstatus &= ~CIST_YPCALL;
   L->errfunc = ci->u.c.old_errfunc;
   status = LUA_OK;  /* if it is here, there were no errors */
 }
 adjustresults(L, nresults);
 lua_unlock(L);
 return status; }
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
а если это число то переводит его в число.
Сортировка и фильтры в lua таблицах, Можно ли использовать сортировку с учётом типа данных в стобце ?
 
Цитата
Boris написал:
Здравствуйте.
Не нашёл в документации как необходимо организовать создание таблицы средствами lua - для того чтобы можно было использовать встроенные в quik функции сортировки и фильтров по столбцу ?
Где об этом можно прочитать ?

По ощущениям - всегда учитывается только формат string.
Ни дату, время ни числа в созданной lua таблице не отсортировать ?
а в чем разница число это или дата или string?
VMLua сравнивает строки как числа , используя для этого хеш.
Ошибка при расчёте стохастика, Выдаёт ошибку при обращении к SO.lua
 
Цитата
Евгений написал:
function Init()
  func = SO()
  return #Settings.line
end
попробуйте перенести функцию Init в самый конец скрипта
Quik и Raspberry Pi, Работа на Линухе
 
Цитата
Beginner написал:
Здравствуйте!

Возможна ли установка Квика на Raspberry Pi (ОС Raspbian) и, если да, то будут ли в этой среде работать скрипты на Lua?

Где можно найти версию для установки в указанную ОС?
нет и нет.
Недокументированный "Троянский конь" на Lua
 
Добрый день, всем,
Хотя о том, про что буду рассказывать знаю с момента появления LUA VM в КВИКЕ
и думал, что эту подлянку давно поборол, однако она снова дала о себе знать.
---------------------
В частности примерно это же недавно обнаружил посетитель по нику Старатель.
--------------------
Так как я давно казалось бы проблему решил, поэтому на его вопрос особо не обратил внимание.
===============
но вот недавно столкнулся с проблемой удваивания заявок-близнецов.
=================  
Хотя ничего хорошего мне на форуме как обычно не посоветовали, но вредные советы тоже пригодились.
===============
Например, представитель разработчиков гневно заявил, что мол надо все обнулять при index=1 в индикаторах.
Благодарю его за его вредный совет.
------------------
Действительно, верно говорят -выслушай совет на Красной площади и сделай наоборот.
----------------------------
Поэтому я обратил внимание, что именно по index=1 я обнулил лог файл.
-------------
продолжение следует..
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
теперь все х'океу:
 
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Цитата
Старатель написал:
Цитата
nikolz написал:
по одной транзакции выставились две заявки близнецы.
 
Цитата
nikolz написал:
Проблему решил.

И в чём же проблема была? Каким образом решили проблему?
хотите узнать, пишите в личку.
Метки в индикаторе, При перезапуске Квика получается наслоение меток
 
В OnDestroy
Метки в индикаторе, При перезапуске Квика получается наслоение меток
 
Цитата
Старатель написал:
Цитата
nikolz написал:
Если хотите удалить все метки при срабатывании OnDestroy
Нужно удалить не все, а только те метки, что были выставлены из индикатора.
тогда в цикле
DelLabel(STRING chart_tag, NUMBER label_id)
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Проблему решил.
Всем спасибо.
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
таблица заявок:
 
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Цитата
swerg написал:
Николз, нужен полный код. Для возможности анализа, повторения.
За фрагменты на любом форуме посылают лесом, порой в грубой форме.
Здесь напрасно нянькаются.
попробую сделать короткий вариант.
но прежде сделаю еще одну попытку объяснить.
Это тест-индикатор и запускается он на демо сервере.
в нет три функции
1- проверяет есть ли неисполненные транзакции
эта функция ничего не отсылает, а выдает лишь число активных транзакций
2- посылает транзакцию на выставление заявки если функция 1 выдала 0
3- проверяет есть ли активные заявки и если есть снимает их
---------------------
Таким образом , в on Calculate крутятся эти три функции
-----------------
В этих функциях есть два места вывода транзакций
в функции 3- в выставлении заявки
вот это место
---------------------------
Код
id=id+1; t1.TRANS_ID=tostring(id);    -- Уникальный идентификационный номер заявки,  от «1» до «2 147 483 647»
local str=sendTransaction(t1); --отправить транзакцию
Log:write("str="..tostring(str)..",id="..tostring(id).."\n");   Log:flush()
Обратите внимание на следующее:
id- идентификатор  всегда увеличивается на 1 перед записью в транзакцию
Сразу после отсылки транзакции выводится в лог сообщение транзакции и id
----------------
таким образом, если в этом месте будет выдано две транзакции
то они будут иметь разные id и в лог файле будет две записи
==========
второе место отсылки транзакции в функции 2
------------------
вот это место
Код
   id=id+1; t1.TRANS_ID=tostring(id);  -- Уникальный идентификационный номер заявки
   local str=sendTransaction(t1);   --отправить транзакцию
   Log:write("str2="..tostring(str)..",id2="..tostring(id).."\n");   Log:flush()
логика та же, что и выше.
==========================
смотрим лог файл:
Код
str=,id=2173
str2=,id2=2174
str2=,id2=2175

Есть одно сообщение о выставлении заявки с id=2173
и далее два сообщения (id=2174 и id=2175) о снятии двух заявок.
а это таблица заявок


 
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Цитата
Sergey Gorokhov написал:
Цитата
nikolz написал:
Вы видите там вторую транзакцию?Ау , где вторая транзакция, кто тут ее посылает?

Если Вы не видите, это не значит что ее нет.
Жаль то приходятся в пятый раз повторять:
Цитата
Sergey Gorokhov написал:
Не бывает по одной sendTransaction две заявки с разными номерами. Даже теоретически.
Надо принять это как незыблемую аксиому. И пока Вы этого не сделаете, разобрать вообще никак не получится.

Цитата
nikolz написал:
Возможно врач забыл скальпель в желудке  пациента .

Посмотрите как сделано в документации, глава описания функции CandleExist
там не зря указано обнуление переменных при indx == 1
Возможно у Вас та же история, попробуйте обнулять переменные при первом индексе
про обнуление при indx=1
вот вам фрагмент кода.
---------------
if i==1 then nkInit(); i_old=1; return end
-----------
а вот вам и обнуление
-------------
Код
local function initT(sec,clas,account,client)
   tS={};     tS[0]=0; for i=1,7 do tS[i]={0,0} end  --стоп заяки
   tO={};    tO[0]=0; for i=1,7 do tO[i]={0,0} end  -- заявки
   tOi={};tOi[0]=0; for i=1,7 do tOi[i]={0,0} end  --транзакции заявок
   tSi={};tSi[0]=0; for i=1,7 do tSi[i]={0,0} end  --транзакции стоп-заявок
   id,nOrder,nStop,obal,tbal,nto,nts=0,0,0,0,0,0,0; jD=-1;
   step,lot_size,scale=0,0,0;
--   Log:write("sec="..tostring(sec)..",clas="..tostring(clas)..",tS0="..tostring(tS[0])..",tO0="..tostring(tO[0]).."\n");   Log:flush()
-----------------
end
---------------
local function nkInit()
--   DelAllLabels(tag);
   tinfo=getDataSourceInfo();
   clas=tinfo.class_code;   sec=tinfo.sec_code;    tag=sec;    pname=tinfo.param;
   interval=tinfo.interval;
   Log=io.open(path_Log..name..sec..".log","w")
   client=Settings.client;
--   Log:write("sec="..tostring(sec)..",clas="..tostring(clas)..",client="..tostring(client).."\n");   Log:flush()
    t_acc={};
--- определяем торговый счет
   local N=getNumberOf("trade_accounts");
   for i=0,N-1 do  z=getItem("trade_accounts", i);
      if string.find(z.class_codes,clas,1,true) and z.status==0 then
         firmid=z.firmid;    account=z.trdaccid; break;
      end
   end
-----------------------------
end
У меня к Вам просьба.
в будущем, когда у Вас возникнет желание ответить на мои вопросы,
не надо мне рассказывать банальные вещи в программировании.
-------------------
Если не можете что-то подсказать дельное по существу вопроса,  то лучше молчите.
--------------------
Я профессионально разрабатывал и более крутые системы РВ  и ИИ.
-----------------
Если бы вы, как все серьезные разработчики выложили API к QUIK и описали ее работу,
то я бы Вас не спрашивал а сам разобрался бы( да и разберусь)
----------
Пока же Вы за более чем 20 лет нагородили большой "черный ящик",
теперь  засунули туда виртуальную машину которая потока не безопасная и работает в в окружении десятка потоков,
-----------------------
Поэтому спрашиваю Вас про Ваш "черный ящик", под названием QUIK.
ParamRequest и CancelParamRequest в индикаторах, ACCESS VIOLATION
 
Цитата
TGB написал:
Все-таки:
Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?
   Вопрос задан две недели назад.
  Выложен код демонстрирующий ситуацию.
  В ветке по ссылки  https://forum.quik.ru/messages/forum10/message64619/topic7524/#message64619  мучается пользователь.

 Где ответ поддержки?
Это другой случай.
В моем примере, повторный вызов приведет к отправке транзакции  с другим id  на 1 больше
так как id увеличивается в следующем операторе после транзакции.  
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
и еще поясню.
У вас на демо сервере сделки идут не чаще 1 раз в секунду.
если бы эта сделка была бы на следующем цикле, то время сделок отличалось бы на секунду
а там близнецы -сестры.  
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Цитата
Sergey Gorokhov написал:
Цитата
nikolz написал:
как в индикаторе можно отправить вторую заявку из другого места?

При чем тут индикаторы?
Вы наверное считаете что раз пишите индикатор, то все на форуме в курсе про это?
Ну допустим. Если речь про индикаторы то OnCalculate может сработать несколько раз, смотрите в эту сторону
Или может у Вас несколько разных индикаторов с одним алгоритмом, кто знает

И еще раз, а то вдруг не понятно
Цитата
Sergey Gorokhov написал:
Не бывает по одной sendTransaction две заявки с разными номерами.  Даже теоретически.  
Хорошо, уточняю.
Это индикатор, который делает тест на демо сервере - выставляет  заявку по этой транзакции и когда она выставиться снимет ее по KILL
------------------  
Еще раз медленно объясняю
==========================
Oncalculate выглядит так:
Код
function OnCalculate(i)
--------------------
Order("orders",0);  --снять заявку, если она есть 
------------------
if conX("orders")==0 then  
buy_sel(1,1,-1); --выставить заявку на покупку 1 лота, если ее нет
end
---------------
end

Индикатор демо загружен один на одном графике
и по имени этого инструмента создается лог файл.
--------------------  
СЛЕДИТЕ ВНИМАТЕЛЬНО за объяснением
------------------
В приведенном выше фрагменте
написано
=============  
t1.TRANS_ID=tostring(id+1);    --  присваиваем транзакции уникальный id
======================
local str=sendTransaction(t1); --отправить транзакцию
=============
if str=="" then  id=id+1;...  -- здесь этот id увеличивается на 1
=========================
Таким образом, в следующем цикле id будет на 1 больше
=================
Вторая транзакция с таким же номером должна быть отослана на сервер
между этими  двумя операторами.
================  
Вы видите там вторую транзакцию?
Ау , где вторая транзакция, кто тут ее посылает?
===============
Так как это индикатор, а не скрипт , то нет никаких параллельных потоков.
================  
Но сильно не напрягайтесь,
так и скажите,
что понятия не имеете почему так происходит.
За более чем 20 лет что только вы не написали в квике.
--------------------
Возможно врач забыл скальпель в желудке  пациента .
И так бывает.
 
робот в индикаторе
 
Цитата
Владимир написал:
nikolz, Всё никак не уймётесь, лапуль? Говно этот Ваш индикатор, ИДЕОЛОГИЧЕСКОЕ говно. И Вы абсолютный чайник, сподобившийся тут ликбезы проводить. Шли бы Вы из программистов, лапуль, куда-нибудь, где Вы ХОТЬ ЧТО-ТО соображаете.
говно у Вас в голове
и поэтому словесный понос  на форуме.
Посоветуйте как правильно передавать данные?, доступ в квик стороннему программиста без права выставления реальных ордеров (для тестирования стратегии)
 
Цитата
Илья написал:
nikolz, Glukator, Старатель,спасибо за советы. Демо счет уже открыл и не демо тоже)
Сейчас у меня получилось через DDE в Excel выгружать данные (по строчно) с интервалом раз в 1 минуту.

Еще раз, окончательный вопрос звучит так:
Как из QUIK получать данные из стандарных столбцов приземляя их например в Python для дальнейшего анализа?
Куда копать?
Для подобных задач  использую DDE и mapping file.
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Цитата
Sergey Gorokhov написал:
Цитата
nikolz написал:
по одной транзакции выставились две заявки близнецы.

Еще раз
Цитата
Sergey Gorokhov написал:
Значит было две транзакции, а не одна.
Найдите кто отправил вторую транзакцию

Не бывает по одной sendTransaction две заявки с разными номерами. Даже теоретически.
Однозначно было две транзакции
Я Вам привел фрагмент кода и данные из лог файла.
ID в коде меняется следом за посылкой транзакции.
==================
Намекните,
как в индикаторе можно отправить вторую заявку из другого места?
в каком месте индикатора есть дополнительные потоки, исполняющиеся параллельно с этим фрагментом кода?
робот в индикаторе
 
Добрый день, Всем
В качестве ликбеза для буратин и чайников,
привожу результаты тестирования скорости исполнения выставления и снятия заявки в роботе,
который реализован в индикаторе.
-------------
кратко в чем преимущество такой реализации относительно реализации в виде скриптов.
================
1) нет надобности писать колбеки и разбираться в них.
----------------
2) робот можно сделать одинаковым для любых инструментов
Например робот автомат управления стопом.
---------------------
3) проще реализовать, так как нет надобности заморачиваться с фильтрацией инструментов.
На какой график кинете этого робота, на том инструменте он и будет работать.
=================
А теперь о скорости его работы.
Тест, в котором выставляется заявка, когда она выставится, робот ее снимает.
при этом он проверяет таблицу стоп-заявок, заявок и депо.
=================
На выставление заявки уходит примерно 0.006 сек
На проверку активной заявки и выставление заявки на снятие уходит примерно выставление заявки на снятие уходит примерно 0.004 сек
--------------------------
время в мкс:
Код
depo t1=47.8, таб.стоп_ордер t2=1.8, таб.ордер t3=272.4, ордер t4=30.7
m=1,flag=2.0,nu=6947069167,idt=421
depo t1=40.2, таб.стоп_ордер t2=1.6, таб.ордер t3=67.6, ордер t4=304.5
m=1,flag=1.0,nu=6947069357,idt=423
depo t1=48.1, таб.стоп_ордер t2=1.6, таб.ордер t3=257.6, ордер t4=29.6
m=1,flag=2.0,nu=6947069357,idt=423
depo t1=38.5, таб.стоп_ордер t2=1.9, таб.ордер t3=75.6, ордер t4=309.8
m=1,flag=1.0,nu=6947069489,idt=425
depo t1=52.4, таб.стоп_ордер t2=2.1, таб.ордер t3=339.3, ордер t4=38.9
m=1,flag=2.0,nu=6947069489,idt=425
depo t1=72.4, таб.стоп_ордер t2=3.1, таб.ордер t3=124.2, ордер t4=584.2
m=1,flag=1.0,nu=6947069557,idt=427
depo t1=47.9, таб.стоп_ордер t2=1.7, таб.ордер t3=240.8, ордер t4=27.6
m=1,flag=2.0,nu=6947069557,idt=427
depo t1=64.9, таб.стоп_ордер t2=2.5, таб.ордер t3=123.0, ордер t4=580.2
m=1,flag=1.0,nu=6947069616,idt=429
depo t1=59.9, таб.стоп_ордер t2=2.3, таб.ордер t3=334.9, ордер t4=39.1
m=1,flag=2.0,nu=6947069616,idt=429
depo t1=70.8, таб.стоп_ордер t2=2.5, таб.ордер t3=123.9, ордер t4=518.8
m=1,flag=1.0,nu=6947069717,idt=431
depo t1=62.7, таб.стоп_ордер t2=2.6, таб.ордер t3=397.2, ордер t4=52.4
m=1,flag=2.0,nu=6947069717,idt=431
depo t1=70.3, таб.стоп_ордер t2=3.0, таб.ордер t3=124.9, ордер t4=523.5
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Цитата
Евгений написал:
Цитата
nikolz написал:
Таким образом, исключается передача транзакции с одинаковым idи контролируется количество переданных транзакций.
Думаю что это не правильный подход, id транзакции может быть одинаковым на все заявки это вобще ни на что не влияет
вы не поняли вопроса. Суть не в том что id одинаковый, а в том, что по одной транзакции выставились две заявки близнецы.
Подписка на стакан OnQuote в quik 9.7.1
 
Цитата
Kolossi написал:
getQuoteLevel2
Не понятно, что значит забивает присутствием.
Поставьте вывод занятой памяти перед ней и после нее.
-------------------------
что колбек , что не колбек - на память не влияет.  
Удваиваются заявки. Версия 9.7.1.10., Вопрос разработчикам QUIK
 
Тестирую в демо версии выставление заявок
фрагмент кода такой:
Код
t1.PRICE=tostring(price);
t1.QUANTITY=tostring(Q);
t1.TRANS_ID=tostring(id+1);    -- Уникальный идентификационный номер заявки,  от «1» до «2 147 483 647»
local str=sendTransaction(t1); --отправить транзакцию
Log:write("сообщение"..str.."\n");   Log:flush()  -- вывод сообщения в файл
if str=="" then  id=id+1; ji=ji+1; ti[ji]={id,0}; ti[0]=ji;
   Log:write("заявка id"..tostring(id)..",ji="..tostring(ji).."\n");   Log:flush()
end ---если  сообщение пустое то в файл выводится id транзакции
Поясняю.
Разработчикам просьба внимательно читать пояснения.
Все тщательно разжую.
================
Выполняется:
str=sendTransaction(t1)  
строка str выводится в файл
если сообщения  нет , то  id  увеличивается на 1 и становится равным id транзакции
и выводится в файл
=====================
ВНИМАНИЕ!!!
Таким образом, исключается передача транзакции с одинаковым id
и контролируется количество переданных транзакций.
===================
В лог файле при выполнении транзакции получаем:
Код
сообщение
заявка id31,ji=1
Т. е. ожидаем одну заявку с id=31
----------------
ВНИМАНИЕ!!!
смотрим в таблицу заявок:

 
Однако,
наблюдаем по две заявки с одинаковыми id
одинаковыми параметрами
и в одно и тоже время.
------------------------
Что не так?
Подписка на стакан OnQuote в quik 9.7.1
 
Цитата
Дмитрий написал:
quik 9.7.1
простой код, за несколько минут занимаемая память разбухает до более 10 Мб, запускается в lua 5.4.1
Код
   function   main ()
    while   true   do 
       sleep ( 1000 )
    end 
 end 

 function   OnQuote (class, sec)   
    if  ((class  =  =   "SPBFUT" )  and  (sec  =  =   "SiU2" ))  then 
       local  ql2  =   getQuoteLevel2 (class, sec)
       -- что-то делаем 
    end 
 end 

  
попробуйте тоже на другой версии. возможно так задумано уже давно?
Посоветуйте как правильно передавать данные?, доступ в квик стороннему программиста без права выставления реальных ордеров (для тестирования стратегии)
 
Цитата
Glukator написал:
Может, я чего-то не понимаю, но нахрен такие сложности? Откройте демо-счет с квиком у любого брокера и отлаживайте свои скрипты, покуда терпения хватит.  
Вы вопрос читали?
Тогда отвечайте на вопрос, а не рассказывайте очевидные вещи.
открыть демо счет или у другого брокера - это ответ для дебилов, которые совсем уж ничего не знают, но это  не ответ на вопрос.
------------------
Если предложить по существу вопроса не можете так зачем выпендриваться?
Получить строки таблицы Текущие торги.
 
Цитата
Алексей написал:
Об этом я в курсе. Задумка была такая, в эту таблицу я загоняю интересующие меня инструменты, а уже из нее я скриптом считываю только их и ничего больше. Может есть другой путь? Сама таблица "Текущие торги" меня вообще не интересует, принципиально я могу скриптом создать таблицу, но как в нее загнать интересующие меня инструменты? Понятно что скриптом без проблем, но принцип должен быть тот же, что и с таблицей "Текущие торги". Т.е. по сути, таблица должна указывать скрипту с чем работать, а инструменты добавляю и удаляю я сам из рабочего пространства Quik.
есть два варианта, но они не на lua.
рассказать?
Получить строки таблицы Текущие торги.
 
Цитата
Алексей написал:
Всем доброго времени суток. Есть такой вопрос. В терминале Quik есть таблица "Текущие торги #2". Создана прямо из оболочки Создать таблицу -> Текущие торги. В этой таблице находится весь список инструментов меня интересующих. Задача. Могу ли я получить из этой таблицы как минимум class_code и sec_code по каждому инструменту из этой таблицы? Или это в принципе невозможно? Зная идентификатор таблицы я думаю можно без проблем проделать такой фокус, но я его не знаю и понятия не имею где его достать.
непосредственно из таблице нет,
но все инструменты и классы разрешенные Вам в терминале , т е то, что Вы можете выбрать в эту таблицу
вы можете получить функциями из библиотеки QLua.
Все есть в документации на эту библиотеку.
см раздел  Функции для обращения к строкам произвольных таблиц QUIK
если каких то параметров не хватает то можно дозаказать
см раздел Функции для заказа параметров Таблицы текущих торгов
Расчёт средней цены
 
https://fs.moex.com/files/21269
Расчёт средней цены
 
https://www.moex.com/s1194
Расчёт средней цены
 
Евгений Васильевич,
но возможно, что вы не учли комиссионные сборы брокера и биржи и в итоге
получите среднюю 96,66
--------------------
К сожалению, а этим показателем вообще не заморачиваюсь. поэтому не удержался от "погадать"
================
Мой совет, оцениваете успешность сделок по количеству денег на счете.
Расчёт средней цены
 
Евгений Васильевич,
waprice - транслируется биржей и это цена на бирже всех сделок.
------------------
В вашем случае, средняя цена Вашей покупки  96,59,
говорит, что вы купили ниже средней по рынку  96,66.
С чем Вас и поздравляю.
Расчёт средней цены
 
Евгений Васильевич,
Возможно , что это средневзвешенная цена для облигаций на рынке, а не для вашей покупки.
Расчёт средней цены
 
вообще-то
Расчёт средней цены
 
Евгений Васильевич,
И на вашей улице будет праздник.
если использовать правило, "когда все сломал, то читай инструкцию",
то Вот что пишет для Вас биржа:
========================================
Ценовые показатели на Фондовом рынке Московской Биржи

Особенности порядка расчета ценовых показателей

  1. Особенности расчета ценовых показателей для инструментов, сделки с которыми могут заключаться в разных валютах
    • Если сделки с ценными бумагами заключаются в нескольких валютах, то осуществляется пересчет в рубли по курсу Банка России на дату заключения сделки.
    • Для облигаций цена сделок выражается в % от номинальной стоимости облигации
Попробуйте пересчитать цену Ваших облигаций и затем средневзвешенную.
------------------
Как говориться в Уставе КА: "О выполнении доложить"
Расчёт средней цены
 
Цитата
Евгений Васильевич написал:
nikolz,
------------------------
Я прав или нет?
------------------------
Да, прав, прав.
Расчет тут абсолютно верен. Давайте больше формулу расчета средневзвешенного значения не обсуждать. Мы говорим об одном и том же. =)
Проблема в том, что не сходятся эти расчеты со значениями в QUIK.
Я всё про свой пример. Две облигации по 96,4 и одна по 96,98
(96,4*2 + 96,98)/3 = 96,59, но не 96,66 (которые рассчитал мне QUIK).
Вот в чем вопрос.
И вот еще:
"если по итогам торгового дня Средневзвешенная цена не была рассчитана, она не приравнивается к Средневзвешенной цене предыдущего торгового дня"
Это еще как понимать?
Вчера я купил акции и рассчитал Средневзвешенную цену, а сегодня не покупал и уже не могу оперировать вчерашним значением ...
Судя по документу, средневзвешенная цена рассчитывается на торговый день.
---------------------------
Если Вы хотите учитывать предыдущие расчеты, то делайте это своими руками.
Очевидно это связано с тем, что биржа  не хранит историю Ваших сделок.
Поэтому у биржи нет возможности пересчитать цену с учетом истории.
---------------------------------------------
Но разработчики квика могут это допилить при желании.
--------------------  
Про покупку Вами облигаций сказать ничего невозможно ,
так как надо видеть реальные данные сделок,
а не то, что "вчера коза сказала".
------------------------
Телепатии не обучен, а гадать нет желания.  
Расчёт средней цены
 
Цитата
Евгений Васильевич написал:
Цитата
nikolz написал:
средневзвешенная цена - это средняя цена,
рассчитанная как арифметическое среднее.
------------
т е складываете все цены всех сделок и делите на число сделок.
------------------
Так как Вы считает не все сразу а по частям,
то ранее рассчитанное вы снова восстанавливаете и снова все считаете
для этого каждый раз все пересчитываете к новому количеству.
-----------------
Но суть результата - сумму всех цен сделок делите на число сделок.
------------------------
Знаний в объеме ЦПШ  или 4 классов начальной школы  достаточно.
---------------------------
Надо знать всего две арифметические операции -сложить и поделить (любимые операции финансистов)
операции - отнять и приумножить (любимые фискальщиков) знать не обязательно.

.
Спасибо за ответ, но если честно, всю жизнь думал что среднее арифметическое и средневзвешенное это немного разные вещи.  Zoya Skvorcova  привела формулу для средневзвешенного и это не среднее арифметическое. Я полностью с ней согласен.
Отличия лучше всего показать на примере.
Одна акция по 100 рублей и 10 акций по 10 рублей дают среднее арифметическое в 55 рублей за акцию. В то же время,
одна акция по 100 рублей и 10 акций по 10 рублей дают средневзвешенное примерно в 18,18 рублей за акцию. В этом примере дешевых акций больше и вес их в среднем больше. Вот и требуется средневзвешенное. Это на уровне моей ЦПШ. Если в чем-то не прав, уважаемый nikolz, поправьте. =)
Цитата
Евгений Васильевич написал:
Цитата
nikolz написал:
средневзвешенная цена - это средняя цена,
рассчитанная как арифметическое среднее.
------------
т е складываете все цены всех сделок и делите на число сделок.
------------------
Так как Вы считает не все сразу а по частям,
то ранее рассчитанное вы снова восстанавливаете и снова все считаете
для этого каждый раз все пересчитываете к новому количеству.
-----------------
Но суть результата - сумму всех цен сделок делите на число сделок.
------------------------
Знаний в объеме ЦПШ  или 4 классов начальной школы  достаточно.
---------------------------
Надо знать всего две арифметические операции -сложить и поделить (любимые операции финансистов)
операции - отнять и приумножить (любимые фискальщиков) знать не обязательно.

.
Спасибо за ответ, но если честно, всю жизнь думал что среднее арифметическое и средневзвешенное это немного разные вещи.  Zoya Skvorcova  привела формулу для средневзвешенного и это не среднее арифметическое. Я полностью с ней согласен.
Отличия лучше всего показать на примере.
Одна акция по 100 рублей и 10 акций по 10 рублей дают среднее арифметическое в 55 рублей за акцию. В то же время,
одна акция по 100 рублей и 10 акций по 10 рублей дают средневзвешенное примерно в 18,18 рублей за акцию. В этом примере дешевых акций больше и вес их в среднем больше. Вот и требуется средневзвешенное. Это на уровне моей ЦПШ. Если в чем-то не прав, уважаемый nikolz, поправьте. =)
чтобы понять , кто прав рассмотрим следующий пример:
Совершено 3 сделки: 3 акции по 1 руб , 3 акции по 3 руб , и 6 акций по 4 руб
по моему мнению средневзвешенная цена считается так:   (1*3+3*3+4*6)/(3+3+6)=3 рубля.
------------------------
Я прав или нет?
Ответ на этот вопрос очень простой.  
В таких случаях я говорю буратинам и чайникам - Читайте документацию.
-----------------
Читаем? Угу.
----------------  
Вот выдержка из документов биржи по этому вопросу:
 
Помогите разобраться: почему не выставляется заявка на покупку?
 
Цитата
Аркадий написал:
Здесь в сообщении просто не скопировалась.
Причем, если переменной Z присвоить конкретное значение - то работает. А через функцию  - нет
возможно у вас неправильное число десятичных знаков в цене получается после вычитания
Страницы: Пред. 1 ... 27 28 29 30 31 32 33 34 35 36 37 ... 71 След.
Наверх