Leonid (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
getFuturesHolding - возврат Nil если не было сделок?
 
Sergey Gorokhov, тогда понятно. А сколько по времени хранится эта запись на бирже, то есть, через какое время трансляция прекращается?
getFuturesHolding - возврат Nil если не было сделок?
 
Sergey Gorokhov, я в курсе. Но почему она появляется только после сделки?  
getFuturesHolding - возврат Nil если не было сделок?
 
Здравствуйте.

Я определения текущего количества фьючерсов в портфеле я использую функцию getFuturesHolding.
Обратил внимание, что если по тикеру ранее не было сделок, то функция возвращает Nil, а не 0 как я предполагал.
Если сделки ранее были, то количество бумаг отображается корректно.

Можно ли как-нибудь выйти из этой ситуации?
OnTransReply - что я делаю не так?
 
Nikolay, и как можно исправить?
OnTransReply - что я делаю не так?
 
Здравствуйте,

никак не могу разобраться с этой функцией.
Есть такая молотилка, которая транзакции шлет, но 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
 
Anton, я недавно начал кодить на lua, поэтому что где может быть во всех деталях не знаю.
Поэтому и спрашиваю тут.
Отключение скрипта при получении Nil
 
Sergey Gorokhov,
Код
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
 
Попробовал, оба варианта, но  не помогает
вопрос не в том, что скрипт не работает, а в том, что он выключается и надо заново его включать нажатием play...
Код
if Quotes_1 then
  xxxx
end

if Quotes_1 ~= nil then
    xxxxx
end
Отключение скрипта при получении Nil
 
Sergey Gorokhov, так я следовал Вашей рекомендации:
лучше так:
if (xxx) then
--тут чтото делаем
end

if расценивает nil как false, а любое значение как true

Насколько я понял, в качестве ххх можно взять совершенно любую цифру.
Как правильно тогда?

Отключение скрипта при получении Nil
 
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
 
Sergey Gorokhov, пробовал уже - все равно выключается
Отключение скрипта при получении Nil
 
Sergey Gorokhov, все равно отключается даже если случайно стакан закрыть

Может не туда if-then пишу?
Код
   if xxx>1 then

      while stopped == false do

         Quotes_1 = getQuoteLevel2("TQTF", Code_1)

        end

Отключение скрипта при получении Nil
 
Sergey Gorokhov,а как это должно выглядеть на луа?

if xxx==nil then , а дальше как?
Отключение скрипта при получении Nil
 
Здравствуйте.

Есть скрипт, который берет данные из стакана котировок для дальнейшей работы.
Если из стакана пропадают котировки (например, из-за сбоя сети), то функции возвращает Nil, скрипт отключается и его нужно включать вручную.

Можно добавить какой-нибудь код, чтобы этого отключения не было?

Заранее спасибо.
Функция для получения данных из таблицы сделок
 
Здравствуйте,

какой функцией можно воспользоваться для получения данных из таблицы сделок?

Интересует, в частности, общая сумма сделок, которая бы обновлялась после каждой успешной транзакции.

Заранее спасибо.
Какую функцию нужно использовать для текущего кол-ва ETF?
 
Здравствуйте.

Какую функцию нужно использовать для получения текущего кол-ва ETF в портфеле?

Есть параметры:

- код класса: TQTF
- account: LXXXXXXX
- код клиента: 00000
- код бумаги

Заранее спасибо.
Отправка заданного количества заявок
 
Sergey Gorokhov, вроде все заработало, спасибо.
Но хотел бы уточнить - если транзакция должна уходить при срабатывании какого-либо условия, то это условие должно быть внутри цикла for?
Отправка заданного количества заявок
 
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
Отправка заданного количества заявок
 
Sergey Gorokhov, я правильно понимаю, что это должен быть цикл for, где количество итераций равно quantity? Спасибо.  
Отправка заданного количества заявок
 
Здравствуйте!

К примеру есть некий скрипт, который отправляет заявку при срабатывании условия 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
 
Старатель, а как быть тогда?
Добавлять код, который отслеживает статус выполнения заявки?
Если да, то куда добавлять?
Не обновляется таблица при добавления цикла repeat...until
 
Nikolay, это вполне рабочий код, который работает с малоликвидными бумагами, то есть сделки редкие и осуществляются при определенных условиях.
Проблема в  том, что если мне надо обнулить портфель из 10 бумаг (asset=10), то условие "until asset<=0" срабатывает отлично.
Если же мне надо продать только 3 бумаги, то "until asset<=7" начинает продавать до тех пор, пока не уйдет в шорт.
То же самое и "until asset==7".
Не обновляется таблица при добавления цикла repeat...until
 
Sergey Gorokhov,  ничто не мешает, но начинаются продажи, так как условия позволяет быть asset <5, то есть 4,3,2  и т.д.
Не обновляется таблица при добавления цикла repeat...until
 
Sergey Gorokhov,  а в чем может быть причина?
Когда нужен был 0, то Вы посоветовали   "until asset<=0", и он сработал.
Но если asset  больше 0, то такой вариант не подходит
Не обновляется таблица при добавления цикла repeat...until
 
Sergey Gorokhov, уже пробовал вариант until asset==5, но он не срабатывает - идут продажи пока лимиты не выйдут.
Не обновляется таблица при добавления цикла repeat...until
 
Sergey Gorokhov,  а как быть, если необходимо выполнить условие until asset=5?


Заранее спасибо
Не работает getFuturesHolding
 
Sergey Gorokhov, а есть демо версии квика на 32 разряда?
Я на сайте Арки увидел только версию 8.., которая на 64 только работает
Не работает getFuturesHolding
 
Sergey Gorokhov, моя версия Демо была скачана с ФК Открытие, и SPBFUT был присвоен ими.
Я просто окончания заменил на *
Не работает getFuturesHolding
 
Всем привет!

Сегодня почему-то на 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
 
Sergey Gorokhov, спасибо за подсказку - заработало как надо.

Единственное смущает то, что итоговое значение asset скачет от -1 до 0; впрочем, это не критично...
Не обновляется таблица при добавления цикла repeat...until
 
Всем привет!

Сделал скрипт, который при добавлении цикла 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
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Sergey Gorokhov,  сейчас скрипт заработал как надо...

Может быть был глюк интерпретатора?

У меня были случаи когда возвращался nil, но после замены названия переменной все работало как надо.
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
 
Sergey Gorokhov, вы не могли по возможности глянуть мой вопрос от 14.07.2020 в 10:37?
Заранее спасибо!
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Игорь Б, не кажется, что через портфель код короче будет
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Игорь Б,, я и этом вариант пробовал - то же самое.

Мне кажется, что getFuturesHolding не лучший вариант для таких скриптов.
Насколько я понял из документации, есть еще функции для определения текущих позиций, но пока не получилось с ними разобраться -  у меня опыт с луа 10 дней )
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Игорь Б, не помогает - все без изменений: вторая заявка уходит только после перезапуска скрипта...
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Всем привет!

