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

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

Страницы: 1
Проверка на nil
 
Цитата
nikolz написал:
Код
   local  x =  0 ;
 local  t =  getFuturesLimit (FIRM, ACCOUNT,  0 ,  "SUR" );
 if  t  then  x = t.cbplplanned  end    
Спасибо, уже сделал :-)
Проверка на nil
 
Цитата
BlaZed написал:
Цитата
Евгений написал:

Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта..  
Сразу бы это сказали...
Цитата
Евгений написал:
Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.
Вероятно при первой проверке getFuturesLimit вернул таблицу, а при второй у брокера что-нибудь глюкнуло, и getFuturesLimit вернул nil
Надо было закинуть результат getFuturesLimit в переменную и ее уже проверять
Спасибо, так и сделаю
Проверка на nil
 
Цитата
TGB написал:
Цитата
Евгений написал:
Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта.
   Следующий раз, пожалуйста, начинайте с нюансов и указывайте версию QUIK, а также версию QLua. А то вы мозги форуму чуть не свихнули :: .
Сорри, не подумал.
Версия Quik 8.8.4.3
Lua 5.3
Проверка на nil
 
Цитата
BlaZed написал:
Покажите чему равно
Код
  type( getFuturesLimit (FIRM, ACCOUNT,  0 ,  "SUR" ))  
table.

Еще ньанс: Данная ошибка выскочила всего 1 раз за год бесперебойной работы скрипта. Хотелось бы узнать причину или как побороть данную ошибку, чтобы срипт не вылетал с ошибкой.  
Проверка на nil
 
Цитата
TGB написал:
Цитата
Евгений написал:
Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
   Если функция, в которой это происходит небольшая, то выложите ее текст. Трудно определять птицу по заднему оперению ::
Нет никакой функции. Это происходит в main:

function main()
  while IsRun do
     sleep(1000)
     for q = 1, 1 do
        if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR")==nil then
            break
        end

        if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
           break
        end
     end
  end
end
Проверка на nil
 
Цитата
TGB написал:
Цитата
Евгений написал:
Подскажите выскочила ошибка: "attempt to index a nil value" на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"Вроде как раз на nil проверяю.  
  У вас getFuturesLimit(FIRM, ACCOUNT, 0, "SUR") равно nil, а его индексировать нельзя.
if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR")==nil then
   break
end

if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
   break
end

Ругается на строчку if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then
Проверка на nil
 
Здравствуйте!
Подскажите выскочила ошибка: "attempt to index a nil value"
на строчку: "if getFuturesLimit(FIRM, ACCOUNT, 0, "SUR").cbplplanned==nil then"

Вроде как раз на nil проверяю.  
Неправильные месячные данные CreateDataSource по RTSI
 
Здравствуйте! При запуске скрипта:
Код
Instrument = "RTSI"    -- Инструмент
ClassCode = "RTSIDX" -- Код класса инструмента
IsRun = true  
function main()
   while IsRun do
      sleep(1000)
      for onlyForBr eak = 1, 1 do
         dA, error = CreateDataSource(ClassCode, Instrument, INTERVAL_MN1)   
         if dA==nil or dA:Size()<5 then 
            break
         end
         A_Size = dA:Size()
         message("A_Size = "..A_Size)
         for i = 1, A_Size do
            dataA = dA:T(i).year.."."..dA:T(i).month
            message("dataA = "..dataA)
         end
         IsRun = false
      end --for onlyForBr eak = 1, 1 do

   end --while
   dA:Close()
end    --main
Выдает A_Size = 391, т.е. 391 месячных свечей.
Если с графика сохранить данные в файл, то 292 месячных свечей.

Если посмотреть системные сообщения, то почему после июня 2010 идет май 2005?

Еще одна особенность SetTableNotificationCallback
 
Цитата
Anton написал:
Черт, отправилось раньше времени. У вас поток квика никогда ничего в таблицу не запишет, пока цикл while не закончится, а он не закончится, потому что пока вы из колбека не вернетесь, квик ничего в таблицах менять не будет.
Спасибо :-)
Значит это относиться ко всем колбекам.
Еще одна особенность SetTableNotificationCallback
 
Зависает Quik при обработке событий в таблице, если прямо в функции сделать цикл на проверку изменения заявки.

