Николай Бехтерев (Все сообщения пользователя)

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

Страницы: Пред. 1 2 3
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Буду рад, если есть поделитесь справочником (с описанием всех функций)  к Lua на русском :)
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Код работает, но при выключении скрипта Quik подвисает. Честно говоря, многое не понимаю в этом коде.
START_TIME объявлена, как строковая переменная, но в строке:
Код
START_TIME=FixTime(START_TIME)
ей даётся значение из функции FixTime(), которая возвращает таблицу Out !!!
сравнение:
Код
os.time()<os.time(START_TIME)

тоже не понимаю, получается сравнивается таблица START_TIME и число от функции os.time() т.к. эта функция, если не передавать ей таблицу возвращает число!  
В общем больше вопросов, чем ответов  :) )

Ну зато подарили идею. Я воспользуюсь конструкцией: Out.hour,Out.min, чтобы получить из них число вида XXYY и уже сравнивать с временем, которое тоже нужно будет переводить в вид числа XXYY
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Как исполнить такую проверку?
Или, наоборот, торговать в первую секунду (минуту, в зависимости от выбранного фрейма) из Квика нет никакой возможности, как сделать выгоднее выставить условие на проверку времени?

Дело в том, что очень много параметров в help'e несут как бы время, но они разные, какие-то из них строковые, а есть вообще таблица!
От такого разбега я легка растерялся.
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Sergey Gorokhov пишет:
Цитата
Николай Бехтерев пишет:
Вводить третью промежуточную таблицу?

Смотря чего Вы хотите добиться.
Сейчас, в событии OnTransReply, Вы присваиваете значение table_order из переменной order, которая не существует.
То что она есть в событии OnTrade не значит что ее можно использовать где попало.
Спасибо, эта функция OnTransReply в скрипте просто следствие моей невнимательности
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Sergey Gorokhov пишет:
Цитата
Николай Бехтерев пишет:
Когда это table_order превращается в nil?
Вот здесь
Код
 function OnTransReply()
   table_order = order
end
 
Вводить третью промежуточную таблицу?
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Sergey Gorokhov пишет:
Цитата
Николай Бехтерев пишет:
Ох, а у вас там разный регистр для каждой позиции получается или можно всё мелкими буквами оформить?
Вы неверно поняли рекомендацию.
Вам НЕ нужно все писать маленькими буквами.
Вам нужно писать все именно так как в документации и никак иначе.
Код
stop = 100
table_order = {   
      ["order_num "] = 0,
      ["class_code"] = "",
      ["account"] = "",
      ["sec_code"] = "",
      ["qty"] = "",
      ["price"] = 0,
      ["flags"] = 0,
            }
GUN = 0
FIRE = 0
transaction = {   
            ["TRANS_ID"] = "",
            ["CLASSCODE"] = "", 
            ["ACTION"] = "",
            ["ACCOUNT"] = "",
            ["SECCODE"] = "",
            ["QUANTITY"] = "",
            ["OPERATION"] = "",
            ["STOPPRICE"] = "",
            ["PRICE"] = "",
            }

zed_is_dead = 100
is_run = 1
ID = 1
table_order.flags = 1

function OnTrade(order)
   table_order = order
end

function OnTransReply()
   table_order = order
end

function OnStop()
   is_run = 0
end

function main()
   while is_run do
   
   if zed_is_dead ~= table_order.order_num then
         zed_is_dead = table_order.order_num
         transaction.TRANS_ID = tostring(ID)
         transaction.CLASSCODE = table_order.class_code
         transaction.ACTION = "NEW_STOP_ORDER"
         transaction.ACCOUNT = table_order.account
         transaction.SECCODE = table_order.sec_code 
         transaction.QUANTITY = tostring(table_order.qty)
         ID = ID + 1
         a = tostring(table_order.flags)
         message(a,3)
            if bit.band(table_order.flags,4) > 0 then
               transaction.OPERATION = "B"
               GUN = table_order.price + stop
               FIRE = table_order.price + stop + stop
               transaction.STOPPRICE = tostring(GUN)
               transaction.PRICE = tostring(FIRE)
               --a = tostring(table_order.flags)
               else
               GUN = table_order.price - stop
               FIRE = table_order.price - stop - stop
               transaction.OPERATION = "S"
               transaction.STOPPRICE = tostring(GUN)
               transaction.PRICE = tostring(FIRE)
            end
                  transaction.TYPE = "M"
         transaction.STOP_ORDER_KIND = "SIMPLE_STOP_ORDER"
         transaction.EXPIRY_DATE = "GTC"
      sendTransaction(transaction)
      --message(a,3)
      end
   sleep(1000)
   end
end
 
