Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 15:15:40
Цитата
Цитата
написал: Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен sec_code. sec_code должен браться автоматом от графика или стакана. Графики и стаканы привязаны якорем к таблице с акциями.
функция getDataSourceInfo() работает как и говорилось. Вот пример как ваша хотелка. График подключен якорем к ТТТ щелкаем в ТТТ строку с инструментом. Он появляется на графике, а в окошке выводится код инструмента этой функцией.
Take profit, Take profit
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 07:15:03
Цитата
написал: Установил тейк-профит 18 100, отступ 2, спред -2. На открытии был взлёт и падение цены. Заявка выставлена по 18 063 и исполнена по 18 084. Не лучший тут алгоритм.
ИМХО, надо чтобы цена выставлялась не ниже чем тейк-профит минус отступ минус спред. Это в случае если цена резко скакнёт против. В остальном случае будет как сейчас.
Алгоритм нормальный. У Вас есть лучше, с интересом почитаю, как он реально работает. Как задали , так и получили. Кроме того, все зависит от задержки выставления заявки по тейку. И Вы в очереди не первый.
Зеркало не виновато.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 07:03:37
написал: tiker_id = "WWWbond"
local sec_code = getSecurityInfo(tiker_id, "SEC_CODE")
message("Название акции: " ..sec_code)
дает ошибку attempt to concatenate a nil value (local 'sec_code')
почему это не работает((( что за проклятье как тяжело получить этот SEC_CODE
============================== Вы не ту функцию взяли. Читайте внимательнее. вам выше специально скопировал из документации ------------------ функция getDataSourceInfo, а у Вас getSecurityInfo ------------------------ getSecurityInfo Функция предназначена для получения информации по инструменту. Формат вызова: TABLE getSecurityInfo (STRING class_code, STRING sec_code) Функция возвращает таблицу Lua с параметрами Таблицы инструментов.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
Пользователь
Сообщений: Регистрация: 30.01.2015
05.09.2023 13:57:08
Цитата
написал: Присвоил графику идентификатор WWWbond. Код работает. Выдает число свечек.
x = getNumCandles('WWWbond') message('x= ' ..x) Пытаюсь разными способами получить по этому идентификатору WWWbond sec_code. Никак не получается, такая возможность вообще есть?
Функция предназначена для получения информации об источнике данных для индикатора.
TABLE info getDataSourceInfo()
Функция возвращает таблицу Lua с параметрами:
ВАЖНО! Для корректной работы функции getDataSourceInfo, вызываемой из функции Init, необходимо перезапустить Рабочее место QUIK после добавления индикатора на график.
Параметр
Тип
Описание
interval
NUMBER
Текущий интервал (тайм-фрейм) графика
class_code
STRING
Код класса источника данных
sec_code
STRING
Код инструмента источника данных
param
STRING
Наименование параметра Таблицы текущих торгов, по которому строится график. Если поле пустое, то график строится на основании Таблицы обезличенных сделок
Возможные значения поля interval:
Работа асберг-заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
05.09.2023 06:43:54
Цитата
написал: Недавно был удивлен, ставил айсберг примерно 1% от дневного оборота по акции кусочками по 100 лотов. До этого всегда думал, что если по этой же цене стоит кто-то еще за тобой, то между кусочками айсберга его пропустят вперед твоего очередного кусочка, при удовлетворении заявки. А тут кто-то крупный бахнул по рынку и мой айсберг почти полностью съел, но не весь, а тот чел так и остался за мной. Но самое удивительной, что в потоке обезличенных сделок эта сделка прошла одной строкой в несколько тысяч контрактов. Это как? Я вообще думал, что айсберги, как и стопы, хранятся на сервере брокера и отправляются на биржу по мере исполнения кусочков? Пусть даже это ММ шалит и убрал свою же заявку перед тем как бахнуть по моей. Но в потоке сделок должны же быть видны все кусочки айсберга?
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 относительно Вашего теста. Он работает без проблем. Если что-то не так, то выложите скрипт для теста проверю еще раз.
написал: Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности.Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Сто процентов не у меня! Какая нахрен ошибка? Один и тот же скрипт с утра и с вечера по разному заработал! В скрипте ничего не меняется. Один и тот же код, один и тот же цикл - то выводит, то не выводит. Я скажу так. В курсе вообще как и когда обновление окна происходит надеюсь. WM_PAINT это его дело! Так вот при при щелчке мышки в окне, WM_SIZE срабатывает, его разрабы написали, что он обрабатывает его, при этом все данные от SetCell попадают туда, куда надо - в буфер, а далее InvalidateRect или UpdateWindow, что вызывает WM_PAINT, где и перерисовывается таблица. Тож самое при щелчке мышкой WM_LBUTTONDOWN только срабатывает. Так вот а когда и как срабатывает WM_PAINT для окна, когда мы не щёлкаем, не меняем размер окна, когда окно просто на экране и ничего с ним не делаем? Вот это пусть разрабы и ответят. Об этом я их уже сколько прошу? Нет ответа никакого. Думаю вот если проблема не закроется - писать прогу, чтобы слала в окно сообщение WM_SIZE из вне с определённой переодичностью. Т.е. насильно извне заставить обработать WM_PAINT/ Может так и заработает, но при условии, что все данные от SetCell уже есть в нужном буфере. А если они не в буфере из которого идёт обновление таблицы, а "болтаются" неизвестно где, мало ли как у них там это реализовано?, промежуточные буфера, очереди и прочее, тогда ничего и так не получится!
если хотите выложите скрипт я могу его запустить на демо сервере и сказать Вам конкретно.
Задержка при зачислении бумаг
Пользователь
Сообщений: Регистрация: 30.01.2015
29.08.2023 10:39:45
это скрипт теста.
Код
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
написал: Выше я выкладывал скрипт, который тестировал. И все там обновляется.
С утра запущены 4 скрипта абсолютно одинаковые. Выставлены разные переменные просто. Все 4 скрипта сейчас идеально всё выводят в ячейку и показывают last синхронно с ТТТ. При этом код сейчас крутится в вышеприведённом цикле(так как last в определённом диапазоне). При выходе из этого диапазона идёт выход из цикла и из функции и попадаем в main() в цикл while(так как уже в другом диапазоне last). Там во while тоже идёт вывод в ячейку last, но только уже в другую и нихрена уже ничего не выводит! Щёлкнишь мышкой по строке - данные обновятся. Или размер окна дёрнешь - обновятся. Опять попадает last в нужный диапазон, опять вызов функции и в repeat цикл и опять всё обновляется. Вчера было всё НАОБОРОТ!!! while обновлял ячейку, repeat нет.
Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности. Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Задержка при зачислении бумаг
Пользователь
Сообщений: Регистрация: 30.01.2015
29.08.2023 10:32:45
сделал тест. вот результат:
Код
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 и скрипты - это и есть программы РВ) применение циклов считается плохим решением. Как правило они лишь тормозят обработку и всегда можно сделать алгоритм без этих циклов.
Поясните, Вы это делаете в индикаторе или в скрипте.
QLua — Получить время возобновления торгов, "Старт торгов ... установлен с хх:хх:00 мск."
Пользователь
Сообщений: Регистрация: 30.01.2015
28.08.2023 19:08:49
есть еще такой способ. использовать колбек onParam. В него приходят все изменения TTT Можно поставить фильтр на нужный инструмент и обнаруживать начало торгов по появлению заявок и сделок.
написал: Что-то у Вас не так, возможно в Вашем скрипте Функция getDepoEx лишь берет данные из архива терминала , откуда Вы и видите в таблице их.
Я бы согласился с тем, что проблемы в моем скрипте, если бы не было разницы между первой и последующими сделками. Ведь скрипт не видит разницу между ними, для него все сделки одинаковы.
Вы тоже не видите ошибку, пока ее не найдете. Если хотите помощь, выложите пример с результатом.
Преобразование времени в число
Пользователь
Сообщений: Регистрация: 30.01.2015
28.08.2023 18:02:02
я делаю так так лучше : local t = dat a:T(i) YYMMDD = t.day +100*( t.month +100*t.year) HHMMSS =t.sec +100*( t.min +100* t.day)
Преобразование времени в число
Пользователь
Сообщений: Регистрация: 30.01.2015
28.08.2023 17:59:02
вместо 4 констант надо одну. Но лучше не соединять дату и время так как при 32 бит будет неточно. Кроме того, дата не меняется в течении торгового дня.
Преобразование времени в число
Пользователь
Сообщений: Регистрация: 30.01.2015
28.08.2023 17:56:31
так лучше : local t = dat a:T(i) metka = t['min']+100*( t['hour'] +100*( t['day'] +100*( t['month'] +100*t['year']*)))
написал: Как Вы определяете, "quik на моей стороне говорит, что бумага зачислена, с опозданием в 5 сек"В настройках есть параметр установки времени пересчета клиентского портфеля. Уменьшите это время. или поставьте флаг пересчитывать при изменении позиции, если смотрите в портфеле.
Определяю по разнице времени между появлением сделки в Таблице сделок и getDepoEx(<Firm_ID>, <Client_code>, <ticker>, <Account>, 2).currentbal) > 0. Эта разница больше 5 сек. В настройках Квика стоят обе галочки - пересчитывать при изменении позиции и пересчитывать раз в 10 сек.
Что-то у Вас не так, возможно в Вашем скрипте Функция getDepoEx лишь берет данные из архива терминала , откуда Вы и видите в таблице их.
Обновление пользовательской таблицы/окна
Пользователь
Сообщений: Регистрация: 30.01.2015
28.08.2023 16:11:08
Цитата
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 сек" В настройках есть параметр установки времени пересчета клиентского портфеля. Уменьшите это время. или поставьте флаг пересчитывать при изменении позиции, если смотрите в портфеле.
Отображение количества купленных акций.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.08.2023 17:55:14
Пардон, опечатка. То, что Вы хотите, делать разработчики Квика для клиентов брокеров не будут.
Отображение количества купленных акций.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.08.2023 17:53:39
Цитата
Сергей написал: Эти показатели можно сформировать из таблицы обезличенных сделок. Там возле каждой сделки указано время сделки, количество акций в сделке и была эта сделка по цене купли или продажи. Поэтому данные показатели можно сформировать как для любого периода времени на графиках, так и суммарное количество за день.
Безусловно можно. Но Квик создан для подачи заявок брокеру и поэтому бесплатный. То, что Вы хотите делать разработчики * клиентов брокеров не будут. Они получают свою зарплату за разработки для брокеров и других проф участников рынка, которые покупают их софт. Бесплатно лишь сами знаете где и что.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.08.2023 07:30:04
Цитата
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
Что быстрее - 1 индикатор с 20 линиями, 4 индикатора с 5 линиями или 20 с одной?
Пользователь
Сообщений: Регистрация: 30.01.2015
25.08.2023 18:26:17
без плеча и без реинвестирования.
Что быстрее - 1 индикатор с 20 линиями, 4 индикатора с 5 линиями или 20 с одной?
Пользователь
Сообщений: Регистрация: 30.01.2015
25.08.2023 18:25:15
Цитата
funduk написал: , я думал, у Вас всё на роботах, и индикаторы оказываются не нужны. Зачем Вы их используете, если не секрет, да ещё 20 линий в одном индикаторе?
Специально для Вас показываю:
Нижний график - прибыль лонг и шорт за месяц.
Что быстрее - 1 индикатор с 20 линиями, 4 индикатора с 5 линиями или 20 с одной?
Пользователь
Сообщений: Регистрация: 30.01.2015
25.08.2023 18:17:21
Цитата
funduk написал: , я думал, у Вас всё на роботах, и индикаторы оказываются не нужны. Зачем Вы их используете, если не секрет, да ещё 20 линий в одном индикаторе? Я, например, облако скользящих строю. А на графике (вместо чисто внутри робота) для наглядности, т.к. ещё только приступаю к автоматизации ТС.
Для торговле одним инструментом я делаю робота всегда в индикаторе. Писал об этом на форуме.
Что быстрее - 1 индикатор с 20 линиями, 4 индикатора с 5 линиями или 20 с одной?
Пользователь
Сообщений: Регистрация: 30.01.2015
25.08.2023 16:08:39
1 c 20.
Как правильно установить и запустить несколько терминалов QUIK на одном компьютере для доступа к разным счетам одного брокера?
У меня в одном брокере имеется несколько брокерских счетов: ИИС и обычный брокерский счет. Для каждого счета необходимо настраивать и запускать отдельный терминал. Я скачал инсталлятор терминала QUIK от брокера и установил для одного счета.
Хочу установить второй терминал QUIK для запуска на том же компьютере и в сеансе того же пользователя, то есть параллельно 2 терминала. Уже не помню как я ставил 2 терминала, но иногда наблюдаются разрывы связи и непонятно по какой причине. Возможно, я что-то неправильно сделал и брокер разрывает соединение на сервере.
Вопросы: 1) Как правильно запускать несколько терминалов QUIK на одном компьютере для доступа к разным счетам одного брокера, чтобы терминалы не конфликтовали между собой? То есть, провести установку 1 раз (например, в директорию c:\QUIK), а потом просто скопировать директорию c:\QUIK в c:\QUIK2 ? Или нужно провести 2 установки из дистрибутива в 2 разные директории?
2) При подключении терминала предлагается выбрать сервер. Нужно ли выбирать разные сервера при подключении из 2 разных терминалов? Например, в первом терминале выбираем Сервер1 , а во втором терминале выбираем Сервер2 .
Спасибо!
Главное, чтобы у Вас были два логина ну и два пароля.
написал: 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
Проданные бумаги в Состоянии счёта
Пользователь
Сообщений: Регистрация: 30.01.2015
24.08.2023 15:21:17
Цитата
СергейК написал: Добрый день. Обычно позиции по проданным бумагам не показываются, но на самом деле у меня есть квики, к-е их таки показывают. Т.е. если у меня было 100 облигаций ТГК-14 и я их сегодня продал, то в Т1 например у Открытия ТГК-14 не будет вообще, а у Альфы или ВТБ будет строка с количеством 0. Соответственно завтра будет то же самое в Т0. Как я понял, вариант, когда такая позиция показывается, немного удобнее. Вопрос: это решается на стороне брокера?
настройте фильтр в таблице.
не закрывает вовремя позицию!
Пользователь
Сообщений: Регистрация: 30.01.2015
24.08.2023 15:19:39
Цитата
Sergey написал: Здравствуйте, вопрос в следующем, если торговать руками, то я могу закрыть позицию в любой удобный для меня момент, т.е. даже тогда когда тиков нет. а вот lua почему то так не может, бывает мне нужно закрыться на close свечи, и тупо с 57 до 01 секунды вообще нет тиков, соответственно закрытие происходит на другой свече, подскажите как закрываться тогда когда мне нужно и не быть зависимым от тиков?
1) колбек onРaram(). 2) таймер и синхронизацию ПК от сервера времени.
Отображение количества купленных акций.
Пользователь
Сообщений: Регистрация: 30.01.2015
23.08.2023 14:54:53
Цитата
Сергей написал: Добрый день. Движение котировок в широких пределах не зависит как от количества продавцов и покупателей, так и от количества и объема сделок. Значительно более сильная корреляция движения котировок связана с соотношением количества проданных (сделка по цене покупки) и купленных (сделка по цене продажи) акций. Я и предлагаю отобразить эту информацию. Наличие покупателей совсем не значит, что они будут участвовать в сделках по текущим ценам и цена акций будет расти. Важна только та их часть, которая участвует в сделках.
Все это - азбука торгов. Общеизвестно, что цены двигают рыночные заявки. Но рыночные заявки не попадают в стакан и их не видят клиенты брокеров.
QLua — Получить время возобновления торгов, "Старт торгов ... установлен с хх:хх:00 мск."
написал: Причем здесь какой-то мой алгоритм? Подняли тему и я написал,что TRADINGSTATUS криво работал раньше, написал что проверю снова. Вот проверил, ничего не поменялось. Написал сюда, чтобы люди, которые будут потом читать, не тестировали заново. Резюмируя: TRADINGSTATUS - бесполезная мура, 10-15 секунд это перебор для любых систем. За эксклюзивную информацию о том, что "система торговли Квик - это не тот инструмент, что стоит использовать" для "мгновенной реакции", низкий поклон, конечно. ::
Вы же говорите, что задержка в 15 секунд для Вас критическая. Я пока не видел с этим проблем, для любых торговых систем. Совершенно разные мнения.
Я такого не писал. Она для меня не критическая, я TRADINGSTATUS не использую. Я имел в виду, что если такая простая опция, как определение статуса сессии, имеет задержку в 10-15 секунд, то этим не следует пользоваться в любых системах. Она просто тупо неправильно работает. Не может быть в современных реалиях такой задержки. Возможно, когда-то она работала правильно, но потом что-то поменялось, а её не исправили. Она стабильно выдает нереальную задержку - это баг.
Поделюсь своим опытом. Правда я не торгую неликвидом. Все плановые начала и концы торгов я определяю так. ------------------ Компьютер у меня синхронизируется по серверу точного времени. Я об этом уже рассказывал на форуме. Поэтому я знаю время работы биржи очень точно, а не по серверу брокера, которое может гулять как угодно. Ошибка синхронизации не более 0.02 сек. Начало предторгового периода определяется по часам, а начало торгов по часам и правилу High~=Low для Сбербанка. -------------- Аналогично можно построить правила для определения любых другим моментов на бирже.
Лимит открытых позиций, Списываются деньги со счёта
В эпоху интернет казалось бы что сложного ввести в браузере "Лимит открытых позиций" ---------------- и прочитать: --------------------- Лимит открытой позиции — это максимальный объем активов, который трейдер может удерживать в открытой позиции в определенный момент времени. Этот лимит устанавливается для того, чтобы предотвратить риски для финансовой стабильности трейдера и рынка в целом. Для начинающих трейдеров, лимит открытой позиции может показаться сложным понятием, но это необходимо для защиты их финансовых интересов.
QLua — Получить время возобновления торгов, "Старт торгов ... установлен с хх:хх:00 мск."
написал: Забыл сказать. Способ High~=Low надо использовать не для торгуемого Вами инструмента, а для ликвидного, например , используйте это правило для сбербанка как индикатор, что торги идут.
Такой способ подойдёт, чтобы определить, что торги в принципе начались, например после клиринга.
Но не подойдёт, чтобы определить, что торги идут по конкретному инструменту.
, ,
Безусловно. К тому же, скорее всего, значения этих параметров могут быть разные у разных брокеров. И нет никаких гарантий, что они когда-нибудь не поменяются.
Все просто Карл! Определяете, что торги идут в принципе (был такой магазин ) Потом проверяете объем торгов по данному инструменту. Если ноль, то не торгуется. Можете еще проверять наличие предложений. Если инструмент не торгуется то и предложений нет
QLua — Получить время возобновления торгов, "Старт торгов ... установлен с хх:хх:00 мск."
Пользователь
Сообщений: Регистрация: 30.01.2015
21.08.2023 09:55:21
Забыл сказать. Способ High~=Low надо использовать не для торгуемого Вами инструмента, а для ликвидного, например , используйте это правило для сбербанка как индикатор, что торги идут.
Фризы и тормоза, Фризы терминала
Пользователь
Сообщений: Регистрация: 30.01.2015
20.08.2023 07:19:09
Вообще-то КВИК создает от 8 потоков. ---------------- Очень сильно тормозит отрисовка графиков, так как практически перерисовывается весь отображаемый график на каждый тик. Попробуйте посмотреть загрузку ядер при свернутых окнах КВИКА -------------------- Размер архивов влияет в основном на время запуска КВИКА, если Вы не отображаете его весь на график
Задержка при зачислении бумаг
Пользователь
Сообщений: Регистрация: 30.01.2015
20.08.2023 07:11:29
Цитата
Сергей С. написал: А может кто-то пробовал, что быстрее будет работать для получения информации о зачислении бумаг в портфель: getDepoEx().currentbal, или цикл по getNumberOf("depo_limits") с перебором getItem("depo_limits", i).currentbal ?
Работать будет одинаково, так как обращение к архиву. Быстрее будет работать колбек. Но разница будет не в секундах, а в ms. ------------- Цикл при этом лишний, так как эти таблицы не увеличиваются в размере. --------------- Если у Вас изменение портфеля всегда так долго, то что-то не так в настройках или в канале связи. Ищите, где не так.
QLua — Получить время возобновления торгов, "Старт торгов ... установлен с хх:хх:00 мск."
18.08.2032 торги на срочном рынке FORTS после проведения дневной клиринговой сессии возобновились в 14:27:00.
Известен ли кому-нибудь способ получать информацию о "необычных" временах начала/возобновления торгов? Насколько я понял, доступа к таблице системных сообщений нет. предлагают использовать поле TRADINGSTATUS ответа getParamEx, но, судя по обсуждению, не до конца ясно, можно ли на него полагаться.
Есть ли другие варианты, в т.ч. костыльные?
Благодарю за ваши предложения.
Из собственного опыта. Если используете свечи, то просто сравните High и Low свечи. Если торги идут, то значения различны.
написал: , Дались Вам эти несчастные 5 секунд. У меня тикеры держатся в портфеле месяцами и годами, а тут секунды. ЗАЧЕМ с этим что-то делать?
Была идея немного поарбитражить в квике... но, видимо, для этой цели квик не подходит.
QUIK Подходит для арбитража. На форуме выкладывал пример скрипта для арбитража.
Фризы и тормоза, Фризы терминала
Пользователь
Сообщений: Регистрация: 30.01.2015
17.08.2023 11:26:16
Цитата
Виталий написал: Добрый день. Подскажите, что сделать чтобы интерфейс не фризился и не тормозил? Я как бы все понимаю, но вот такое окно (приложил скрин) фризится, если программу разворачивать с панели или просто водить по графику курсором с перекрестием. При этом у меня железо как бы не микроволновка: AMD Ryzen 7 5800X 3.80 GHz, ОЗУ 64Гб DDR4 3200, NVME накопитель, пустой на половину. Видео RTX 3060. Ну неужели этого мало?! Ну елки-палки! Что и где подкрутить, чтобы это прекратилось?!
написал: , попробовал X=(Order.flags>>3)&1. То же самое - бит3 = true для рыночной заявки.
На фьючерсах нет рыночных заявок, надо выставлять с ценой. Если хотите рыночную то цену выбирайте хуже лучшей цены.
Мне всегда казалось, что и на спотовом также. Интерфейс выставления заявки в квике одинаковый что на спотовом рынке, что на срочном. И там и там присутствует галочка "Рыночная". Цену хуже можно не выставлять (точнее поле "Цена" становится вообще неактивным при выборе "Рыночная").
Возможно вы имеете в виду, что несмотря на это, заявки всё равно по-разному обрабатываются на спотовом и на срочном?
Я не правильно Вам объяснил. На фьючерсах нет рыночной заявки потому, что вы покупаете не актив, а контракт на его покупку А стоимость контракта не зависит от цены актива. Поэтому Вы задаете число контрактов а их цена фиксированная.
Возможен экспорт через DDE в OpenOffice Calc? (Он аналог MS Excel)
Пользователь
Сообщений: Регистрация: 30.01.2015
14.08.2023 12:22:11
В качестве информации Так как использую своим DDE приложением, то QUIK нормально работает с моим сервером имя которого могу сделать любое.
По.тому полагаю, что проблема не в QUIK а в том, как Open Office реализует обработку. Из документации OpenOffice следует, что вызов DDE надо прописывать специально в ячейке таблицы.