Порядок действий. Запускаем скрипт - открывается окно.
Двойной щелчок левой мыши по 1-й строчке таблицы - выставляется заявка
Еще двойной левой мыши - должна сняться заявка, но квик виснет из-за цикла проверки заявки в функции KillOrder()
Код
Account       = "7618xxx"       -- Код счета
CLASS_CODE    = "SPBFUT"      -- Код класса
SEC_CODE      = "VBZ9"        -- Код инструмента

trans_id = os.time()     -- Текущие дата и время в секундах хорошо подходят для уникальных номеров транзакций

IsRun = true 
firstRun = 0   -- флаг первого запуска
flag = 0

function main()
   while IsRun do
      
      if firstRun==0 then
         priceMin = getParamEx(CLASS_CODE, SEC_CODE, "PRICEMIN").param_value+0         -- Цена выставления заявки
         CreateTable()
         firstRun=1
      end
      SetTableNotificationCallback(t_id, Touch) --ждем двойного щелчка мыши, чтобы выставить заявку или удалить
   end
end

function KillOrderS()
   local N = getNumberOf("orders")-1
   for i = N, 0 , -1 do
      order = getItem("orders", i)
      if order.account==Account and order.balance>0 and order.sec_code==SEC_CODE  and order.flags==25 then
         trans_id = os.time()
         local tkill = {
            ["CLASSCODE"]=CLASS_CODE,
            ["SECCODE"]=SEC_CODE,
            ["ACTION"]="KILL_ORDER",
            ["ACCOUNT"]=Account,
            ["TRANS_ID"]=tostring(trans_id),
            ["ORDER_KEY"]=tostring(order.order_num)
           }
         local res=sendTransaction(tkill)
         if res ~= '' then message('KillOrderS(): Ошибка отправки транзакции: '..res) else message('KillOrderS(): Транзакция отправлена') end
         sleep(5000)
         while getItem("orders", i).flags==25 do 
            message("flags = "..getItem("orders", i).flags)
            sleep(1000) 
         end
      end
   end
end

function Touch(t_id, msg, par1, par2)
   if msg==QTABLE_LBUTTONDBLCLK and par1==1 then
      local On Off = "Off"
      if flag==0 then
         flag = 1
         On Off = "On"
         SetColor(t_id, 1, 1, RGB(0,255,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0));
         TransOpenPos() 
      else
         flag = 0
         SetColor(t_id, 1, 1, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR, QTABLE_DEFAULT_COLOR);
         KillOrderS()
      end
      SetCell(t_id, par1, par2, OnOff)
   end
end


function CreateTable()
   t_id = AllocTable();      -- Получает доступный id для создания
   AddColumn(t_id, 1, "ХЗ", true, QTABLE_CACHED_STRING_TYPE, 7);
   t = CreateWindow(t_id);    -- Создаем
   SetWindowCaption(t_id, "ХЗ");    -- Даем заголовок
   SetWindowPos(t_id, 0, 0, 100, 100)  -- Положение окна
   InsertRow(t_id, -1);  -- добавляем countLineFileSave строк
   SetCell(t_id, 1, 1, tostring(flag))
end


function TransOpenPos()
   trans_id = os.time() 
  local Transaction={
    ['TRANS_ID']  = tostring(trans_id),   -- Номер транзакции
    ['ACCOUNT']   = Account,              -- Код счета
    ['CLASSCODE'] = CLASS_CODE,           -- Код класса
    ['SECCODE']   = SEC_CODE,             -- Код инструмента
    ['ACTION']    = 'NEW_ORDER',          -- Тип транзакции ('NEW_ORDER' - новая заявка)
    ['OPERATION'] = 'B',                  -- Операция ('B' - buy, или 'S' - sell)
    ['TYPE']      = 'L',                  -- Тип ('L' - лимитированная, 'M' - рыночная)
    ['QUANTITY']  = '1',                  -- Количество
    ['PRICE']     = tostring(priceMin)   -- Цена
  }
  -- Отправляет транзакцию
  local Res = sendTransaction(Transaction)
  if Res ~= '' then message('TransOpenPos(): Ошибка отправки транзакции: '..Res) else message('TransOpenPos(): Транзакция отправлена') end
end

Обучаю программированию на QLua. С "0" до мульти-таймфреймового, много-параметрического робота.
 
Вот что значит неправильно расставить акценты :-)

Надо было так: "Обучаю программированию с "0" до мульти-таймфреймового, много-параметрического робота на языке QLua".

Главное мульти-тайфреймовость и много-параметричность.

