getFuturesHolding - возврат Nil если не было сделок?
Пользователь
Сообщений: Регистрация: 10.07.2020
25.08.2020 12:10:55
Sergey Gorokhov, тогда понятно. А сколько по времени хранится эта запись на бирже, то есть, через какое время трансляция прекращается?
getFuturesHolding - возврат Nil если не было сделок?
Пользователь
Сообщений: Регистрация: 10.07.2020
25.08.2020 11:19:28
Sergey Gorokhov, я в курсе. Но почему она появляется только после сделки?
getFuturesHolding - возврат Nil если не было сделок?
Пользователь
Сообщений: Регистрация: 10.07.2020
25.08.2020 10:29:26
Здравствуйте.
Я определения текущего количества фьючерсов в портфеле я использую функцию getFuturesHolding. Обратил внимание, что если по тикеру ранее не было сделок, то функция возвращает Nil, а не 0 как я предполагал. Если сделки ранее были, то количество бумаг отображается корректно.
никак не могу разобраться с этой функцией. Есть такая молотилка, которая транзакции шлет, но OnTransReply не срабатывает...
Код
local LastStatus = nil
local trans_id=1
local stopped = false
function OnStop()
stopped = true
return 2000
end
function main()
while stopped == false do
trans_id=trans_id+1
local OrderSell = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= "SPBFUT0000",
["OPERATION"] = "B",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = "SRU0",
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(trans_id),
["TYPE"] = "M",
}
local result = sendTransaction(OrderSell)
sleep(1000)
end
end
function OnTransReply(trans_reply)
if trans_reply.trans_id == trans_id then
if trans_reply.status == LastStatus then return else LastStatus = trans_reply.status end
if trans_reply.status == 0 then message('OnTransReply(): Транзакция отправлена серверу')
elseif trans_reply.status == 1 then message('OnTransReply(): Транзакция получена на сервер QUIK от клиента')
elseif trans_reply.status == 2 then message('OnTransReply(): Ошибка')
elseif trans_reply.status == 3 then message('OnTransReply(): ТРАНЗАКЦИЯ ВЫПОЛНЕНА')
end
end
end
Отключение скрипта при получении Nil
Пользователь
Сообщений: Регистрация: 10.07.2020
13.08.2020 17:05:41
Anton, я недавно начал кодить на lua, поэтому что где может быть во всех деталях не знаю. Поэтому и спрашиваю тут.
local stopped = false
function OnStop()
stopped = true
return 1000
end
function main()
local Table = AllocTable()
AddColumn(Table, 1,"FXRL", true, QTABLE_DOUBLE_TYPE, 18)
CreateWindow(Table)
SetWindowCaption(Table, "table")
SetWindowPos(Table, 0, 10, 400, 90)
InsertRow(Table, -1)
while stopped == false do
Quotes_1 = getQuoteLevel2("TQTF", "FXRL")
if Quotes_1 then
offer_1= tonumber(Quotes_1.offer_count)
fxrl_pr = tonumber(Quotes_1.offer[1].price)
SetCell(Table, 1, 1, tostring(fxrl_pr))
end
sleep(1000)
end
end
Отключение скрипта при получении Nil
Пользователь
Сообщений: Регистрация: 10.07.2020
13.08.2020 14:19:15
Попробовал, оба варианта, но не помогает вопрос не в том, что скрипт не работает, а в том, что он выключается и надо заново его включать нажатием play...
Код
if Quotes_1 then
xxxx
end
if Quotes_1 ~= nil then
xxxxx
end
Отключение скрипта при получении Nil
Пользователь
Сообщений: Регистрация: 10.07.2020
13.08.2020 12:39:06
Sergey Gorokhov, так я следовал Вашей рекомендации: лучше так: if (xxx) then --тут чтото делаем end
if расценивает nil как false, а любое значение как true
Насколько я понял, в качестве ххх можно взять совершенно любую цифру. Как правильно тогда?
Отключение скрипта при получении Nil
Пользователь
Сообщений: Регистрация: 10.07.2020
13.08.2020 11:50:54
Sergey Gorokhov, такой вариант. При закрытии стакана или отключении инета, тут же останавливается
Код
local xxx=100
local stopped = false
function OnStop()
stopped = true
return 1000
end
function main()
local Table = AllocTable()
AddColumn(Table, 1,"FXRL", true, QTABLE_DOUBLE_TYPE, 18)
CreateWindow(Table)
SetWindowCaption(Table, "table")
SetWindowPos(Table, 0, 10, 400, 90)
InsertRow(Table, -1)
while stopped == false do
if xxx>0 then
Quotes_1 = getQuoteLevel2("TQTF", "FXRL")
offer_1= tonumber(Quotes_1.offer_count)
fxrl_pr = tonumber(Quotes_1.offer[1].price)
SetCell(Table, 1, 1, tostring(fxrl_pr))
end
sleep(1000)
end
end
Есть скрипт, который берет данные из стакана котировок для дальнейшей работы. Если из стакана пропадают котировки (например, из-за сбоя сети), то функции возвращает Nil, скрипт отключается и его нужно включать вручную.
Можно добавить какой-нибудь код, чтобы этого отключения не было?
Заранее спасибо.
Функция для получения данных из таблицы сделок
Пользователь
Сообщений: Регистрация: 10.07.2020
11.08.2020 08:09:51
Здравствуйте,
какой функцией можно воспользоваться для получения данных из таблицы сделок?
Интересует, в частности, общая сумма сделок, которая бы обновлялась после каждой успешной транзакции.
Заранее спасибо.
Какую функцию нужно использовать для текущего кол-ва ETF?
Пользователь
Сообщений: Регистрация: 10.07.2020
06.08.2020 10:13:13
Здравствуйте.
Какую функцию нужно использовать для получения текущего кол-ва ETF в портфеле?
Есть параметры:
- код класса: TQTF - account: LXXXXXXX - код клиента: 00000 - код бумаги
Заранее спасибо.
Отправка заданного количества заявок
Пользователь
Сообщений: Регистрация: 10.07.2020
31.07.2020 13:09:11
Sergey Gorokhov, вроде все заработало, спасибо. Но хотел бы уточнить - если транзакция должна уходить при срабатывании какого-либо условия, то это условие должно быть внутри цикла for?
Отправка заданного количества заявок
Пользователь
Сообщений: Регистрация: 10.07.2020
31.07.2020 12:13:14
Sergey Gorokhov, сделал такой вариант, но он не работает... Что я написал не так?
Код
local quantity=2
local id=1
function main()
for i=0,quantity,1 do
local OrderSell = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= "SPBFUT0000",
["OPERATION"] = "B",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = "SRU0",
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID),
["TYPE"] = "M",
}
local Err_Order = sendTransaction(OrderSell)
end
end
Отправка заданного количества заявок
Пользователь
Сообщений: Регистрация: 10.07.2020
31.07.2020 11:54:34
Sergey Gorokhov, я правильно понимаю, что это должен быть цикл for, где количество итераций равно quantity? Спасибо.
Отправка заданного количества заявок
Пользователь
Сообщений: Регистрация: 10.07.2020
31.07.2020 11:38:56
Здравствуйте!
К примеру есть некий скрипт, который отправляет заявку при срабатывании условия cond. Но мне нужно, чтобы всего было отправлено заявок в количестве quantity.
Как в мой вариант скрипта добавить этот параметр?
Заранее спасибо.
Код
function main()
ID=10
if cond>100 then
ID=ID+1
local OrderSell = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= "SPBFUT0000",
["OPERATION"] = "S",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = "SRU0",
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID),
["TYPE"] = "M",
}
local Err_Order = sendTransaction(OrderSell)
end
end
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
22.07.2020 20:17:37
Старатель, а как быть тогда? Добавлять код, который отслеживает статус выполнения заявки? Если да, то куда добавлять?
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
22.07.2020 18:53:07
Nikolay, это вполне рабочий код, который работает с малоликвидными бумагами, то есть сделки редкие и осуществляются при определенных условиях. Проблема в том, что если мне надо обнулить портфель из 10 бумаг (asset=10), то условие "until asset<=0" срабатывает отлично. Если же мне надо продать только 3 бумаги, то "until asset<=7" начинает продавать до тех пор, пока не уйдет в шорт. То же самое и "until asset==7".
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
22.07.2020 10:17:36
Sergey Gorokhov, ничто не мешает, но начинаются продажи, так как условия позволяет быть asset <5, то есть 4,3,2 и т.д.
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
22.07.2020 07:56:54
Sergey Gorokhov, а в чем может быть причина? Когда нужен был 0, то Вы посоветовали "until asset<=0", и он сработал. Но если asset больше 0, то такой вариант не подходит
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
22.07.2020 07:08:30
Sergey Gorokhov, уже пробовал вариант until asset==5, но он не срабатывает - идут продажи пока лимиты не выйдут.
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
21.07.2020 21:49:46
Sergey Gorokhov, а как быть, если необходимо выполнить условие until asset=5?
Заранее спасибо
Не работает getFuturesHolding
Пользователь
Сообщений: Регистрация: 10.07.2020
17.07.2020 10:54:03
Sergey Gorokhov, а есть демо версии квика на 32 разряда? Я на сайте Арки увидел только версию 8.., которая на 64 только работает
Не работает getFuturesHolding
Пользователь
Сообщений: Регистрация: 10.07.2020
17.07.2020 10:40:37
Sergey Gorokhov, моя версия Демо была скачана с ФК Открытие, и SPBFUT был присвоен ими. Я просто окончания заменил на *
Не работает getFuturesHolding
Пользователь
Сообщений: Регистрация: 10.07.2020
17.07.2020 10:24:08
Всем привет!
Сегодня почему-то на Quik Junior не работает getFuturesHolding - возвращает nil Вчера скрипт работал отлично. В чем может быть причина?
Код
function main()
local a1 = getFuturesHolding("SPBFUT", "SPBFUT***","SRU0",0).totalnet
local a2 = getFuturesHolding("SPBFUT", "SPBFUT***","LKU0",0).totalnet
message("Sber "..a1.."\nLkon "..a2)
end
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
16.07.2020 21:44:30
Sergey Gorokhov, спасибо за подсказку - заработало как надо.
Единственное смущает то, что итоговое значение asset скачет от -1 до 0; впрочем, это не критично...
Не обновляется таблица при добавления цикла repeat...until
Пользователь
Сообщений: Регистрация: 10.07.2020
16.07.2020 14:42:59
Всем привет!
Сделал скрипт, который при добавлении цикла repeat...until почему-то перестает обновляться. Если этот цикл убрать, то обновление идет без проблем... Почему бы так?
Заранее спасибо!
Код
local stopped = false
function OnStop()
stopped = true
return 2000
end
function main()
local Table = AllocTable()
AddColumn(Table, 1,"Data", true, QTABLE_DOUBLE_TYPE, 18)
CreateWindow(Table)
SetWindowCaption(Table, "Data table")
SetWindowPos(Table, 0, 10, 380, 80)
InsertRow(Table, -1)
while stopped == false do
Quotes_1 = getQuoteLevel2("SPBFUT", "SRU0")
Bid_Count_1 = tonumber(Quotes_1.bid_count)
if Bid_Count_1>1 then
aa= tonumber(Quotes_1.bid[Bid_Count_1].quantity)
SetCell(Table, 1, 1, tostring(aa))
end
local asset = getFuturesHolding("SPBFUT", "SPBFUT****","SRU0",0).totalnet
repeat
if aa>1 and asset>0 then
local ID_B_Order=10
local OrderSell = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= "SPBFUT****",
["OPERATION"] = "S",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = "SRU0",
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID_B_Order),
["TYPE"] = "M",
}
local Err_Order = sendTransaction(OrderSell)
message(Err_Order)
end
asset=asset-1
sleep(1000)
until asset==0
--return
sleep(3000)
end
end
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
У меня были случаи когда возвращался nil, но после замены названия переменной все работало как надо.
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
Пользователь
Сообщений: Регистрация: 10.07.2020
15.07.2020 19:05:18
Sergey Gorokhov, вы не могли по возможности глянуть мой вопрос от 14.07.2020 в 10:37? Заранее спасибо!
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
Пользователь
Сообщений: Регистрация: 10.07.2020
14.07.2020 20:29:53
Игорь Б, не кажется, что через портфель код короче будет
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
Пользователь
Сообщений: Регистрация: 10.07.2020
14.07.2020 13:58:11
Игорь Б,, я и этом вариант пробовал - то же самое.
Мне кажется, что getFuturesHolding не лучший вариант для таких скриптов. Насколько я понял из документации, есть еще функции для определения текущих позиций, но пока не получилось с ними разобраться - у меня опыт с луа 10 дней )
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
Пользователь
Сообщений: Регистрация: 10.07.2020
14.07.2020 12:41:37
Игорь Б, не помогает - все без изменений: вторая заявка уходит только после перезапуска скрипта...
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
Пользователь
Сообщений: Регистрация: 10.07.2020
14.07.2020 10:37:37
Всем привет!
Стоит задача: после покупки лукойла в количестве 1 штуки (появление его в портфеле) необходимо купить 1 сбер.
В текущем варианте кода лукойл покупается сразу, а сбер только после остановки скрипта и его повторного запуска.
Видимо необходим перезапуск getFuturesHolding; я его пробовал вставить внутрь цикла со сбером ,но эффекта нет...
Как мне следует поступить?
Заранее спасибо!
Код
function main()
while stopped == false do
local portfolio = getFuturesHolding("SPBFUT", "SPBFUT***","LKU0",0).totalnet
if portfolio==0 then
--заявка на покупку LKU0
elseif portfolio==1 then
--заявка на покупку SRU0
end
sleep(1000)
end
en
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
Код доработал, и все заработало. Не поможете еще с одним вопросом? Я задал условие, что покупка возможна тогда когда количество бумаг в портфеле равно 0 Выражение if portfolio=0 системе не понравилось, и когда я заменил на if portfolio=="0", то ошибка исчезла, но код не работает В чем может быть проблема?
Заранее спасибо!
Код
local stopped = false -- переменная управляющая основным циклом скрипта если значение false цикл работает, если true цикл останавливается и выполнение скрипта заканчивается.
function OnStop() -- функция обратного вызова OnStop() вызывается терминалом QUIK в случае нажатия кнопки "Остановить" в окне "Доступные скрипты"
stopped = true -- изменение значения переменной stopped на true, для остановки основного цикла скрипта
return 2000
end
function main()
while stopped == false do
local portfolio = getFuturesHolding("SPBFUT", "SPBFUT***","LKU0",0).totalnet
if portfolio=="0" then
local ID_B_Order=10
local OrderSell = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= "SPBFUT***",
["OPERATION"] = "B",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = "LKU0",
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID_B_Order),
["TYPE"] = "M",
}
message(Err_Order)
local Err_Order = sendTransaction(OrderSell)
while Status_B_Order == nil and Err_Order == "" do
sleep(10)
end
ID_B_Order = ID_B_Order + 1
end
sleep(1000)
end
end
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
Пользователь
Сообщений: Регистрация: 10.07.2020
13.07.2020 12:08:53
Всем привет!
Учусь кодить заявки на покупку/продажу и сделал такой код
Код
local stopped = false -- переменная управляющая основным циклом скрипта если значение false цикл работает, если true цикл останавливается и выполнение скрипта заканчивается.
function OnStop() -- функция обратного вызова OnStop() вызывается терминалом QUIK в случае нажатия кнопки "Остановить" в окне "Доступные скрипты"
stopped = true -- изменение значения переменной stopped на true, для остановки основного цикла скрипта
return 2000
end
function main()
while stopped == false do
local ID_B_Order
local OrderSell = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= "SPBFUT*****",
["OPERATION"] = "B",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = "LKU0",
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID_B_Order),
["TYPE"] = "M",
}
message(Err_Order)
local Err_Order = sendTransaction(OrderSell)
while Status_B_Order == nil and Err_Order == "" do
sleep(10)
end
end
end
При запуске Квик не реагирует вообще. Может быть что-то не дописал или в Квике должна быть открыта какая-нибудь таблица?
Спасибо за подсказку )
Рваный график на дневках IMOEX, Некорректное отображение цен
Пользователь
Сообщений: Регистрация: 10.07.2020
12.07.2020 16:18:08
Всем привет!
На моем Quil Junior почему-то отображается рваный график ММВБ, более того, даже свечу за субботний день нарисовал, хотя торгов не было. На скриншоте "дефектные" свечи обведены красным. Может что-то в настройках неверно?
Запуск и остановка скрипта в заданное время, Код запуска в Lua в необходимое время
Запуск и остановка скрипта в заданное время, Код запуска в Lua в необходимое время
Пользователь
Сообщений: Регистрация: 10.07.2020
11.07.2020 15:33:41
Всем привет!
Допустим, что у меня есть скрипт в виде:
Код
function main()
--какой-то код
sleep(1000)
End
Какой код нужно добавить, что функция запускалась каждый день в 14:00:00 и останавливалась в 15:00:00?
Заранее спасибо!
Что я делаю неправильно с циклами while...do или repeat...until?, Неправильное срабатывание цикла в скрипте
Пользователь
Сообщений: Регистрация: 10.07.2020
10.07.2020 23:04:23
Sergey Gorokhov, я правильно понимаю, что скрипт должен быть таким?
Код
repeat
local asset = getFuturesHolding("SPBFUT", "SPBFUTJRkUv","LKU0",0).totalnet
local Err_Order = sendTransaction(LimitOrderSell)
until asset = asset-1
Что я делаю неправильно с циклами while...do или repeat...until?, Неправильное срабатывание цикла в скрипте
Пользователь
Сообщений: Регистрация: 10.07.2020
10.07.2020 22:39:24
Всем привет!
Не могу найти ошибку в применении цикла.
Задача: есть в портфеле 3 фьючерса в лонге. Скрипт должен их продавать по 1 штуке пока в портфеле не будет 0
Я сделал такой скрипт:
--определяем текущее количество фьючей в портфеле в лонге
local asset = getFuturesHolding("SPBFUT", "SPBFUT*****","LKU0",0).totalnet
--задаем условия\количество продажи
repeat
local Order = sendTransaction(MarketOrderSell)
until asset = 0
При выполнении скрипт обрушивает многотысячный поток заявок на продажу...