Может в вашем Quick данные сборные, скачаются от брокера по новой. Удалить только по этому инструменту.
Мне важно понять почему это произошло, потому что, если произошло один раз, то произойдет и два...
Предположу, что это сбой на сервере. ------------------------- В следующий раз просто отключитесь от сервера, удалите файл с именем этого инструмента и этим периодом из каталога archive и снова подключитесь. ------------------------ Если данные не восстановятся, то это ошибка сервера. Тогда стучите к брокеру и говорите ему об этой проблеме.
Максим написал: Откуда вы знаете, что не выдаст? Завтра они начнут для ручных транзакций выдавать last_seen_trans_id + 1 и привет. Ваша система тоже рухнет. Моя тоже какое-то время держалась, пока они ноль возвращали.
Будет завтра -будет завтрак. Можете и дальше гадать.
Я делаю так: ------------------------------ назначаем роботам номера например num_bot=134548 а текущее значение id=125657 -номер транзакции ----------- формирует для отправки серверу trans_id=id+(num_bot<<31) --------------- из принятого c сервера trans_id й транзакции с сервера вычисляем num_bot =trans_id>>31 id=trans_id&0xffffffff ----------------- По такой схеме, Вы можете иметь более миллиарда роботов, которые могут послать более миллиарда уникальных транзакций
У меня похожая схема, но сгенерированные номера транзакции могут быть от 111. В десятичной системе: transid + botid + botidlen. В итоге номера перекрываются. Но даже если я просто взведу старший бит как признак моей транзакции, нет никаких гарантий, что Квик не выдаст и такой большой trans id. Хотелось бы надёжного решения, а выходит только какая-то магия. В этом-то и проблема.
В моем варианте ничего не перекрывается Более того квик не выдаст такие trans_id, так как для номера робота 1 и id=1 , trans_id =2147483649 Диапазон номеров роботов и id от 1 до двух миллиардов
Я делаю так: ------------------------------ назначаем роботам номера например num_bot=134548 а текущее значение id=125657 -номер транзакции ----------- формирует для отправки серверу trans_id=id+(num_bot<<31) --------------- из принятого c сервера trans_id й транзакции с сервера вычисляем num_bot=trans_id>>31 id=trans_id&0xffffffff ----------------- По такой схеме, Вы можете иметь более миллиарда роботов, которые могут послать более миллиарда уникальных транзакций
TGB написал: nikolz Ожидаемо, что вам не захотелось продолжения нашего «банкета», но чтобы у вас, и мысли продолжения его не возникли далее (вы мне надоели), то я сам его и завершу. Мне, совершенно, не интересно с вами общаться. Что-то вам объяснить, это неразрешимая задача (на уровне, попытки объяснения обезьяне тензорного исчисления). Но, я в мягкой форме и неоднократно пытался вам объяснить, предельно простую мысль, что вам не надо много писать на форуме, пока вы не сможете читать :: . А если это и произойдет (вы сможете читать) то, похоже, очень не скоро :: . Вам вредно изображать из себя «гуру программирования». Вам это не идет. Вы что, не понимаете, что вы смешны со своими сотнями потоками? Вы несчастный человек. Вам не надо заниматься сложными вещами. Вам, наверное, надо как то осознать ваше реальное место в этой жизни. Вы не торгуете на фондовом рынке, хоть и заявляете о каких то «бешенных» процентах. У вас нет приличной работы. Ну кто, в здравом уме, примет вас на приличную работу? Вы безработный или полубезработный и работаете на данном форуме «прокладкой» между комментариями пользователей.
Ну и нахрена Вы словесным поносом растеклись по интернету? -------------------------------- Форум не церковь, а я вам не поп, чтобы слушать Вашу исповедь.
Constantin написал: И ещё вопрос: доступ к полям таблицы из разных потоков возможен?
Заранее спасибо за ответ.
В документации по QLUA указаны потокобезопасные функции для работы с таблицами: -----------------------
Одновременная работа с таблицами из функций обратного вызова скрипта и функции main() может приводить к неопределенным ситуациям.
Для решения этой проблемы qlua.dll предоставляет потокобезопасные аналоги стандартных функций Lua.
Выполнение потокобезопасной функции блокирует выполнение кода в другом потоке до окончания работы функции.
Формат вызова потокобезопасной функции совпадает с форматом вызова аналогичной стандартной функции Lua.
В таблице представлены стандартные функции Lua и соответствующие им потокобезопасные аналоги:
Стандартная функция Lua
Потокобезопасная функция
concat
sconcat
remove
sremove
insert
sinsert
sort
ssort
------------------- Все остальное не безопасно, так как VMLua не разработана для многопоточной работы. --------------------- Спасение утопающих -дело рук самих утопающих.
относительно работы с файлами в потоках. -------------------- Работа с файлами в Windows реализована на основе механизма memory-mapped files. --------------------------- Если один экземпляр приложения модифицирует какие-либо глобальные переменные, размещенные на странице данных, содержимое памяти изменяется для всех экземпляров этого приложения. Такое изменение могло бы привести к катастрофическим последствиям и поэтому недопустимо. Поэтому ОС предотвращает подобные ситуации, применяя механизм копирования при записи. Всякий раз, когда программа пытается записывать что-то в файл, спроецированный в память, система перехватывает эту попытку, выделяет новый блок памяти, копирует в него нужную программе страницу и после этого разрешает запись в новый блок памяти. Благодаря этому работа остальных экземпляров программы не нарушается
nikolz написал: Разработчики КВИКА к разработке VMLua имеют ровно такое же отношение как мы с вами - т е НИКАКОГО.
Я нигде не писал, что разработчики КВИКА разрабатывали VMLua. Но за все ошибки, которые возникают в КВИКе, независимо от того, что разработчик использовал при его создании, отвечают он. Вы какой-то сильно непонятливый. Но попробую объяснить вам это на простом примере. Возможно, вы ездите на своей машине. В ней наверняка используется электроника, которую производитель закупал на стороне. Например, эта электроника сломалась. Вы что, побежите со своими претензиями к производителю электроники?
Вы ломитесь в открытые ворота. ------------------------------- То, что VMLua потоко не безопасная известно с момента ее создания. ----------------------------- Это не ошибка, а ограничения реализации VMLua, которую изначально создавали для измерительных мобильных устройств . ------------------------------ Для реализации многопоточности в каждой ОС есть свои механизмы. ---------------------------------- На основе этих механизмов разработчики и реализуют синхронизацию своих приложений. ----------------------- В QLUA есть синхронизация в функциях. ------------------------- Вы пишите cвой скрипт - это Ваше приложение. Вы его разработчик Вот и решайте свои проблемы сами, а не перекладывайте их на других. ---------------------------- Я не использую sleep и синхронизирую все потоки Их у меня до 100 штук создается в тестах. Делаю Специально тесты, где потоки долго заняты до 10 секунд на каждой сделке. В итоге если в одном потоке то сделки последовательно будут обрабатываться через 10 секунд. У меня потоки запускаются через 5-15 мс от прихода сделки. -------------------------- Судя по Вашим постам Вы не умеете использовать механизмы синхронизации потоков. ------------------------------------------ Покажите пример как tonumber Вам создает проблему в скрипте или дайте ссылку на такой пример, если Вы его выкладывали с результатами. Отвечу Вам конкретно, как решить Вашу проблему.
TGB написал: const char *s = lua_tolstring (L, 1, &l); if (s != NULL && lua_stringtonumber (L, s) == l + 1)return 1; /* successful conversion to number *//* else not a number */
Разработчики КВИКА к разработке VMLua имеют ровно такое же отношение как мы с вами - т е НИКАКОГО. ------------------------------ поясните, зачем окружать указатель на стек, если он никогда не изменяется потоками В скриптах QUIK, указатель на глобальный стек у основного потока и потока main один и тот же, а локальные стеки у каждого потока свой и их вообще нет смысла синхронизировать. ---------------------------- Синхронизировать надо не код программы, а обращение к одним и тем же областям данных. =============== В данном случае - это область данных в глобальном стеке. Но ее как раз и синхронизировали разработчики КВИК в функциях библиотеки QLUA и сделали 3 функции потокобезопасные для обращения к таблицам. Все что они сделали работает. ----------------------- Все сверх этого пишите сами , если это надо Вам. Вы хотите чтобы они занялись разработкой VMLua? В чем проблема?
Ну давайте посмотрим tonumber {"tonumber", luaB_tonumber}, --------------------------------------- static int luaB_tonumber (lua_State *L) { if (lua_isnoneornil(L, 2)) { /* standard conversion? */ luaL_checkany(L, 1); if (lua_type(L, 1) == LUA_TNUMBER) { /* already a number? */ lua_settop(L, 1); /* yes; return it */ return 1; } в этой части ничего не преобразуется так как это и есть число ===================================- else { size_t l; const char *s = lua_tolstring(L, 1, &l); if (s != NULL && lua_stringtonumber(L, s) == l + 1) return 1; /* successful conversion to number */ /* else not a number */ } } в этой части преобразуется строка в число и используется функция lua_tolstring ранее уже показывал, повторю:
LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { StkId o = index2addr(L, idx); if (!ttisstring(o)) { if (!cvt2str(o)) { /* not convertible? */ if (len != NULL) *len = 0; return NULL; } lua_lock(L); /* 'luaO_tostring' may create a new string */ luaO_tostring(L, o); luaC_checkGC(L); o = index2addr(L, idx); /* previous call may reallocate the stack */ lua_unlock(L); } if (len != NULL) *len = vslen(o); return svalue(o); } ================================= else { size_t l; const char *s; lua_Integer n = 0; /* to avoid warnings */ lua_Integer base = luaL_checkinteger(L, 2); luaL_checktype(L, 1, LUA_TSTRING); /* no numbers as strings */ s = lua_tolstring(L, 1, &l); luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); if (b_str2int(s, (int)base, &n) == s + l) { lua_pushinteger(L, n); return 1; } /* else not a number */ } /* else not a number */ lua_pushnil(L); /* not a number */ return 1; } в этой части выясняется что строка не является числом при этом для строки тоже используется lua_tolstring ранее уже показывал ------------------------------------- if (lua_isnoneornil(L, 2)) { /* standard conversion? */ luaL_checkany(L, 1); if (lua_type(L, 1) == LUA_TNUMBER) { /* already a number? */ lua_settop(L, 1); /* yes; return it */ return 1; } ------------------------------ Резюме, в преобразовании tonumber блокировка делается при получении копии строки. Все правильно? Проблемы нет?
Си библиотека буферезует запис в файл, по умолчанию.
Нет желание заниматься ликбезом. -------------------- Могу сообщить , что делаю запись в лог из колбеков, из main, и еще из 90 (краш-тест терминала) потоков которые выбираются из пула потоков (максимум 512 потоков) и проблем нет
в таком случае, смотрим приведенную Вами функцию. В ней выполняются различные преобразования в зависимости от типа исходного значения. Но во всех случаях сначала преобразуемые данные извлекаются с помощью функции lua_pushfstring смотрим эту функцию: LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { const char *ret; va_list argp; lua_lock(L); va_start(argp, fmt); ret = luaO_pushvfstring(L, fmt, argp); va_end(argp); luaC_checkGC(L); lua_unlock(L); return ret; } ---------------- Ой, что не так?
Anton Belonogov написал: По обращению 1 мы производим анализ проблемы, к сожалению, он еще не завершен.
Описав в своем комментарии, в чем, по моему мнению, заключается ошибка использования существующей функции tostring в QLua, я не привел решения по ее ее устранения. Приведу в данном комментарии один из вариантов решения: 1) В начале функции tostring вставить lua_lock(L); 2) В конце всех завершений функции вставить lua_unlock(L).
Алексей13 написал: Здравствуйте, у брокера скрипт на ЛУА выполняется хорошо и в OnParam приходят котировки фьючей как и положено. Но если к основному терминалу сделать дополнительные (можно до 5 шт бесплатно, все на одном счете) - то в этих дополнительных терминалах котировки именно фьючей не приходят. Скрипт один и тот же. Я даже брал каталог с основным терминалом (QUIK) и просто менял логины и пароли (чтобы настройки точно такие же оставить) - результата нет - колтировки не приходят. не подскажете в чем дело?
А оно Вам надо? Пять терминалов к одному счету - это как пять телевизоров с одним кинофильмом в одной комнате. Просто палата номер 6
nikolz написал: Локальные стеки у луа машин майн и основного потока разные и следовательно синхронизация потоков при обращении к ним не требуется и нет блокировки.
Это было бы верно, если бы в Qlua не было общего ресурса потоков: сборки мусора (GC). При своем запуске, GC "ползает" по всем стекам и не является потокобезопасным. Поэтому для всех потоков QLua все фрагменты скрипта, за исключением, вызываемых С- функций, являются разделяемым ресурсом (потоки синхронизируются). Нет синхронизации потоков только при выполнении C-функций, вызванных в скрипте.
Вы почему-то опускаете тот момент, что синхронизация нужна лишь при изменении потоками общих данных . т е если данные лишь читаются, то синхронизация обращения к ним потков не требуется. Во всех приведенных Вами обсуждаемых фрагментах, Вы этот факт не учитываете.
qtyB,comission=CalcBuySell(clas,sec,client,acc,price,true,false); --расчитать доступное количество к покупке
qtyS,comission=CalcBuySell(clas,sec,client,acc,price,false,false); --расчитать доступное количество к продаже
local tp=getBuySellInfo (firm,client,clas,sec,price);
Qcur=tp.balance --STRING Текущая позиция по инструменту, в лотах
NQb=tp.can_buy --STRING Оценка количества лотов, доступных на покупку по указанной цене *
NQs=tp.can_sell-- STRING Оценка количества лотов, доступных на продажу по указанной цене *
Dp=tp.share --STRING Процентное отношение стоимости позиции по данному инструменту к стоимости всех активов клиента, рассчитанное по текущим ценам
QmaxBuy=tp.can_buy_own --STRING Максимально возможное количество инструментов в заявке на покупку этого инструмента на этом классе на собственные средства клиента, исходя из цены лучшего предложения
QmaxSel=tp.can_sell_own --STRING Максимально возможное количество инструментов в заявке на продажу этого инструмента на этом классе из собственных активов клиента, исходя из цены лучшего спроса
попробую пояснить. -------------------------- этот колбек реагирует не на заявку, а на транзакцию. Ему пофиг снял вы что-то или надели или одели. Ему важно лишь транзакция исполнена или нет. ----------------------- Попробуйте это понять. Т е не надо ловить в нем вашу или не вашу заявку. Это конечно можно делать и я ловлю, чтобы быстрее реагировать, но это сложно и в действительности не нужно. ------------------------------ Ловите свою заявку в колбеках заявок, а в этом колбеке надо ловить успешно или нет прошла вша транзакция.
Так в OnTransReply() я и ловлю успешность выполнения заявки отправленной с помощью sendTransaction(). sendTransaction() исполняется, а ответа в OnTransReply() нет.
поставьте вывод в лог или на экран самым первым оператором в функции OnTransReply
Вы изменения настроек на серверах брокерам сообщили? А то похоже Сбербанк не знает. Я у них 3 раза обновлял 8.7 на 9.7 и потом возвращал все в зад из-за тормозов.
всегда продается и покупается по лучшей встречной цене на рынке. если лучшая цена покупки 600 руб а вы поставите продать по 20,то продадите по 600 ----------------------------------- но если рынок неликвидный и цена покупки 600 на 1 лот и далее цена 100 1 лот и цена 20 1 лот и вы продаете по 20 три лота, то догадайтесь сами по какой цене вы их продадите.
попробую пояснить. -------------------------- этот колбек реагирует не на заявку, а на транзакцию. Ему пофиг снял вы что-то или надели или одели. Ему важно лишь транзакция исполнена или нет. ----------------------- Попробуйте это понять. Т е не надо ловить в нем вашу или не вашу заявку. Это конечно можно делать и я ловлю, чтобы быстрее реагировать, но это сложно и в действительности не нужно. ------------------------------ Ловите свою заявку в колбеках заявок, а в этом колбеке надо ловить успешно или нет прошла вша транзакция.
Постараемся пояснить по поводу отсутствия описания упомянутых Вами ошибок в нашей документации: Вариант добавления диагностики "Превышена позиция по инструменту" в Руководство пользователя QUIK целесообразным не считаем, по скольку она возникает при различных настройках на стороне серверного ПО, данная ошибка может меняться в формулировке от версии к версии, но причина ее появления будет одна и та же - настройки на стороне сервера, с которыми необходимо разобраться, разбор каждого конкретного случая происходит индивидуально силами специалистов брокеров, которые при необходимости также консультируются у нас. Повторимся - данная диагностика является специфичной, и каким-либо содержательным образом описать её для конечного пользователя, к сожалению, возможным не представляется. При возникновении подобной ошибки - рекомендуется обращаться к Вашему действующему брокеру. В данном случае, если необходим разбор появления ошибки на сервере QUIK Junior - просьба сообщить ранее запрошенные детали. Касательно ошибки "Превышен лимит отправки транзакций для данного логина" - это ошибка возвращается из торговой системы (на это должен указывать номер ошибки), и характерна, как правило, для срочного рынка. Терминал может ретранслировать ошибки, посылаемые из ТС, но мы их не документируем, потому что это также подразумевает необходимость поддерживать список биржевых ошибок и их описание в актуальном состоянии, а это уже не является нашей прямой задачей, как разработчика. Описание ошибок может и должна предоставлять биржа. При этом биржевые ошибки достаточно легко идентифицировать - по наличию номера ошибки в круглых или квадратных скобках. В случае срочного рынка ещё есть подстрока "[GW]", и Вы, скорее всего видели такую диагностику: "[GW] Превышен лимит отправки транзакций для данного логина". Т.о., за информацией о смысловом содержании той или иной биржевой ошибки следует обращаться либо напрямую на биржу, либо уточнять её причины через Вашего действующего брокера.
та вот это и напишите кратко в инструкции. ---------------------------- Если ваша прога что-то прокукарекала, то Вы должны сказать что-то про это, а не заставлять пользующих гадать на кофейной гуще и отвлекать Вас от важных дел.
Добрый день, ---------------------- Написал скрипт краш-теста. В целом результатами доволен. Рассказываю подробности. ----------------------------, Условия теста: демо-сервер версия терминала 9.7 ( тормозная) -------------------- Робот на каждую принятую сделку по колбеку OnParam рассчитывает цену на 20 шагов ниже цены последней сделки определяет максимальное число контрактов для текущего инструмента функцией CalcBuySell и выставляет заявку на покупку одного контракта по расчетной цене. При очередном вызове колбека , робот снимает все выставленные ранее заявки , проверяет отсутствие неисполненной транзакции и открытой заявки по текущему инструменту и при положительном решении, выставляет новую заявку. -------------------- Результаты теста(фрагмент):
Время работы теста составило примерно 12000 секунд( примерно 1.5 часа) За это время колбеки вызывались 2 млн 670 тысяч раз, выставлено и снято заявок 278 тысяч инструментов 908 (акции валюта фьючерсы) среднее время на одну заявку составляет примерно 2.5 ms, максимальное 8 ms, минимальное 0.25 ms. из 2.5 ms одного цикла выставления заявки, 2.2 ms уходит на функцию CalcBuySell. уж не знаю, что туда напичкали, если на все остальное у робота уходит в 10 раз меньше,чем на эту функцию. На обработку колбеков заявок и транзакций уходит 0.05 до 0.1 ms. ------------------------------------------- Размер скрипта 600 строк LUA+ DLL для обработки событий и расчета времени с квантом 0.1 мкс.
AndyWise написал: Вопрос по ТТТ, как говорили выше, она формируется срезами и пакетами. Допустим пакет с ценой LAST отправляется каждые 100 мс. А в нем 10 срезов, каждый 10мс.Так вот, эти 10 мс формируются по простому, просто как есть на «сейчас». Либо второй вариант, в эти 10 мс (за 10мс) можно запихнуть Hi, Low, Now. По сути, по мотиву свечей, пропуск данных нивелирует Мин/Макс за период обновления.
Срез - это значения параметров на момент среза Last - это цена последней сделки на момент среза. Если в пакете несколько срезов то и цен несколько. Актуальная всегда последняя. Hi, Low - это понятия относятся к интервалу наблюдения Например торговый день или свеча с интервалом 1 минута. TTT к этому не имеет никакого отношения.
можно sleep не использовать если комп многоядерный, но тогда одно ядро будет занято и при отсутствии сделок. Например, В тесте у меня Загрузка без слипа примерно 30% со sleep(1) 3-10% ------------------ если делать совсем правильно, то надо использовать события ядра OC или атомарные операции совместно с Shared memory ------------------ Я использую внутри скрипта события ядра, а между скриптами и приложениями Shared memory . Загрузка процессора не более 3%.
Михаил написал: Добрый вечер! У меня в скрипте Lua не срабатывает OnTransReply. В начале при выставлении заявки он отрабатывает, а при удалении этой заявки нет. Посоветуйте, пж, что делать?
Обращаем Ваше внимание на то, что с версии 8.7, до последних версий 9-x версий, а также до текущей актуальной версии 10.1 в терминале и сервере QUIK было реализовано большое количество различных доработок, добавлено и поддержано новых функциональностей, в т.ч. связанных с новыми возможностями сервера QUIK.
К сожалению, это в том числе не исключает и того, что при определённых условиях, а именно при использовании существенно устаревших настроек сервера, эти доработки могут приводить к понижению производительности в работе более новых версий терминала. В то же время, существенно устаревшие настройки сервера могут быть более оптимальными для старых версий терминалов, которые именно для таких настроек были более оптимизированы, что закономерно.
Тем не менее, из этого не следует, что новые версии терминала являются абсолютно непригодными для работы, как это предполагается. Со своей стороны мы признаём, что причина такого поведения лежит на стороне сервера и состоит в существенно устаревших настройках ведения позиций. Мы запланировали изменение этих настроек на более актуальные, сегодня они вступят в силу и на более новых и актуальных версиях терминала проблем с производительностью и отзывчивостью интерфейса возникать не должно.
Мы приносим извинения за причинённые неудобства, а также просим Вас, если Вас не затруднит, понаблюдать за работой более новых терминалов в условиях создаваемой Вами нагрузки при новых настройках на сервере и если проблема будет по-прежнему актуальной - сообщить нам об этом для дальнейшего более детального разбора.
Заранее большое спасибо.
Благодарю за информацию. Но данная проблема выявлена с вашем демо сервером. Полагаю, что он у Вас не устаревший. ------------------------ Да , работает, но тормоза не только раздражают, но и существенно замедляют реакцию терминала на рыночные события. ============== "А в остальном, прекрасная маркиза Всё хорошо, всё хорошо."
Anzhelika Belokur написал: nikolz, наиболее частые ошибки у нас описаны в документе, который находится у нас на сайте https://arqatech.com/upload/iblock/473/%D0%A2%D0%B8%D0%BF%D0%BE%D0%B2%D1%8B%D 0%B5%20%D0%BE%D1%88%D0%... по сообщениям, которые приходят от биржи, мы рекомендуем обращаться к специалистам биржи. В случае с ограничением по логину, мы не отправляем Вас на биржу, а просим уточнить инструмент, на котором проявляется данное сообщение, а так же скриншот этого сообщения. Мы сами будем уточнять у биржи по Вашей ошибке, если ошибка возникает на инструментах всех рынков, так и напишите, если на Срочном, уточните это. Если мы запрашиваем информацию значит она нам нужна, а Вы почему-то упорно не хотите ее предоставлять, но хотите помощи.
прикольно, но дело в том, что я написал тест, который выставляет и снимает заявки на сделки которые генерит Ваш демо сервер. у какой биржи Вы будете уточнять?
Добрый день, Посвятил целую неделю, чтобы выполнить работу разработчиков и найти критическую ошибку версий 9 10, по которой терминал может минутами не отвечать. -------------------------- Если У Вас нет желание это наблюдать, то рекомендую не ставить эти версии, а также другие выше 8 , пока разработчики официально не укажут на исправление этой ошибки. -------------------------- В настоящее время последней нормальной версией является 8.7.1.3, которую и рекомендую.
Эти ошибки не должны быть описаны в Руководстве пользователя QUIK, т.к пользователь сам не сможет на конкретно эту проблему повлиять. Эту ошибку, вероятно, присылает биржа, чтобы точно сказать нам нужен скриншот ошибки. Чтобы Вас не отправлять с ней на биржу (Вы не знаете логина, который она попросит) мы просим Вас ответить на вопрос: на заявку по какому инструменту (и мы поймем рынок) выходит данное сообщение?
Вы не правы , так как ваша программа выдает данное сообщение . Поэтому вне зависимости от того кто его прислал в правильной документации упоминается это сообщение и дается объяснение (ваше не ваше и зачем Вы им засоряете терминал ) ------------------------- Вы не ответили относительно второго сообщения, по которому нет надобности знать инструмент. если это сообщение биржи, то дайте ссылку на документ биржи, иначе Вы просто отмахиваетесь от того, что сами не знаете.
мое мнение, если устраивают интервалы сервера биржи, то не надо вычислять свечи. ------------------- в качестве бесплатного совета. Если торгуете каким то заранее заданным инструментом (например сбербанком или газпромом и т д) и открываете для них графики то проще всего делать робота как индикатор, а не как скрипт. Будет и быстро и просто .
Операция доступна, если в таблице на вкладке «Позиции» есть хотя бы одна ненулевая позиция. Размер позиции должен быть больше либо равен размеру одного лота по выбранному инструменту. Так же нужно наличие встречного спроса или предложения по тем инструментам, по которым нужно закрыть позиции. Чтобы понять, что условия выполняются просьба прислать скриншот таблицы «Состояние счета» по вкладке «Позиции» , чтобы видно было неактивность кнопки "Закрыть все" и значения по параметру "Позиция". А так же стакан котировок в момент закрытия по какому-либо инструменту, который в списке на закрытие.
это все понятно. Поясняю о чем я говорю. В тесте создаем заявки по акциям и фьючерсам заявки исполняются и в соответствующих таблицах отображаются позиции по инструментам. ------------------------- После этого начинаем закрывать позиции принудительно через меню по правой кнопки мышки на поле таблицы. 1) закрывает одну конкретную позицию 2) закрываем все ------------------ для акций все работает без проблем а для фьючерсов работает лишь 1). ------------------- Если 2) для фьючерсов не должно работать то сделайте этот пункт неактивным Если должно работать , то исправьте ошибку в проге терминала.
Проблема тормозов в терминале QUIK версии 9 и 10 остались и после учета Ваших ограничений на параметры портфеля. ------------------- Поэтому , прошу поправить если я не прав, но можно сделать вывод, что версии 9 и 10 имеют существенную ошибку, что приводит к зависаниям терминала. ------------------------- Такой проблемы нет в версии 8 ================= Таким образом, справедливо было бы признать ошибку и снять с распространения 9 и 10 версии либо срочно внести в них исправление тормозов.
nikolz написал: аналогично и другие таблицы которые настроены в терминале по умолчанию. Номеров строк нет. как добавить не уничтожая таблицы.
Они скрыты для экономии места во вкладках, можно навести на левый край первого видимого столбца до появления "стрелочки", потянуть вправо и раздвинуть столбец с нумерацией.(См. Рис.1)
Не всегда по ошибке можно однозначно определить причину почему она возникает. 1. Вероятно, что не хватает денег или бумаг. 2. Уточните, по какому рынку возникает такая диагностика? Нужно будет сделать запрос на биржу по данному ограничению.
Проблема в том, что этих сообщений нет в документации. И не важно по какому рынку. Они должны быть. Поэтому поясните для каких рынков они возникают и что означают.
Quikos_1, Хочу пояснить, сжатие данных их тиков в свечи мы делаем не для того чтобы меньше передавать с сервера данных, а для того, чтобы делать прогноз движения рынка. ----------------------- Поэтому , если мощности компа хватает можете считать свечи сами из тиков, а если нет желания считать можно получать их с сервера биржи. ----------------- прикол лишь в том, что сервер на бирже раньше вас рассчитает свечи и пришлет их Вам.
nikolz написал: я тоже делал расчет свечей по таблицам обезличенных сделок. Для этой цели и чтобы тестировать запаздывание данных относительно времени сделок на бирже я синхронизирую компьютер с сервером точного времени , что обеспечивает погрешность относительно биржи в пределах 10 мs
Не понимаю зачем синхронизировать ? Если Вам приходит тик с конкретной датой и временем вплоть до секунды - просто складируейте его в минутную, трехминутную, 5-и мутную и так далее Свечу и все. Или я что то не правильно понимаю.
.Для погрешности в секунды синхронизация не требуется так как комп эту синхронизацию обеспечивает. ----------------- Зачем Вы считать то, что уже посчитано. Более того свеча 1 минуту имеет всего 5 отсчетов, при этом для ликвидного инструмента Вам надо обработать примерно 1000 тиков. Т е сжатие будет в 200 раз.