Позволял бы квик без костылей подключать роботов на паскале или C#, не нужен был бы Lua.
Обучаю программированию на QLua. С "0" до мульти-таймфреймового, много-параметрического робота.
 
Цитата
Andrey.R написал:
Здравствуйте, поясните пожалуйста чему именно вы обучаете? Программированию? Или роботу, тогда в какой программе? А то 2 года назад вы на этом форуме спрашивали как посмотреть атрибуты файла
Цитата
05.08.2016 17:05:44 Здравствуйте!

Есть текстовый файл f = "C:\\TEST\\qwer.csv"

Подскажите, как получить атрибуты файла?
Евгений

                                  Пользователь                                            
Сообщений:  11   Регистрация: 18.05.2015
Какие у вас цены?
Здравствуйте! Обучаю программировать на QLua  и создавать мульти-таймфреймового, много-параметрического робота.

По ценам обратитесь на почту qlua@bk.ru.

2 года назад я переходил с Qpile на QLua.
Обучаю программированию на QLua. С "0" до мульти-таймфреймового, много-параметрического робота.
 
Обучаю (индивидуально) программированию на QLua.

С "0" до мульти-таймфреймового, много-параметрического робота.

qlua@bk.ru
Какие потоки нужно закрывать?
 
Здравствуйте!

Столкнулся с проблемой: Если оставлять на ночь работающий Quik, то при остановке скрипта зависает Quik.
Если приложение убить через диспетчер задач, то процесс info.exe все равно висит и его тоже нужно убивать.
Если запускать и отключать скрипт в тот же день проблем не возникает.
Долго читал данный форум, пришел к выводу что необходимо закрывать все потоки перед выходом из main().
Какие потоки нужно закрывать кроме ds:Close() ?
Функция OnStop()
 
Цитата
s_mike@rambler.ru написал:
Нет разницы.
Спасибо
Функция OnStop()
 
Здравствуйте!

Подскажите, есть ли разница, где размещать функцию OnStop():
1) Перед main
2) После main
Как получить аттрибуты файла?
 
Цитата
s_mike@rambler.ru написал:
lua file system
Спасибо :-)
Как получить аттрибуты файла?
 
Здравствуйте!

Есть текстовый файл f = "C:\\TEST\\qwer.csv"

Подскажите, как получить атрибуты файла?
При переконнекте не могу побороть ошибку
 
if t[0].doesExist==0 then тоже не помогает.

Решение проблемы:
xz=getNumCandles(INDRI)
if xz==0 then ....
При переконнекте не могу побороть ошибку
 
Недавно перешел с Qpile на LUA.
Иногда при переконнекте выскакивает ошибка в строчке:
if t[0].datetime.hour == nil or t[0].datetime.min == nil then

Строчка из этого блока:
Скрытый текст

Подскажите, что я делаю не так?
Выставление лимитированной заявки с датой экспирации, Выставление лимитированной заявки с датой экспирации
 
Сергей, спасибо БОЛЬШОЕ!!!
Все работает. Все должно быть по кириллицей, кроме:  
TRANS_ID
ACTION
CLASSCODE

           TRANS_PARAMS = ""
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID", TIME&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "Ввод заявки")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", "SPBFUT")
           TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Инструмент", INSTRUMENT)
     TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Торговый счет", ACCOUNT)
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Тип", "Лимитированная")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "К/П", "Покупка")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Цена", FPRICE&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Количество", FLOTS&"")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Условие исполнения", "Поставить в очередь")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Переносить заявку", "Да")
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "Дата экспирации", "20150529")
TRANS_RESULT = SEND_TRANSACTION (30, TRANS_PARAMS)
RESULT=GET_VALUE(TRANS_RESULT, "DESCRIPTION")
Выставление лимитированной заявки с датой экспирации, Выставление лимитированной заявки с датой экспирации
 
Спасибо, но как я понял только в Lua можно переносить фортсовые лимитированные заявки, а на QPILE нельзя
http://forum-archive.quik.ru/forum/qpile/54448/
Выставление лимитированной заявки с датой экспирации, Выставление лимитированной заявки с датой экспирации
 
Добрый день. Подскажите, можно ли с помощью Qpile выставить лимитированную заявку в стакан с переносом через клиринг?

В стоп заявке эта строчка работает, а в обычной заявке не хочет:
TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "EXPIRE_DATE", "20150529")  
Страницы: 1
Наверх