Слепил такой вот код на выставление стопов после сделки.
На первый раз пролетает нормально, выставляет стоп. На второй круг вылазит ошибка:
45: attempt to index global 'table_order' (a nil value)
45 строка: if zed_is_dead ~= table_order.order_num then
Когда это table_order превращается в nil?
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Sergey Gorokhov пишет:
Николай Бехтерев ,
Нет, параметры все таки лучше задать, так как если колбека не будет то опять будет ошибка.
Только задать правильно, то есть маленькими буквами
Ох, а у вас там разный регистр для каждой позиции получается или можно всё мелкими буквами оформить?
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Sergey Gorokhov пишет:
Николай Бехтерев ,
Это уже другая история.
Во первых PRICE неправильно писать.
Так как Lua регистрозависимый язык. Нужно писать маленькими буквами.

Во вторых, как было сказано работать будет только при новых сделках. То есть если сделки были ДО запуска скрипта, то скрипт их не увидит.
Если хотите чтобы отображался номер последней сделки, нужно использовать getItem
Да мне не только номер нужен, просто на номере я решил проверить получил ли я таблицу.
При запущенyом скрипте и table_order.price получил всё тот же nill пока не убрал в определении ["PRICE"] = 0. Выходит определять таблицу в топике не надо было?
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Sergey Gorokhov пишет:
Николай Бехтерев ,
У Вас для этого уже все написано.
Все что нужно удалить строку и все.
Далее, согласно коду при появлении новой сделки Вы получите сообщение
Да, ошибка ушла, но пишет после сделки nil :(
Ошибка при попытке получить значение из таблицы OnTrade()
 
Цитата
Sergey Gorokhov пишет:
Здравствуйте,
это некорректная запись
Код
 table_order = OnTrade() 


уберите эту строку
А как мне получить таблицу из OnTrade() корректно?
Ошибка при попытке получить значение из таблицы OnTrade()
 
Такой вот просто код:

Код
table_order = { ["CLASSCODE"]="",
      ["ACTION"]="",
      ["ACCOUNT"]="",
      ["OPERATION"] = "",
      ["SECCODE"] = "",
      ["PRICE"] = 0,
      ["QUANTITY"] = ""
   }
function OnTrade(order)
   table_order = order
end

function OnStop()
   is_run = 0
end

function main()
   while is_run do
   table_order = OnTrade()
   message(tostring(table_order.PRICE),3)
   sleep(1000)
   end
end
вылазит: trans3.lua:28: attempt to index global 'table_order' (a nil value).
откуда nil? сделки в системе уже были...
Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?
 
Цитата
Руслан Руслан пишет:
bit.band
Код
if bit.band(order["flags"],4)>0 
then 
 
Не сразу понял эту штуку, пока не включил калькулятор и не увидел, как выглядит в двоичной системе цифра 4!
Зачем было вводить эти биты, какая-то экономия на памяти?)))
Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?
 
В моей справочной литературе по LUA про битовые флаги ничего нет, в примерах мудрёно как-то, а в хелпе слишком скудная информация!
допустим имеем:
Код
function OnTrade(order)
   table_order = order
end
как выяснить направление сделки?
Видимо я что-то не так понимаю в общем шаблоне программы и коллбек-функциями, Скрипт вешает Quik а почему не понятно.
 
Цитата
s_mike@rambler.ru пишет:
в цикл нужно вставить какую-нибудь задержку типа

sleep(1000)

Иначе вы съедате весь процессор (ядро)
Спасибо, всё заработало!
Видимо я что-то не так понимаю в общем шаблоне программы и коллбек-функциями, Скрипт вешает Quik а почему не понятно.
 
Код
table_order = {}
zed_is_dead = ""
is_run = 1

function OnTrade(order)
   table_order = order
end

function OnStop()
   is_run = 0
end

function main()
   while is_run do
      zed_is_dead = tostring(table_order.trade_num) 
          message(zed_is_dead,1) 
   end 
end
Что не так с этим скриптом?
если убрать 15 и 16 строчки:
Код
zed_is_dead = tostring(table_order.trade_num) 
message(zed_is_dead,1)
то скрипт работает и вешает Quik только уже при нажатии кнопки "стоп".
Что я делаю не так, и не так понимаю?
Не срабатывает пример graph.lua: Total 0 candles 0 lines
 
Цитата
Дмитрий пишет:
Цитата
Николай Бехтерев пишет:
Я решил, что идентификатор это наименование в свойствах графика, это единственный параметр, который подходил
Вы имеете в виду Настройки графика / Общие / Подпись? Тогда это неправильно.
"ZZZ" нужно писать в поле Идентификатор на закладке "Дополнительно"
то что нужно. спасибо!
Не срабатывает пример graph.lua: Total 0 candles 0 lines
 
Цитата
Дмитрий пишет:
И что значит "переименовал"? Что именно делали?
ну был у меня график: цена, объём, ОИ, естественно, что нет ничего по имени zzz. Я решил, что идентификатор это наименование в свойствах графика, это единственный параметр, который подходил, я и стал всё подряд в zzz переименовывать.
Не срабатывает пример graph.lua: Total 0 candles 0 lines
 
Переименовал всё что только можно в окне с графиком цены, ОИ, ATR, объём в "zzz" как прописано в файле.
всё равно выдаёт: Total 0 candles 0 lines
И ничего больше.
Страницы: Пред. 1 2 3
Наверх