Переподключение к серверу: автоматическое или из Lua
Пользователь
Сообщений: Регистрация: 24.02.2015
28.02.2016 20:00:06
Цитата
swerg написал: После потери связи можно настроить автопереподключение штатными средствами. А чтобы терминал .
Ага, и при первом же использовании этот файл с dll в который средний пользователь QLUA заглянуть не сможет, кинет вам его логин и пароль))) А то оба файла pubrink и sebrink в фоном режиме)
В sendTransaction() KILL_ALL_ORDERS так и не работает?
Пользователь
Сообщений: Регистрация: 24.02.2015
15.02.2016 19:56:30
...как: убить старый и запустить новый?
В sendTransaction() KILL_ALL_ORDERS так и не работает?
Причина в том, что функции «KILL_ALL_ORDERS» – снять все заявки из торговой системы, «KILL_ALL_STOP_ORDERS» – снять все стоп-заявки, «KILL_ALL_NEG_DEALS» – снять все заявки на внебиржевые сделки и заявки на сделки РЕПО. не предназначены для использования в LUA.
Значит даже не предвидится реализации в рамках LUA этих удобных вещей? Ну, и вдогонку пару вопросцев тогда: как мне узнать, что стоп сработал? Если мне нужно менять что-то в Стопе, у меня нет другого выбора как: убить старый и запустить старый?
В sendTransaction() KILL_ALL_ORDERS так и не работает?
Пользователь
Сообщений: Регистрация: 24.02.2015
15.02.2016 01:12:42
Где-то год назад пробовал, не работало, мож исправили?
Как сделать так, чтобы файлы подгружались сами?
Пользователь
Сообщений: Регистрация: 24.02.2015
30.07.2015 02:17:27
Спасибо за советы, всё остальное сработало наконец-то)
Как сделать так, чтобы файлы подгружались сами?
Пользователь
Сообщений: Регистрация: 24.02.2015
30.07.2015 02:17:04
А как быть с русской кодировкой, если название папок на нашем языке?
Как сделать так, чтобы файлы подгружались сами?
Пользователь
Сообщений: Регистрация: 24.02.2015
27.07.2015 01:57:49
Цитата
Старатель пишет: Указывайте полные пути к модулям (файлам).
а не сработало. прямо путь с обычными "\"?
Как сделать так, чтобы файлы подгружались сами?
Пользователь
Сообщений: Регистрация: 24.02.2015
24.07.2015 22:31:02
Ни dofile(), ни loadfile() не делают этого, пока сам не откроешь все свои модули (файлы) в окне "Доступные скрипты". Есть ли какая возможность или быть может я не правильно пользуюсь этими функциями?
Если внутри функции создаётся переменная, то по выходу из функции она умирает?
Пользователь
Сообщений: Регистрация: 24.02.2015
22.07.2015 17:02:31
Цитата
Imersio Arrigo пишет: я думал намек погуглить будет верно понят с первого раза
я знаю этот термин. для того, чтобы переменная в Lua была локальной нужно указать LOCAL, но у меня переменная задана в файле, до описания функции, сам файл и функция в нём вызывается в основном цикле программы (уже в другом файле), вот я и задался вопросом - а переменная живёт или каждый раз заново создаётся? Выходит, раз не указано LOCAL - то живёт.
Если внутри функции создаётся переменная, то по выходу из функции она умирает?
ну да, видимость это понятно, живучесть то как? убиваются, да?
Если внутри функции создаётся переменная, то по выходу из функции она умирает?
Пользователь
Сообщений: Регистрация: 24.02.2015
21.07.2015 06:40:14
Нужно спецом создавать глобальную переменную иначе всё что создаётся для расчёта в функции по выходу из неё будет убито?
На запуск скрипта никакой реакции. Не появляется зелёный значок работы скрипта., Засунул большую часть вычислений в функции обратного вызова.
Пользователь
Сообщений: Регистрация: 24.02.2015
20.07.2015 19:21:46
Нашёл причину, is_run не указал в единицу))))))
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
20.07.2015 18:48:20
Цитата
Старатель пишет: Николай Бехтерев , вы, как минимум, берёте не тот курс доллара.
а какой брать?
На запуск скрипта никакой реакции. Не появляется зелёный значок работы скрипта., Засунул большую часть вычислений в функции обратного вызова.
Пользователь
Сообщений: Регистрация: 24.02.2015
20.07.2015 16:28:00
Вот такого рода код. Может быть я был не прав засунув что-то в функции обратного вызова?
Код
fut = "SIU5" --торгуемый фьючерс
range = 200
lots = 1 --количество торгуемых лотов
ID = 1 --Айди транзакций
totalnet = 0 --начальный размер позиции
dofile("transaction.lua")
dofile("candle.lua")
function OnAllTrade(AllTrades)
if AllTrades.sec_code == fut then
Price = AllTrades.price
posa = chemp(Price, range)
Class = AllTrades.class_code
end
end
function OnFuturesClientHolding(fut_pos)
if fut_pos.sec_code == fut then
totalnet = fut_pos.totalnet
PrintDbgStr("Changed position size to "..tostring(position))
end
end
function OnStop()
is_run = 0
end
function main()
while is_run == 1 do
if position > posa then
--ВЫХОДИМ ИЗ ЛОНГА; КОЛИЧЕСТВО В ЗАЯВКЕ = lots + totalnet
Qty = lots + totalnet
OrderSell (Price, ID, Class, Qty, fut)
ID = ID + 1
position = -1
PrintDbgStr("Перевернулись в шорт по цене "..tostring(Price))
elseif position < posa then
--ВЫХОДИМ ИЗ ШОРТА; КОЛИЧЕСТВО В ЗАЯВКЕ С УЧЁТОМ РАЗМЕРА ОСТАТКА ПО СЧЁТУ
Qty = lots - totalnet
OrderBuy (Price, ID, Class, Qty, fut)
ID = ID + 1
position = 1
PrintDbgStr("Перевернулись в лонг по цене "..tostring(Price))
end
sleep(100)
end
end
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
29.06.2015 11:21:38
Цитата
Николай Камынин пишет: Индекс РТС либо считается точно, либо в действительности считаете не индекс РТС, а какой-то свой индекс. Поэтому "почти точно" - почти тоже самое, что "почти беременная"
Так вся ирония в том, что формула проста как два пальца. Выходит либо транслируемый биржей индекс ложный, либо выложена не последняя редакция, либо где-то ошиблись в расчётах, так ведь опять же - там всё просто как 2 пальца.
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
24.06.2015 15:13:18
Иногда передаваемый RTSI биржи сильно врёт. И что удивительно фьючерс на эти разводки вообще никак не реагирует. Почему я уверен, что врёт, потому что расхождение с кодом может быть из-за коэффициентов, т.е. отрисовывающий в реальном времени график не должен был бы расходиться на разную величину каждый раз. А иногда получается довольно сильное расхождение не на 0,5 а на целый пункт, например...
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
24.06.2015 13:06:15
Вот этот код у меня показывает почти 1 в 1 Индекс РТС:
sam063rus пишет: а вообще - расчёт самостоятельно индекса ртс - дело неблагодарное, бо как зависит от кучи разных факторов, которые постоянно меняются и не предсказуемы. Сама методичка может измениться, могут быть приняты те или иные решения клиринговой палаты и т. п.
Благодарное или нет - а проверить надо. Все изменения должны быть официально выложены. Я тут посмотрел методику: И не совсем понимаю суть поправочного коэффициента D и почему ни в одной формуле не принимает участие Поправочный коэффициент Z?
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
23.06.2015 10:16:00
Чот у меня разный код, разные результаты. Другой вариант кода вывел всё по нулям. Можно окончательный код, который вот приводит к результатам на картинке?
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
23.06.2015 10:11:38
Правда были акции по которым не было ещё ни одной сделки, может по этому терминал в ужасе?
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
23.06.2015 10:10:42
Цитата
Danial Novikov пишет: В качестве курса доллара я взял текущее (последние) значение инструмента USDRUB_TOM с биржи ММВБ.
У меня не открыт на валютной секции счёт, я воткнул фьючерс, просто чтобы увидеть график и что-то вот:
Код
QUIK\LuaIndicators\MY_RTSI.lua:313: attempt to perform arithmetic on field '?' (a nil value)
чтобы это значило?
Расчёт индекса РТС
Пользователь
Сообщений: Регистрация: 24.02.2015
14.06.2015 01:34:52
не совсем понятно, откуда берётся курс бакса для расчёта Индекса?
Windows 10 упорно себя предлагает, пробовал кто на совместимость?
есть OnDisconnect() функция обратного вызова. Понаписали то... Блин, мне бы и е-мейла хватило, но библиотека забугорная, без русского хелпу. Мне, как непрограммеру долго придётся копаться. Спасибо за примеры!
Кто как решил вопрос уведомления о сделках?
Пользователь
Сообщений: Регистрация: 24.02.2015
28.05.2015 22:40:11
Есть какая-нибудь возможность кидать хотя бы е-мейлы через скрипт?
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Пользователь
Сообщений: Регистрация: 24.02.2015
22.04.2015 16:04:21
Цитата
swerg пишет: Функция assert() выдает сообщение об ошибке, если значение её первого параметра равно false (то есть nil или false ). , нашёл гуглем за 30 сек. по запросу "Lua assert"
А "зарабобтало" у вас потому, что добавили getScriptPath() Беда в том, что QUIK из скриптов создаёт файлы в том каталоге, из которого вы последний раз открывали како-либо файл (со скриптом, згружали настройки - и т.п.), либо в каталоге самого квика.
При добавке getScriptPath() файл гарантированно создаётся рядом со скриптом - вот вы его и нашли. До этого он тоже создавался, но где - ответ даст только поиск по диску.
Спасибо! :) А я кинулся на оф. сайт, а там документалка на русском недоступна и про гугл даже не вспомнил.
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Пользователь
Сообщений: Регистрация: 24.02.2015
21.04.2015 10:20:04
и да, сработало.
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Николай,Вам уже объяснили что информация в файле появится только после выполнения close() или flush() В Вашем коде нету flush() есть только close() который сработает в лучшем случае при остановке скрипта. Рекомендация остается прежней, добавьте команду file:flush() сразу после file:write
Я понимаю, что после выполнения close()! Поэтому посмотрел, увидел, что набежало пару нужных строк, жму стоп, останавливается скрипт И ТИШИНА. Даже файл не создан. Хотя команды всё выполнены и должен быть файл как минимум с одной строкой...
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Пользователь
Сообщений: Регистрация: 24.02.2015
21.04.2015 05:27:59
Выручайте, не могу понять почему не создаётся файл. Логику всех if then end проверил, о том что верно мне сообщают message(), но почему не создаётся файл я понять не могу. В прошлый раз, вынеся команды по файлу за пределы циклы while всё сработало, но теперь чуть более сложная схема и опять всё по нулям:
Код
boom = {}
ttime = {}
is_run = 1
candle = {}
range = 20
function OnStop()
is_run = 0
end
function OnClose()
candle.o = 0
candle.h = 0
candle.l = 0
candle.c = 0
end
function OnCleanUp()
candle.o = 0
candle.h = 0
candle.l = 0
candle.c = 0
end
function main()
file = io.open("res.txt", "w+t")
while is_run == 1 do
candle.o = 0
candle.h = 0
candle.l = 0
candle.c = 0
g = getNumberOf("all_trades")-1
for i=0, g do
boom = getItem("all_trades", i)
message("New Price get".." - "..tostring(boom.price),3)
if candle.c == 0 then
candle.o = boom.price
candle.h = boom.price
candle.l = boom.price
candle.c = boom.price
elseif boom.price > candle.h then
message(tostring(candle.l+range).." ".."High test",1)
if boom.price >= (candle.l + range) then
candle.h = boom.price
candle.c = boom.price
message("New Candle from new HIGH".." "..tostring(candle.o).." "..tostring(candle.h).." "..tostring(candle.l).." "..tostring(candle.c),2)
strin = tostring(candle.o)..","..tostring(candle.h)..","..tostring(candle.l)..","..tostring(candle.c)
file:write(strin.."\n")
candle.o = 0
candle.h = 0
candle.l = 0
candle.c = 0
else
message("GET NEW HIGH",3)
candle.h = boom.price
end
elseif boom.price < candle.l then
message(tostring(candle.h-range).." ".."Low Test",1)
if boom.price <= (candle.h - range) then
candle.l = boom.price
candle.c = boom.price
message("New Candle from new LOW".." "..tostring(candle.o).." "..tostring(candle.h).." "..tostring(candle.l).." "..tostring(candle.c),2)
strin = tostring(candle.o)..","..tostring(candle.h)..","..tostring(candle.l)..","..tostring(candle.c)
file:write(strin.."\n")
candle.o = 0
candle.h = 0
candle.l = 0
candle.c = 0
else
message("GET NEW LOW",3)
candle.l = boom.price
end
end
i=i+1
message("GET OUT FOR THE NEW ROUND",3)
sleep(100)
end
end
file:close()
end
ЧО НЕ ТАК ТО? P.S. идея в том, чтобы получить из потока сделок range барчики, например.
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Пользователь
Сообщений: Регистрация: 24.02.2015
06.04.2015 20:02:19
Цитата
Дмитрий пишет: , советую вам оформлять свой код с отступами внутри циклов, а чтобы эти отступы не пропадали при размещении сообщения на форуме - пользоваться кнопочкой "оформление текста в виде кода". Иначе бывает трудно сходу вникнуть в логику работы вашего алгоритма.
Просто ошибся с кнопкой при составлении вопроса, а редактировать сообщения на этом движке видимо никак.
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Пользователь
Сообщений: Регистрация: 24.02.2015
03.04.2015 10:31:29
Нет, поторопился, не работает. Пустой файл!
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Пользователь
Сообщений: Регистрация: 24.02.2015
03.04.2015 10:29:42
как всегда, стоит только начать жаловаться, как всё заработает)))
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
Пользователь
Сообщений: Регистрация: 24.02.2015
03.04.2015 10:28:20
Цитата
boom = {} ttime = {} is_run = 1
function OnStop() is_run = 0 end
function main() while is_run == 1 do file = io.open("res.txt", "w+t") g = getNumberOf("all_trades")-1 for i=0, g do boom = getItem("all_trades", i) message(tostring(boom.price),3) file:write(tostring(boom.price).. "\n") i = i+1 sleep(1000) end file:close() end end
dofile( ) - как дать путь в скрипте, чтобы Quik не ругался на отсутствие файла?
Пользователь
Сообщений: Регистрация: 24.02.2015
26.03.2015 18:40:42
Ну, правда выручайте, я явно что-то не знаю :)) Не находит файлы по команде
Код
dofile("position.lua")
Файлы лежат водной папке. Разбить на несколько блоков очень удобно!
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 24.02.2015
26.03.2015 16:08:00
Цитата
Серж пишет: Мда... У вас в функции pos поиск выходит за пределы таблицы. Перепишите код так:
Спасибо за совет, но что выдаст в вашем коде getNumberOf, если табличка пустая, вообще нет позиций? У меня нет сейчас возможности проверить этот код.
dofile( ) - как дать путь в скрипте, чтобы Quik не ругался на отсутствие файла?
Пользователь
Сообщений: Регистрация: 24.02.2015
25.03.2015 17:03:02
Собственно сабж
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 24.02.2015
25.03.2015 16:40:33
не работает код, если таблица "Позиции по Клиентским счетам" совсем пустая, т.е. давно не было сделок и поэтому там в принципе нет строчек.
Код
11: attempt to index local 'futures' (a nil value)
как быть?
При попытке отправить транзакцию с "KILL_ALL_STOP_ORDERS" было получено:, "Отправка транзакций данного типа из QPILE-программы не поддерживается."
Николай Бехтерев пишет: правильно ли я понимаю, что снять все стопы махом не получится?
Добрый день.
Да, верно.
Это так и будет или в планах есть реализация? Ещё вопрос, я выставлял стопы с условием "M" т.е. по рынку, но писал и цену, правильно я понял, что "М" не работает, если указана цена?
При попытке отправить транзакцию с "KILL_ALL_STOP_ORDERS" было получено:, "Отправка транзакций данного типа из QPILE-программы не поддерживается."
Пользователь
Сообщений: Регистрация: 24.02.2015
21.03.2015 14:14:16
правильно ли я понимаю, что снять все стопы махом не получится?
При попытке отправить транзакцию с "KILL_ALL_STOP_ORDERS" было получено:, "Отправка транзакций данного типа из QPILE-программы не поддерживается."
Пользователь
Сообщений: Регистрация: 24.02.2015
20.03.2015 22:53:35
Это нормально?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 24.02.2015
19.03.2015 00:50:58
спасибо, сработало.
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 24.02.2015
18.03.2015 15:18:50
Мой код:
Код
is_run = 1
fuc = "SiM5"
futures = {
firmid = '',
trdaccid = '',
sec_code = '',
startbuy = 0,
startsell = 0,
startnet = 0,
todaybuy = 0,
todaysell = 0,
totalnet = 0,
openbuys = 0,
opensells = 0,
cbplused = 0,
cbplplanned = 0,
varmargin = 0,
avrposnprice = 0,
positionvalue = 0,
real_varmargin = 0,
total_varmargin = 0
}
function OnStop()
is_run = 0
end
function pos(stroka)
local i = 0
while futures.sec_code ~= stroka do
futures = getItem("futures_client_holding", i)
i = i+1
end
return futures.totalnet
end
function main()
while is_run == 1 do
j = pos(fuc)
message(tostring(j),1)
sleep(1000)
end
end
Совершаю сделку в таблице "Позиции по клиентским счетам (Фьючерсы)" в колонке "План. чист. поз." горит единичка, код продолжает выкидывать мне в сообщениях "0". Другие цифры, маржу например, показывает правильно.
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
подсобите, не работает конструкция такого вида, табличку получаем нужную, это вижу по futures.sec_code но увидеть чистую позицию по фьючерсам: futures.totalnet не получается:
Код
function pos(stroka)
local i = 0
while futures.sec_code ~= stroka do
futures = getItem("futures_client_holding", i)
i = i+1
end
return futures.totalnet
end
function main()
while is_run == 1 do
j = pos(fuc)
-- One()
message(tostring(j),1)
sleep(1000)
end
end
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Николай Бехтерев пишет: а можно ли сделать таблицу из таблиц?
да можно T={ T1={}, T2={} }
а обращаться к таким таблицам через две точки?
Код
T.futures.sec_code
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 24.02.2015
17.03.2015 04:01:43
выходит что-то на вроде такого:
Код
function pos()
local i = 0
while futures.sec_code ~= "SiM5" do
futures = getItem("futures_client_holding", i)
i = i+1
end
end
а можно ли сделать таблицу из таблиц?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Пользователь
Сообщений: Регистрация: 24.02.2015
16.03.2015 23:04:42
Может кто-то уже делал получение позиции по наименованию фьючерса, поделитесь? :)
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Пользователь
Сообщений: Регистрация: 24.02.2015
12.03.2015 20:00:17
спасибо за ресурс :)
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Спасибо за ответ. В результате мой код выглядит вот так:
Код
function main()
while is_run == 1 do
dt = os.date()
ddt = string.sub(dt, 10, 14)
if ddt == "20:45" then is_run = 0
end
sleep (1000)
end
end
Может кому пригодится. функция string.sub(dt, 10, 14) вырезает подстроку с 10 по 14 символ в строке, которую выдаёт функция os.date() получая как раз время в виде строки: "HH:MM" её и будем сравнивать с заданным заранее значением.