Tue Aug 29 11 : 21 : 47 2023 , getDepo Ex currentbal = 0.0
Tue Aug 29 11 : 21 : 47 2023 ,выставляем заявку
Tue Aug 29 11 : 21 : 48 2023 , getDepo Ex currentbal = 10.0
Tue Aug 29 11 : 21 : 48 2023 ,OnDepolimit currentbal = 10.0
1 строка - до выставления заявки 2 строка выставили заявку по рынку и купили 3 строка getDepoEx ответ в колбеке 4 строка - колбек OnDepoLimit -------------------- Резюме: Задержка менее 1 секунды. .
И вот результат: 1 29.08.2023 13:16:35 OnInit - инициализация функции main 15702.911 2 29.08.2023 13:19:40 (162) Заявка на покупку N 38404828165 зарегистрирована (1 удовлетворено). 3 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.112 ... 8 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.145 9 29.08.2023 13:19:40 OnOrder - новая заявка или изменение параметров существующей заявки 15888.149 10 29.08.2023 13:19:40 OnOrder - новая заявка или изменение параметров существующей заявки 15888.151 11 29.08.2023 13:19:40 OnTrade - новая сделка 15888.152 12 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.155 ... 17 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.185 18 29.08.2023 13:19:45 OnDepoLimit - изменение бумажного лимита 15893.151 ... 23 29.08.2023 13:19:45 OnDepoLimit - изменение бумажного лимита 15893.168 24 29.08.2023 13:20:08 (163) Заявка на продажу N 38404864243 зарегистрирована (1 удовлетворено). 25 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15915.868 ... 36 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15915.934 37 29.08.2023 13:20:08 OnOrder - новая заявка или изменение параметров существующей заявки 15915.958 38 29.08.2023 13:20:08 OnOrder - новая заявка или изменение параметров существующей заявки 15915.961 39 29.08.2023 13:20:08 OnTrade - новая сделка 15915.962 40 29.08.2023 13:20:08 OnMoneyLimit - изменение денежного лимита 15915.964 ... 45 29.08.2023 13:20:08 OnMoneyLimit - изменение денежного лимита 15915.994 46 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15915.995 ... 57 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15916.039
Строки 17 и 18 - это покупка бумаги. Как раз та самая 5-секундная пауза, которую я и наблюдаю. Обратите внимание, строки 45, 46 - это продажа бумаги. Паузы уже нет. Это реальный счет, не демо. Пример для покупки SBER.
Серегей, Я вам выложил скрипт и результат. У меня никаких запаздываний нет. ------------------------ Как я понял теперь у Вас другая проблема. Раньше вы писали о задержке между таблицей и функцией getDepoEx ------------ Теперь Вы лукавите, это у вас другая задержка ------------------------------- Если хотите, то выложите свой скрипт я его проверю.
Посмотрите Выше мое сообщение от 29.12.2022 20:34:14 относительно Вашего теста. Он работает без проблем. Если что-то не так, то выложите скрипт для теста проверю еще раз.
nikolz написал: Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности.Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Сто процентов не у меня! Какая нахрен ошибка? Один и тот же скрипт с утра и с вечера по разному заработал! В скрипте ничего не меняется. Один и тот же код, один и тот же цикл - то выводит, то не выводит. Я скажу так. В курсе вообще как и когда обновление окна происходит надеюсь. WM_PAINT это его дело! Так вот при при щелчке мышки в окне, WM_SIZE срабатывает, его разрабы написали, что он обрабатывает его, при этом все данные от SetCell попадают туда, куда надо - в буфер, а далее InvalidateRect или UpdateWindow, что вызывает WM_PAINT, где и перерисовывается таблица. Тож самое при щелчке мышкой WM_LBUTTONDOWN только срабатывает. Так вот а когда и как срабатывает WM_PAINT для окна, когда мы не щёлкаем, не меняем размер окна, когда окно просто на экране и ничего с ним не делаем? Вот это пусть разрабы и ответят. Об этом я их уже сколько прошу? Нет ответа никакого. Думаю вот если проблема не закроется - писать прогу, чтобы слала в окно сообщение WM_SIZE из вне с определённой переодичностью. Т.е. насильно извне заставить обработать WM_PAINT/ Может так и заработает, но при условии, что все данные от SetCell уже есть в нужном буфере. А если они не в буфере из которого идёт обновление таблицы, а "болтаются" неизвестно где, мало ли как у них там это реализовано?, промежуточные буфера, очереди и прочее, тогда ничего и так не получится!
если хотите выложите скрипт я могу его запустить на демо сервере и сказать Вам конкретно.
paths = "D:/nkarray/"
package.cpath =paths.."?.dll";
require"nkarray"
require"nkthread"
path = "D:/QUIK_SCRIPT/nk_bot/"
event=nkevent.Create("event");
local acc="NL0011100043"
local firmid="NC0011100000"
local firmid_f="SPBFUT000000"
local Client_code="10590"
local acc_f="SPBFUT000ie"
local sec_code="SBER"
local class_code="QJSIM"
Order_buy = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"] = tostring(acc),
["CLIENT_CODE"] = Client_code,
["TYPE"] = "M",
["TRANS_ID"] = 0,
["CLASSCODE"] = class_code,
["SECCODE"] = sec_code,
["OPERATION"] = "B",
["PRICE"] = "0",
["QUANTITY"] = "1",
["EXPIRY_DATE"]="TODAY",
}
function main()
local f=0;
local trans_id=1;
while true do
nkevent.wait(event); --ждем события
local z=getDepoEx(firmid, Client_code,sec_code,acc,0); --или 2
if z then z=z.currentbal;
Log:write(os.date()..",getDepoEx currentbal="..tostring(z).."\n"); Log:flush();
end
if f==0 then
Log:write(os.date()..",выставляем заявку\n"); Log:flush();
Order_buy.TRANS_ID=tostring(trans_id);
local res = sendTransaction(Order_buy);
if res ~="" then message("Ошибка транзакции:"..res) else trans_id=trans_id+1; end
f=1;
local z=getDepoEx(firmid, Client_code,sec_code,acc,0).currentbal;
Log:write(os.date()..",getDepoEx currentbal="..tostring(z).."\n"); Log:flush();
-- f=0;
end
end
end
function OnDepoLimit(t)
sec=t.sec_code -- STRING Код инструмента
acc=t.trdaccid --STRING Счет депо
firm=t.firmid --STRING Идентификатор фирмы
client=t.client_code-- STRING Код клиента
cur=t.currentbal -- NUMBER Текущий остаток
Log:write(os.date()..",OnDepolimit currentbal="..tostring(cur).."\n"); Log:flush();
nkevent.Set(event);
end
function OnInit(pfile)
path = getScriptPath();
Log=io.open(path.."/forum_test.log","w") --лог файл
fconnect=isConnected();
end
function OnParam(c,s)
nkevent.Set(event);
end
nikolz написал: Выше я выкладывал скрипт, который тестировал. И все там обновляется.
С утра запущены 4 скрипта абсолютно одинаковые. Выставлены разные переменные просто. Все 4 скрипта сейчас идеально всё выводят в ячейку и показывают last синхронно с ТТТ. При этом код сейчас крутится в вышеприведённом цикле(так как last в определённом диапазоне). При выходе из этого диапазона идёт выход из цикла и из функции и попадаем в main() в цикл while(так как уже в другом диапазоне last). Там во while тоже идёт вывод в ячейку last, но только уже в другую и нихрена уже ничего не выводит! Щёлкнишь мышкой по строке - данные обновятся. Или размер окна дёрнешь - обновятся. Опять попадает last в нужный диапазон, опять вызов функции и в repeat цикл и опять всё обновляется. Вчера было всё НАОБОРОТ!!! while обновлял ячейку, repeat нет.
Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности. Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Tue Aug 29 11:21:47 2023,getDepoEx currentbal=0.0
Tue Aug 29 11:21:47 2023,выставляем заявку
Tue Aug 29 11:21:48 2023,getDepoEx currentbal=10.0
Tue Aug 29 11:21:48 2023,OnDepolimit currentbal=10.0
1 строка - до выставления заявки 2 строка выставили заявку по рынку и купили 3 строка getDepoEx ответ в колбеке 4 строка - колбек OnDepoLimit -------------------- Резюме: Задержка менее 1 секунды. .
_res = sendTransaction(Transaction_buy) if _res ~= "" then message("Ошибка транзакции покупки:".._res) end end
попробуйте для начала заменить это:
Код
while getDepoEx(Firm_ID, Client_code, _ticker_buy, Account, 2) == nil
do
sleep(100)
end
while tonumber(getDepoEx(Firm_ID, Client_code, _ticker_buy, Account, 2).currentbal) < 1
do
sleep(100)
end
на это:
Код
local z; while (z==nil) or (z.currentbal<1) do z=getDepoEx(Firm_ID, Client_code, _ticker_buy, Account, 2) end
Выше я выкладывал скрипт, который тестировал. И все там обновляется. ------------------------- В вашем случае, так как полного скрипта нет, могу лишь предположить. -------------------- Проблема в Вашем скрипте . Возможно у Вас внутренний цикл блокирует обновление таблицы. ----- Попробуйте убрать его. У Вас уже есть один внешний цикл и часто внутренние циклы оказываются лишними. --------- В программах реального времени (QUIK и скрипты - это и есть программы РВ) применение циклов считается плохим решением. Как правило они лишь тормозят обработку и всегда можно сделать алгоритм без этих циклов.
есть еще такой способ. использовать колбек onParam. В него приходят все изменения TTT Можно поставить фильтр на нужный инструмент и обнаруживать начало торгов по появлению заявок и сделок.
nikolz написал: Что-то у Вас не так, возможно в Вашем скрипте Функция getDepoEx лишь берет данные из архива терминала , откуда Вы и видите в таблице их.
Я бы согласился с тем, что проблемы в моем скрипте, если бы не было разницы между первой и последующими сделками. Ведь скрипт не видит разницу между ними, для него все сделки одинаковы.
Вы тоже не видите ошибку, пока ее не найдете. Если хотите помощь, выложите пример с результатом.
вместо 4 констант надо одну. Но лучше не соединять дату и время так как при 32 бит будет неточно. Кроме того, дата не меняется в течении торгового дня.
nikolz написал: Как Вы определяете, "quik на моей стороне говорит, что бумага зачислена, с опозданием в 5 сек"В настройках есть параметр установки времени пересчета клиентского портфеля. Уменьшите это время. или поставьте флаг пересчитывать при изменении позиции, если смотрите в портфеле.
Определяю по разнице времени между появлением сделки в Таблице сделок и getDepoEx(<Firm_ID>, <Client_code>, <ticker>, <Account>, 2).currentbal) > 0. Эта разница больше 5 сек. В настройках Квика стоят обе галочки - пересчитывать при изменении позиции и пересчитывать раз в 10 сек.
Что-то у Вас не так, возможно в Вашем скрипте Функция getDepoEx лишь берет данные из архива терминала , откуда Вы и видите в таблице их.
Alexander написал: В очередной раз поднимаю тему. Прошу ответить разработчиков почему до сих пор ничего не сделано для решения данной проблемы. Ещё раз. Есть таблица. Производим обновление ячейки или ячеек в цикле. Данные берутся с ТТТ(в данном случае цена последней сделки) и выводятся в таблицу. В ТТТ данные меняются как положено. Никакого обновления ячейки в таблице на экране монитора НЕ ПРОИСХОДИТ!!! Бывает, когда добавишь или убавишь код в скрипт обновляться начинает. Или поставишь задержку в цикле, подобранную начиная с 10 миллисекунд и до тех пор пока не начнёт обновляться синхронно с ТТТ. Потом запускаешь скрипт повторно и уже опять ничего не обновляется. Меняешь задержки, бывает и до секунды ставишь и ничего не обновляется. А бывает вообще никаких задержек не ставишь и всё обновляется. Скрипт может быть любой, не важно какой. Везде так. Цикл. Вывод и всё. Для того, чтобы точно обновилась таблица надо либо изменить размер таблицы вручную, либо ткнуть на строку в таблице, но только на любую новую строку, а не на ту, что уже текущая. Вот и что делать предлагаете? Без конца сидеть и менять размер окна таблицы? Или без конца тыкать по строкам? Ну это же бред какой-то!!! Все таблицы квика нормально обновляются. Что там не так у вас работает? Или напишите хоть принцип как и когда при каких условиях у вас происходит обновление таблиц пользователя. Ну в конце-то концов проблему надо же как-то решать. Задолбало уже просто. Пишешь, пишешь и ничего не обновляется. То обновляется то нет. Проблема на стороне квика и её решить можно 100%.
Если желаете решение то выкладывайте пример. ----------- Относительно задержи, полагаю вы на правильном пути рассуждения. Что такое Sleep? Это отказ от исполнения скрипта на указанное время. Если Вы отключили исполнение, то каким образом у Вас будет обновление?
Сергей С. написал: А может кто-то пробовал, что быстрее будет работать для получения информации о зачислении бумаг в портфель: getDepoEx().currentbal, или цикл по getNumberOf("depo_limits") с перебором getItem("depo_limits", i).currentbal ?
Работать будет одинаково, так как обращение к архиву. Быстрее будет работать колбек. Но разница будет не в секундах, а в ms. ------------- Цикл при этом лишний, так как эти таблицы не увеличиваются в размере. --------------- Если у Вас изменение портфеля всегда так долго, то что-то не так в настройках или в канале связи. Ищите, где не так.
Нет, зачисление не всегда так долго. А только самая первая сделка по бумаге. Потом все изменения портфеля по этой бумаге проходят быстро - 100-200 мс. Заявки рыночные. На сервере брокера все происходит быстро, т.к. в Таблице заявок и в Таблице сделок время одинаковое. Но по факту, quik на моей стороне говорит, что бумага зачислена, с опозданием в 5 сек. Только для первого раза. По всей видимости, задержка связана с проверкой getDepoEx(<Firm_ID>, <Client_code>, <ticker>, <Account>, 2) ~= nil. Пять (!!!) секунд создается структура в клиентском quik. Вот можно ли это это как-то ускорить?
Как Вы определяете, "quik на моей стороне говорит, что бумага зачислена, с опозданием в 5 сек" В настройках есть параметр установки времени пересчета клиентского портфеля. Уменьшите это время. или поставьте флаг пересчитывать при изменении позиции, если смотрите в портфеле.
Сергей написал: Эти показатели можно сформировать из таблицы обезличенных сделок. Там возле каждой сделки указано время сделки, количество акций в сделке и была эта сделка по цене купли или продажи. Поэтому данные показатели можно сформировать как для любого периода времени на графиках, так и суммарное количество за день.
Безусловно можно. Но Квик создан для подачи заявок брокеру и поэтому бесплатный. То, что Вы хотите делать разработчики * клиентов брокеров не будут. Они получают свою зарплату за разработки для брокеров и других проф участников рынка, которые покупают их софт. Бесплатно лишь сами знаете где и что.
VPM написал: Прислушался к советам, поднял старые наработки, сам поднапрягся, ( ну не все могут быть хирургами или хорошими адвокатами, а я не программист пишу потихоньку для себя).
Спрятать удалось пока только поиск начальной точки для входа в режим теста. Оказалось не все так прозаично, Изменили время начало торгов на секции срочного рынка, в виде добавления еще одной сессии "Аукцион открытия". Полезно делать ревизию старым скриптам! Соответственно изменилась индексация на графике в квике. Несколько удивил подход разработчиков?
Вот так теперь выглядит начало торгов на разных тайм фреймах:
Заглянул на сайт ММВБ, а у них вообще значится "Аукцион открытия" 08:50.
Про свою реализацию, сделал через замыкание. запихнув все интервалы готовые. и что б потом можно добавить свои. На вход подаем дату и время желаемого начала теста, на выходе массив необходимых индексов все банально.
На самом деле единое время есть Это 90000. Для свечей - это время закрытия свечи. Все свечи считаются от 00000. Чтобы определить время открытия свечи начала, надо найти время начала последней свечи в которую попадает 90000 ------------------- т е получите именно то что написали: 1 минута; 20230824; 085900; 83.09; 83.1; 83.09 - 90000-100 5 минут; 20230824; 085500; 83.09; 83.1; 83.09 - 90000-500
для 120 минут свеча в которую попадает 90000 начинается в 80000 и кончается в 100000. 120 минут; 20230824; 080000; 83.09; 83.17; 82.7
Для тайма день свеча одна и 90000 всегда внутри . 00000 1440 минут; 20230824; 000000; 83.09; 83.63; 82.16
funduk написал: nikolz, я думал, у Вас всё на роботах, и индикаторы оказываются не нужны. Зачем Вы их используете, если не секрет, да ещё 20 линий в одном индикаторе?
funduk написал: nikolz, я думал, у Вас всё на роботах, и индикаторы оказываются не нужны. Зачем Вы их используете, если не секрет, да ещё 20 линий в одном индикаторе? Я, например, облако скользящих строю. А на графике (вместо чисто внутри робота) для наглядности, т.к. ещё только приступаю к автоматизации ТС.
Для торговле одним инструментом я делаю робота всегда в индикаторе. Писал об этом на форуме.
У меня в одном брокере имеется несколько брокерских счетов: ИИС и обычный брокерский счет. Для каждого счета необходимо настраивать и запускать отдельный терминал. Я скачал инсталлятор терминала QUIK от брокера и установил для одного счета.
Хочу установить второй терминал QUIK для запуска на том же компьютере и в сеансе того же пользователя, то есть параллельно 2 терминала. Уже не помню как я ставил 2 терминала, но иногда наблюдаются разрывы связи и непонятно по какой причине. Возможно, я что-то неправильно сделал и брокер разрывает соединение на сервере.
Вопросы: 1) Как правильно запускать несколько терминалов QUIK на одном компьютере для доступа к разным счетам одного брокера, чтобы терминалы не конфликтовали между собой? То есть, провести установку 1 раз (например, в директорию c:\QUIK), а потом просто скопировать директорию c:\QUIK в c:\QUIK2 ? Или нужно провести 2 установки из дистрибутива в 2 разные директории?
2) При подключении терминала предлагается выбрать сервер. Нужно ли выбирать разные сервера при подключении из 2 разных терминалов? Например, в первом терминале выбираем Сервер1 , а во втором терминале выбираем Сервер2 .
Спасибо!
Главное, чтобы у Вас были два логина ну и два пароля.
nikolz написал: 1) колбек onРaram().2) таймер и синхронизацию ПК от сервера времени.
если не трудно, приведите пожалуйста код пример, спасибо
Код
function main()
local time;
while is_run do
if time>58 then
message("Секунды превысили значение 58!")
end
sleep(100)
time=string.sub(getInfoParam("SERVERTIME"),-2);
end
end
function OnStop()
is_run = false
end
СергейК написал: Добрый день. Обычно позиции по проданным бумагам не показываются, но на самом деле у меня есть квики, к-е их таки показывают. Т.е. если у меня было 100 облигаций ТГК-14 и я их сегодня продал, то в Т1 например у Открытия ТГК-14 не будет вообще, а у Альфы или ВТБ будет строка с количеством 0. Соответственно завтра будет то же самое в Т0. Как я понял, вариант, когда такая позиция показывается, немного удобнее. Вопрос: это решается на стороне брокера?
Sergey написал: Здравствуйте, вопрос в следующем, если торговать руками, то я могу закрыть позицию в любой удобный для меня момент, т.е. даже тогда когда тиков нет. а вот lua почему то так не может, бывает мне нужно закрыться на close свечи, и тупо с 57 до 01 секунды вообще нет тиков, соответственно закрытие происходит на другой свече, подскажите как закрываться тогда когда мне нужно и не быть зависимым от тиков?
1) колбек onРaram(). 2) таймер и синхронизацию ПК от сервера времени.
Сергей написал: Добрый день. Движение котировок в широких пределах не зависит как от количества продавцов и покупателей, так и от количества и объема сделок. Значительно более сильная корреляция движения котировок связана с соотношением количества проданных (сделка по цене покупки) и купленных (сделка по цене продажи) акций. Я и предлагаю отобразить эту информацию. Наличие покупателей совсем не значит, что они будут участвовать в сделках по текущим ценам и цена акций будет расти. Важна только та их часть, которая участвует в сделках.
Все это - азбука торгов. Общеизвестно, что цены двигают рыночные заявки. Но рыночные заявки не попадают в стакан и их не видят клиенты брокеров.
Игорь М написал: Причем здесь какой-то мой алгоритм? Подняли тему и я написал,что TRADINGSTATUS криво работал раньше, написал что проверю снова. Вот проверил, ничего не поменялось. Написал сюда, чтобы люди, которые будут потом читать, не тестировали заново. Резюмируя: TRADINGSTATUS - бесполезная мура, 10-15 секунд это перебор для любых систем. За эксклюзивную информацию о том, что "система торговли Квик - это не тот инструмент, что стоит использовать" для "мгновенной реакции", низкий поклон, конечно. ::
Вы же говорите, что задержка в 15 секунд для Вас критическая. Я пока не видел с этим проблем, для любых торговых систем. Совершенно разные мнения.
Я такого не писал. Она для меня не критическая, я TRADINGSTATUS не использую. Я имел в виду, что если такая простая опция, как определение статуса сессии, имеет задержку в 10-15 секунд, то этим не следует пользоваться в любых системах. Она просто тупо неправильно работает. Не может быть в современных реалиях такой задержки. Возможно, когда-то она работала правильно, но потом что-то поменялось, а её не исправили. Она стабильно выдает нереальную задержку - это баг.
Поделюсь своим опытом. Правда я не торгую неликвидом. Все плановые начала и концы торгов я определяю так. ------------------ Компьютер у меня синхронизируется по серверу точного времени. Я об этом уже рассказывал на форуме. Поэтому я знаю время работы биржи очень точно, а не по серверу брокера, которое может гулять как угодно. Ошибка синхронизации не более 0.02 сек. Начало предторгового периода определяется по часам, а начало торгов по часам и правилу High~=Low для Сбербанка. -------------- Аналогично можно построить правила для определения любых другим моментов на бирже.
В эпоху интернет казалось бы что сложного ввести в браузере "Лимит открытых позиций" ---------------- и прочитать: --------------------- Лимит открытой позиции — это максимальный объем активов, который трейдер может удерживать в открытой позиции в определенный момент времени. Этот лимит устанавливается для того, чтобы предотвратить риски для финансовой стабильности трейдера и рынка в целом. Для начинающих трейдеров, лимит открытой позиции может показаться сложным понятием, но это необходимо для защиты их финансовых интересов.
nikolz написал: Забыл сказать. Способ High~=Low надо использовать не для торгуемого Вами инструмента, а для ликвидного, например , используйте это правило для сбербанка как индикатор, что торги идут.
Такой способ подойдёт, чтобы определить, что торги в принципе начались, например после клиринга.
Но не подойдёт, чтобы определить, что торги идут по конкретному инструменту.
Безусловно. К тому же, скорее всего, значения этих параметров могут быть разные у разных брокеров. И нет никаких гарантий, что они когда-нибудь не поменяются.
Все просто Карл! Определяете, что торги идут в принципе (был такой магазин ) Потом проверяете объем торгов по данному инструменту. Если ноль, то не торгуется. Можете еще проверять наличие предложений. Если инструмент не торгуется то и предложений нет
Забыл сказать. Способ High~=Low надо использовать не для торгуемого Вами инструмента, а для ликвидного, например , используйте это правило для сбербанка как индикатор, что торги идут.
Вообще-то КВИК создает от 8 потоков. ---------------- Очень сильно тормозит отрисовка графиков, так как практически перерисовывается весь отображаемый график на каждый тик. Попробуйте посмотреть загрузку ядер при свернутых окнах КВИКА -------------------- Размер архивов влияет в основном на время запуска КВИКА, если Вы не отображаете его весь на график
Сергей С. написал: А может кто-то пробовал, что быстрее будет работать для получения информации о зачислении бумаг в портфель: getDepoEx().currentbal, или цикл по getNumberOf("depo_limits") с перебором getItem("depo_limits", i).currentbal ?
Работать будет одинаково, так как обращение к архиву. Быстрее будет работать колбек. Но разница будет не в секундах, а в ms. ------------- Цикл при этом лишний, так как эти таблицы не увеличиваются в размере. --------------- Если у Вас изменение портфеля всегда так долго, то что-то не так в настройках или в канале связи. Ищите, где не так.
18.08.2032 торги на срочном рынке FORTS после проведения дневной клиринговой сессии возобновились в 14:27:00.
Известен ли кому-нибудь способ получать информацию о "необычных" временах начала/возобновления торгов? Насколько я понял, доступа к таблице системных сообщений нет. Здесь предлагают использовать поле TRADINGSTATUS ответа getParamEx, но, судя по обсуждению, не до конца ясно, можно ли на него полагаться.
Есть ли другие варианты, в т.ч. костыльные?
Благодарю за ваши предложения.
Из собственного опыта. Если используете свечи, то просто сравните High и Low свечи. Если торги идут, то значения различны.
Владимир написал: Сергей С. , Дались Вам эти несчастные 5 секунд. У меня тикеры держатся в портфеле месяцами и годами, а тут секунды. ЗАЧЕМ с этим что-то делать?
Была идея немного поарбитражить в квике... но, видимо, для этой цели квик не подходит.
QUIK Подходит для арбитража. На форуме выкладывал пример скрипта для арбитража.
Виталий написал: Добрый день. Подскажите, что сделать чтобы интерфейс не фризился и не тормозил? Я как бы все понимаю, но вот такое окно (приложил скрин) фризится, если программу разворачивать с панели или просто водить по графику курсором с перекрестием. При этом у меня железо как бы не микроволновка: AMD Ryzen 7 5800X 3.80 GHz, ОЗУ 64Гб DDR4 3200, NVME накопитель, пустой на половину. Видео RTX 3060. Ну неужели этого мало?! Ну елки-палки! Что и где подкрутить, чтобы это прекратилось?!
Igor_User написал: nikolz , попробовал X=(Order.flags>>3)&1. То же самое - бит3 = true для рыночной заявки.
На фьючерсах нет рыночных заявок, надо выставлять с ценой. Если хотите рыночную то цену выбирайте хуже лучшей цены.
Мне всегда казалось, что и на спотовом также. Интерфейс выставления заявки в квике одинаковый что на спотовом рынке, что на срочном. И там и там присутствует галочка "Рыночная". Цену хуже можно не выставлять (точнее поле "Цена" становится вообще неактивным при выборе "Рыночная").
Возможно вы имеете в виду, что несмотря на это, заявки всё равно по-разному обрабатываются на спотовом и на срочном?
Я не правильно Вам объяснил. На фьючерсах нет рыночной заявки потому, что вы покупаете не актив, а контракт на его покупку А стоимость контракта не зависит от цены актива. Поэтому Вы задаете число контрактов а их цена фиксированная.
В качестве информации Так как использую своим DDE приложением, то QUIK нормально работает с моим сервером имя которого могу сделать любое.
По.тому полагаю, что проблема не в QUIK а в том, как Open Office реализует обработку. Из документации OpenOffice следует, что вызов DDE надо прописывать специально в ячейке таблицы.
Эта библиотека предоставляет общие функции для работы со строками, такие как поиск, извлечение подстрок и сопоставление шаблонов. Когда индексируются строки в Lua, первый символ находится на позиции 1 (не на 0, как в C). Допускаются негативные индексы, они интерпретируются как индексирование обратно (задом наперед), с конца строки. Таким образом, последний символ находится на позиции -1 и так далее.
Строки в Lua индексируются с 1 (а не 0, как в C). Индексы могут быть отрицательными и интерпретируются как индекс с конца строки. Т.е. последний символ имеет позицию -1, и т.д.