Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Пользователь
Сообщений: Регистрация: 24.02.2015
11.03.2015 01:05:16
Буду рад, если есть поделитесь справочником (с описанием всех функций) к Lua на русском :)
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Пользователь
Сообщений: Регистрация: 24.02.2015
11.03.2015 01:04:10
Код работает, но при выключении скрипта 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
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
Пользователь
Сообщений: Регистрация: 24.02.2015
06.03.2015 01:28:32
Как исполнить такую проверку? Или, наоборот, торговать в первую секунду (минуту, в зависимости от выбранного фрейма) из Квика нет никакой возможности, как сделать выгоднее выставить условие на проверку времени?
Дело в том, что очень много параметров в help'e несут как бы время, но они разные, какие-то из них строковые, а есть вообще таблица! От такого разбега я легка растерялся.
Ошибка при попытке получить значение из таблицы OnTrade()
Николай Бехтерев пишет: Вводить третью промежуточную таблицу?
Смотря чего Вы хотите добиться. Сейчас, в событии OnTransReply, Вы присваиваете значение table_order из переменной order, которая не существует. То что она есть в событии OnTrade не значит что ее можно использовать где попало.
Спасибо, эта функция OnTransReply в скрипте просто следствие моей невнимательности
Ошибка при попытке получить значение из таблицы OnTrade()
Николай Бехтерев пишет: Ох, а у вас там разный регистр для каждой позиции получается или можно всё мелкими буквами оформить?
Вы неверно поняли рекомендацию. Вам НЕ нужно все писать маленькими буквами. Вам нужно писать все именно так как в документации и никак иначе.
Код
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()
Пользователь
Сообщений: Регистрация: 24.02.2015
02.03.2015 22:59:51
Цитата
Sergey Gorokhov пишет: Николай Бехтерев , Нет, параметры все таки лучше задать, так как если колбека не будет то опять будет ошибка. Только задать правильно, то есть маленькими буквами
Ох, а у вас там разный регистр для каждой позиции получается или можно всё мелкими буквами оформить?
Ошибка при попытке получить значение из таблицы OnTrade()
Пользователь
Сообщений: Регистрация: 24.02.2015
02.03.2015 22:36:04
Цитата
Sergey Gorokhov пишет: Николай Бехтерев , Это уже другая история. Во первых PRICE неправильно писать. Так как Lua регистрозависимый язык. Нужно писать маленькими буквами.
Во вторых, как было сказано работать будет только при новых сделках. То есть если сделки были ДО запуска скрипта, то скрипт их не увидит. Если хотите чтобы отображался номер последней сделки, нужно использовать getItem
Да мне не только номер нужен, просто на номере я решил проверить получил ли я таблицу. При запущенyом скрипте и table_order.price получил всё тот же nill пока не убрал в определении ["PRICE"] = 0. Выходит определять таблицу в топике не надо было?
Ошибка при попытке получить значение из таблицы OnTrade()
Пользователь
Сообщений: Регистрация: 24.02.2015
02.03.2015 22:24:01
Цитата
Sergey Gorokhov пишет: Николай Бехтерев , У Вас для этого уже все написано. Все что нужно удалить строку и все. Далее, согласно коду при появлении новой сделки Вы получите сообщение
Да, ошибка ушла, но пишет после сделки nil :(
Ошибка при попытке получить значение из таблицы OnTrade()
Пользователь
Сообщений: Регистрация: 24.02.2015
02.03.2015 22:17:13
Цитата
Sergey Gorokhov пишет: Здравствуйте, это некорректная запись
Код
table_order = OnTrade()
уберите эту строку
А как мне получить таблицу из OnTrade() корректно?
Ошибка при попытке получить значение из таблицы OnTrade()
Пользователь
Сообщений: Регистрация: 24.02.2015
02.03.2015 21:59:06
Такой вот просто код:
Код
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( )?
Не сразу понял эту штуку, пока не включил калькулятор и не увидел, как выглядит в двоичной системе цифра 4! Зачем было вводить эти биты, какая-то экономия на памяти?)))
Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?
Пользователь
Сообщений: Регистрация: 24.02.2015
28.02.2015 20:36:15
В моей справочной литературе по LUA про битовые флаги ничего нет, в примерах мудрёно как-то, а в хелпе слишком скудная информация! допустим имеем:
Код
function OnTrade(order)
table_order = order
end
как выяснить направление сделки?
Видимо я что-то не так понимаю в общем шаблоне программы и коллбек-функциями, Скрипт вешает Quik а почему не понятно.
Пользователь
Сообщений: Регистрация: 24.02.2015
27.02.2015 22:55:16
Цитата
s_mike@rambler.ru пишет: в цикл нужно вставить какую-нибудь задержку типа
sleep(1000)
Иначе вы съедате весь процессор (ядро)
Спасибо, всё заработало!
Видимо я что-то не так понимаю в общем шаблоне программы и коллбек-функциями, Скрипт вешает Quik а почему не понятно.
Пользователь
Сообщений: Регистрация: 24.02.2015
27.02.2015 22:07:23
Код
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 строчки:
Николай Бехтерев пишет: Я решил, что идентификатор это наименование в свойствах графика, это единственный параметр, который подходил
Вы имеете в виду Настройки графика / Общие / Подпись? Тогда это неправильно. "ZZZ" нужно писать в поле Идентификатор на закладке "Дополнительно"
то что нужно. спасибо!
Не срабатывает пример graph.lua: Total 0 candles 0 lines
Пользователь
Сообщений: Регистрация: 24.02.2015
25.02.2015 02:05:54
Цитата
Дмитрий пишет: И что значит "переименовал"? Что именно делали?
ну был у меня график: цена, объём, ОИ, естественно, что нет ничего по имени zzz. Я решил, что идентификатор это наименование в свойствах графика, это единственный параметр, который подходил, я и стал всё подряд в zzz переименовывать.
Не срабатывает пример graph.lua: Total 0 candles 0 lines
Пользователь
Сообщений: Регистрация: 24.02.2015
24.02.2015 21:45:13
Переименовал всё что только можно в окне с графиком цены, ОИ, ATR, объём в "zzz" как прописано в файле. всё равно выдаёт: Total 0 candles 0 lines И ничего больше.