Стоит задача: после покупки лукойла в количестве 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
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
 
Sergey Gorokhov, большое спасибо за помощь.

Честно говоря, я удивился, что getFuturesHolding возвращает STRING.
Если выполнить код ниже, то он почему-то дает NUMBER...
Код
function main()
local portfolio = getFuturesHolding("SPBFUT", "SPBFUT****","LKU0",0).totalnet

      message(type(portfolio))
end
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
 
Sergey Gorokhov, большое спасибо.

Код доработал, и все заработало.
Не поможете еще с одним вопросом?
Я задал условие, что покупка возможна тогда когда количество бумаг в портфеле равно 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
Что я делаю неправильно с формой заявки?, Не уходит заявка на покупку по маркету
 
Всем привет!

Учусь кодить заявки на покупку/продажу и сделал такой код
Код
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, Некорректное отображение цен
 
Всем привет!

На моем Quil Junior почему-то отображается рваный график ММВБ, более того, даже свечу за субботний день нарисовал, хотя торгов не было.
На скриншоте "дефектные" свечи обведены красным.
Может что-то в настройках неверно?
Запуск и остановка скрипта в заданное время, Код запуска в Lua в необходимое время
 
Андрей, большое спасибо - все работает!
Запуск и остановка скрипта в заданное время, Код запуска в Lua в необходимое время
 
Всем привет!

Допустим, что у меня есть скрипт в виде:
Код
function main()
     --какой-то код    
     sleep(1000)
End

Какой код нужно добавить, что функция запускалась каждый день в 14:00:00 и останавливалась в 15:00:00?

Заранее спасибо!
Что я делаю неправильно с циклами while...do или repeat...until?, Неправильное срабатывание цикла в скрипте
 
Sergey Gorokhov, я правильно понимаю, что скрипт должен быть таким?
Код
repeat
   local asset = getFuturesHolding("SPBFUT", "SPBFUTJRkUv","LKU0",0).totalnet
   local Err_Order = sendTransaction(LimitOrderSell)
until asset = asset-1
Что я делаю неправильно с циклами while...do или repeat...until?, Неправильное срабатывание цикла в скрипте
 
Всем привет! :smile:

Не могу найти ошибку в применении цикла.

Задача: есть в портфеле 3 фьючерса в лонге.
Скрипт должен их продавать по 1 штуке пока в портфеле не будет 0

Я сделал такой скрипт:

--определяем текущее количество фьючей в портфеле в лонге

local asset = getFuturesHolding("SPBFUT", "SPBFUT*****","LKU0",0).totalnet

--задаем условия\количество  продажи

repeat

local Order = sendTransaction(MarketOrderSell)

until asset = 0

При выполнении скрипт обрушивает многотысячный поток заявок на продажу... :shock:

Что я делаю неправильно?


Заранее спасибо.
Страницы: 1
Наверх