Я определения текущего количества фьючерсов в портфеле я использую функцию 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, скрипт отключается и его нужно включать вручную.
Можно добавить какой-нибудь код, чтобы этого отключения не было?
К примеру есть некий скрипт, который отправляет заявку при срабатывании условия 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
Сегодня почему-то на 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 почему-то перестает обновляться. Если этот цикл убрать, то обновление идет без проблем... Почему бы так?
Заранее спасибо!
Код
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
Стоит задача: после покупки лукойла в количестве 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
Учусь кодить заявки на покупку/продажу и сделал такой код
Код
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
При запуске Квик не реагирует вообще. Может быть что-то не дописал или в Квике должна быть открыта какая-нибудь таблица?
На моем Quil Junior почему-то отображается рваный график ММВБ, более того, даже свечу за субботний день нарисовал, хотя торгов не было. На скриншоте "дефектные" свечи обведены красным. Может что-то в настройках неверно?