Подскажите, как получить цену закрытия в предторговой сессии?
Имею следующий код, но
1. В предторговой сессии в переменной LAST получаю nil всегда 2. Как только начинается основная сессия, в переменную LAST получаю цену закрытия как положено
Как быть?
---Код сокращен, всё отрабатывает, значения в таблицу пишутся, в этом плане всё ок---
Код
is_run = true
tbl=QTable:new()
tbl:SetCaption('Робот')
tbl:AddColumn('LAST',QTABLE_STRING_TYPE ,20)
tbl:Show()
line_count_table={}
function OnParam (class, sec)
if class=="TQBR" or class=="TQDE" then
local LAST_T = getParamEx(class, sec, "PREVPRICE")
LAST=tonumber(toPrice(sec, LAST_T.param_value))
end
end
function main()
while is_run do
sleep (50)
end
end
Lena Po,вы уверены, что открываете по рынку, а не лимиткой по встречной цене? В терминале прям тыкаете галочку "рыночная"? Бывает на демо запрещены операции по рынку
Sergey Gorokhov, с помощью функции getNumberOf нельзя получить количество строк в созданной скриптом таблице? Сначала показалось, что работает, но видимо показалось :(
Таблица создается, выводится, заполняется (относительно работы с таблицей внешняя библиотека норм работает)
В сount всегда -1
Код
require"QL"
is_run = true
tblord=QTable:new()
tblord:SetCaption('Таблица')
tblord:AddColumn('Security_',QTABLE_STRING_TYPE,15)
tblord:AddColumn('NameStock_',QTABLE_STRING_TYPE,50)
tblord:Show()
function main()
while is_run do
line=tblord:AddLine()
rand2 = random(1,1000)
tblord:SetValue(line,'Security_', rand2 )
tblord:SetValue(line, 'NameStock_', rand2)
count = getNumberOf("tblord")
sleep(500)
end
end
Иван Ру, спасибо, я уже понял, что доп.таблицы мне не избежать, буду продумывать как это всё лучше организовать. Kill balance это снятие заявки, если выполнена частично?
Imersio Arrigo, где в main нужно организовывать очередной цикл для поддержания работы скрипта? Ну как то тоже не интересно.
Николай Камынин, да я уже понял, что квик так сделан, и уже принял неизбежность формирования таблицы необходимых мне состояний, просто всё это увеличит кол-во проверяемых условий и общую нагрузку на объем кода.
Николай Камынин, как можно организовать второй вариант? Есть какая-нибудь рекомендуемая литература? От OnParam не откажусь, не нашел альтернативы в получении специфических параметров.
Николай Камынин, в этом то самая и большая проблема, в невозможности получить ответ, пока не закончится OnParam или не подождать в OnParam, к примеру через event.timer или event.pull, могу ошибаться. Ну да ладно, что-нибудь придумаю, благо для текущего алгоритма, скорость не является приоритетной.
Николай Камынин,Да дело не в таблице состояний, это не то. Этот способ режет скорость. После отправки транзакции в OnParam есть ещё код и пока этот код не выполнится, не придет ответ от OnTransReply и OnOrder, а надо получить ответы еще при выполнении кода в OnParam.
Sergey Gorokhov,можно ли в колбэке OnParam указать код, который поставит OnParam в ожидание прихода другого события, например OnTransReply? Можно ли хоть как-то добиться асинхронности колбэков или какой-нибудь "псевтоасинхронности". на гл.странице сайта квика есть пример, где отправляется транзакция и отслеживается, но там сделано хитро, транзакция отправляется в main, там то понятно, разные потоки, main работает и параллельно приходят колбэки. А как быть если отправить в OnParam?
немного нашел информацию про event, якобы ожидает прихода события, может есть что-то подобное?
Sergey Gorokhov, какой среду разработки вы могли бы порекомендовать?
Да, я переходил по ссылке, но её уже не существует, вылетает просто на форум.
Не соглашусь в этом плане относительно decod'a, ибо я в режиме онлайн могу запросить вместо заявок - сделки и всё будет ок. и если я в режиме онлайн игнорируя эту ошибку пропишу через точку row.order_num к примеру, число выдастся, поэтому в принципе работать можно
Sergey Gorokhov,выяснил такой момент, за пятницу было 16 заявок, getItem("orders",i) отрабатывает когда заявка была исполнена, если снята, то показывает ошибку xml
is_run = true
function main()
for i=1,getNumberOf("orders") do
local row=getItem("orders",i)
local row=getItem("trades",i)
end
end
function OnStop(s)
is_run = false
message ("fr", 2)
end
Николай Камынин, если с кодировкой что-то не то, почему остальной код работает? Николая, подскажите кучочек кода, как перевести в состояние ожидания ответа по заявке?
Николай Камынин, не согласен с вами, колбэками управлять нельзя, они приходят как приходят, посмотрите мой пример выше, как разрулить эту ситуацию?
Sergey Gorokhov, Сергей, подскажите другой момент, что то не получается получить таблицу заявок, в чем может быть ошибка?
в row=getItem("orders",i) пишет - improperly formatted XML data
Код
for i=1,getNumberOf("orders") do
local row=getItem("orders",i)
if row ~= nil and row[sec_code]==sec then
local trid,ms = killOrder(row[order_num],sec,class)
if trid ~= nil then
tbl:SetValue(line_count_table[sec],'ÅñòüÇàÿâêà', string.format("Cancel"))
tbl:SetValue(line_count_table[sec],'ÖåíàÇàÿâêè', string.format("0"))
end
end
end
Sergey Gorokhov, дело в том, что не обязательно транзакция должна отмениться сразу, оно может должна отмениться в следующий раз
К примеру
Условие: если b > c тогда отправить транзакцию, если c > b тогда отменить (b,c -какие то параметры бумаги)
Стек вызовов: OnParam OnParam OnTransReply
Код
-- OnParam - Отправилась транзакция
b = 5, c =3
Если b > c Тогда
ОтправитьТранзакцию (Цена = B)
ИначеЕсли c > b Тогда
ОтменитьАктивнуюТранзакцию
ОтправитьТранзакцию( Цена = С)
--2. OnParam - Меняется b и c, а транзакция ещё не дошла
b = 3, c =5
Если b > c Тогда
ОтправитьТранзакцию (Цена = B)
ИначеЕсли c > b Тогда
ОтменитьАктивнуюТранзакцию -- Отменять нечего и выставится ещё одна заявка (задвоится)
ОтправитьТранзакцию( Цена = С)
--3. OnTransReply -- По сути уже не нужна
Sergey Gorokhov, может мне использовать цикл while внутри onParam? Сделать какую-нибудь переменную в значение false и, если транзакция прошла, ждать пока не появится заявка в таблице с флагом активна?
Или она не прилетит в таблицу пока OnParam не закончится?
Николай Камынин написал: Надо строить робота на основе событийной модели, тогда таких проблем не будет. Т е робот - это конечный автомат, который полностью описывается набором его состояний. Поэтому надо фиксировать эти состояния и программировать условия перехода из одного состояния в другое.
Я с Вами полностью согласен, но в lua нет событийности, всё зависит от стека функций об.вызова, как они придут и потока всего два и основной стек находится в одном потоке.
Вся моя проблема в том, что OnParam может прийти несколько раз по одному и тому же инструменту, когда OnOrder только раз. Проблему нескольких приходов решил с помощью добавления новой колонки таблицы и записи туда переменных, как в коде, но может возникнуть вот такая проблема, как можете посоветовать её решить? :(
--Функция выполнилась, транзакция отправлена, переменная "а" меняется на "Активна", но заявка ещё не пришла
1. Функция OnParam
Если а == "ждать" тогда
ОтправитьТранзакцию
а = "Активна"
ИначеЕсли а == "Активна" Тогда
НайтиТранзакцию
Отменить
ОтправитьНовуюТранзакцию
Конец
--Переменная "а" уже "Активна", но функция "НайтиТранзакцию" её не найдет
2. Функция OnParam Если а == "ждать" тогда
ОтправитьТранзакцию
а = "Активна"
ИначеЕсли а == "Активна" Тогда
НайтиТранзакцию
Отменить
ОтправитьНовуюТранзакцию
Конец
В таком ключе OnTransReply быстрее отработает?
Сергей,подскажите, у отправленной транзакции есть мой уникальный ID, можно ли отследить данную транзакцию и успеть её отменить до того как она улетела на биржу? Какие варианты может принимать аргумент ACTION="NEW_ORDER" в транзакции?
Так же следует отметить, выставление заявки происходит при выполнении условия, вообще ячейку таблицы с "Wait" на "Active" я хотел меня в OnOrder, где флаг заявки бы указывал на то, что она активна, но пока приходит ответ от OnOrder OnParam успевает выставить порядка 4х заявок, тоже беда :(
Имеем следующий код (только отрывок который интересует, функции отправки и снятия заявок - 100% рабочие, проверено):
Дело в том, что заявка выставляется и попадает в систему, но следующая за выставлением заявки функция отмены всех заявок не отрабатывает, я так понимаю, потому что заявка ещё не попала в таблицу квика по скорости. Если функцию отмены перенести в колбэк OnOrder - она снимется.
При тесте,что до запуска скрипта уже есть активные заявки, снимаются все, кроме только что отправленной.
Вопрос - есть возможность как-то быстро снять заявку только-что выставленную? или придется ждать завершения всего кода в OnParam, только после этого отработает OnOrder и я смогу её снять?
Код
function OnParam (class, sec)
.......
if Delta > 0.9 and CurentActiveOrder.image == "Wait" then
--Отправляем заявку
local id,ms = sendLimit(class,sec,"S",string.format(AUCTPRICE),1,account,client_code,"Коммент")
--Помещаем в ячейку необходимую фразу
tbl:SetValue(line_count_table[sec],'ЕстьЗаявка', string.format("Active"))
--Тут же отменяем все заявки
local trid,ms = killAllOrders(nil)
end
Не помогает (К слову "name" и "short_name" и "long_name", тоже не работают) 1. Скрин с LONGNAME [img]data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4RE8RXhpZgAATU0AKgAAAAgABAE7AAIAAAA3AAAISodpAAQAAAABAAAIgpydAAEAAAA6AAAQ+uocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCf0YDQsNCy0LjQu9C+0LIg0JDQu9C10LrRgdCw0L3QtNGAINCh0LXRgNCz0LXQtdCy0LjRhwAAAAWQAwACAAAAFAAAENCQBAACAAAAFAAAEOSSkQACAAAAAzUwAACSkgACAAAAAzUwAADqHAAHAAAIDAAACMQAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMDE3OjA0OjA0IDEyOjAxOjQ2ADIwMTc6MDQ6MDQgMTI6MDE6NDYAAAAfBEAEMAQyBDgEOwQ+BDIEIAAQBDsENQQ6BEEEMAQ9BDQEQAQgACEENQRABDMENQQ1BDIEOARHBAAA/+ELSWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLz48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdGVEYXRlPjIwMTctMDQtMDRUMTI6MDE6NDYuNTAyPC94bXA6Q3JlYXRlRGF0ZT48L3JkZjpEZXNjcmlwdGlvbj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+PGRjOmNyZWF0b3I+PHJkZjpTZXEgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOmxpPtCf0YDQsNCy0LjQu9C+0LIg0JDQu9C10LrRgdCw0L3QtNGAINCh0LXRgNCz0LXQtdCy0LjRhzwvcmRmOmxpPjwvcmRmOlNlcT4NCgkJCTwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg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gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqS6taOoZTMykZBFvJz/AOO1drGsf+Qdbf8AXJf5CgC7/alt/wBNv/AeT/4mj+1Lb/pt/wCA8n/xNRVHPPHbW8k87hIokLux6KAMk0AWf7Utv+m3/gPJ/wDE0f2pbf8ATb/wHk/+JrmF8WSsscjaDqVtBNLEkM90I0WRXkVAcK7Opw4ba6qe3BzjQTxFosi3pTWLBhp//H4RdIfs3X/Wc/J0PXHQ0Aa/9qW3/Tb/AMB5P/iaP7Utv+m3/gPJ/wDE1jHxNoIjs5DrenbL9tto32uPFwc4xGc/MckDjPNalAEv9qW3/Tb/AMB5P/iaP7Utv+m3/gPJ/wDE1FRQBfikWaFJYzlHUMpx1Bp1VdM/5BNp/wBcE/8AQRVqgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKxrH/AJB1t/1yX+QrZrPj0nyo1jS8uAqgKBhOAP8AgNACVT1bT49X0a806Zikd3A8LMACVDAjODx3q/8A2af+f24/KP8A+Jo/s0/8/tx+Uf8A8TQNOzucq9j4m1K2itNVh0qGOGWGQ3FtcyM0xSVGJ2GMCPIVjjc/JAzxmsf/AIQzVpbCC3u7XTZE020W0tUhvZoBcgSxv5jsiboWHlAgKX5Y846+hf2af+f24/KP/wCJo/s0/wDP7cflH/8AE002tUJaHnE3gfWLiVLjUfK1OS4t/Ju4/wC2LixCgSSPybeNVm4kI+aNOmf4jXoYGABUn9mn/n9uPyj/APiaP7NP/P7cflH/APE0X0sD1d2Mop/9mn/n9uPyj/8AiaP7NP8Az+3H5R//ABNICTTP+QTaf9cE/wDQRVqo4IVt7eOFCSsaBAT1wBipKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDB8bMU8FakykqwiBBB5B3CnHwR4fXANpcHgH/AI/pvT/epnjj/kSNU/64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QyNuyOjKeaZY+CrnSord9HvdB0u5jMqSjT9E8m3lik2Z/dCbIkBjXD7iMcFTxjt6KXcDn28OQzeF9O0C6u0nsreKOG7Vkx9rRFxtOG+UEgEjkEZXoaq2vg2zYbdduk1ZEW2EXnIVZTbyO8Ts247mG5QTxkqTjDYHVUU3Jt3+YdLHJaf4a1PSNbe703W7AW1w2bmG4sGd2Xz5ZcI4mUKcTFclW6A47VJ4i8NXer3V4+n6zBYw6hZizvEltfOYqu/a0bb12H942chgRjGDyepoouBxFn4Bit/Fy63LeafI6XEsyzCwxeSLIjr5clwZCWVd42gKoAUDHFZ198MZdTsba01DVtLvEt7MWcUl1pPmvAq52PDmbbHIQV3MF+bauAuBj0iiktLB38xgdAAN6/nS+Yn99fzp1FADfMT++v50eYn99fzp1FADfMT++v50eYn99fzp1FADfMT++v50eYn99fzp1FADfMT++v50eYn99fzp1FADfMT++v50eYn99fzp1FADfMT++v50odScBgT7GlooAzv4U/3F/kKKP4U/3F/kKKAMDxx/yJGqf9cf6iuwoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDO/hT/AHF/kKKKKAP/2QA=[/img]
Александр Правилов написал: Итак, имеем код: Функция getstime уже вам известна.
1. Проверяем условие и получаем true 2. Рассчитываем LASTDEPTHT - всё ок 3. Выходим из условия 4. В Delta присваиваем LASTDEPTHT - не работает LASTDEPTHT = nil
Код
if getSTime() > 100000 and getSTime() < 184003 then
local LASTDEPTHT_T = getParamEx (class, sec, «LAST»)
local LASTDEPTHT = tonumber(toPrice(sec, LASTDEPTHT_T.param_value))
tbl: SetValue (line_count_table[sec],'LAST', string.format (LASTDEPTHT))
end
local Delta = LASTDEPTHT
сделайте так:
Код
local LASTDEPTHT_T,LASTDEPTHT;
if getSTime() > 100000 and getSTime() < 184003 then
LASTDEPTHT_T = getParamEx (class, sec, «LAST»)
LASTDEPTHT = tonumber(toPrice(sec, LASTDEPTHT_T.param_value))
tbl: SetValue (line_count_table[sec],'LAST', string.format (LASTDEPTHT))
end
local Delta = LASTDEPTHT
Аааааа, то есть даже условие влияет, вообще странности языка)) Я бы понял, если, как в 1С - в пределах функции\процедуры видятся локальные переменные, но в пределах условия,это ужс.
Вы же сами сказали что причина в префиксе local у переменной LASTDEPTHT так уберите его и все.
Но ведь это не правильное решение, так быть не должно. То есть если есть условие то убираем Local, если нет условия, то всё ок работает. Как то кривовато. Как условие то может влиять на переменную?
Итак, имеем код: Функция getstime уже вам известна.
1. Проверяем условие и получаем true 2. Рассчитываем LASTDEPTHT - всё ок 3. Выходим из условия 4. В Delta присваиваем LASTDEPTHT - не работает LASTDEPTHT = nil
Код
if getSTime()>100000 and getSTime()<184003 then
local LASTDEPTHT_T = getParamEx(class, sec, «LAST»)
local LASTDEPTHT=tonumber(toPrice(sec, LASTDEPTHT_T.param_value))
tbl:SetValue(line_count_table[sec],'LAST', string.format(LASTDEPTHT))
end
local Delta = LASTDEPTHT
Александр Правилов написал: Ну почему никак, неужели я средствами lua в скрипте не смогу получить, например, время ПК?
Вы не правильно поняли. Ваш вопрос конкретно звучал "как средствами функции getTradeDate узнать время". И конкретно на этот вопрос ответ был "Никак". На вопрос, как вообще узнать время, в частности время компьютера, ответ - через стандартную Lua функцию os.time() Описание по ссылке: http://www.lua.ru/doc/5.8.html
А по поводу функции GetsTime, она и у меня работает и возвращает как раз дату, которую мне нужно. Дело то в другом, что после выхода из условия я в этой переменной получаю nil
По факту: - захожу в условие - всё ок - внутри условия вычисляются необходимые мне переменные - всё ок - выхожу из цикла. переменная nill
Но, если у переменной убрать local, работает.
Подскажите, если я в таблицу присвоил значение переменной LASTDEPTHT=tonumber(toPrice(sec, LASTDEPTHT_T.param_value))
как мне, например в переменную LAST получить значение из этой таблицы?
Александр Правилов написал: В справке нашел функцию getTradeDat, как на основе неё сделать условие? if (Значение функции getTradeDat) >10:00:00 and (Значение функции getTradeDat) < 18:40:03 then
Никак, согласно документации, (да и в судя по названию функции), функция getTradeDate () возвращает дату , а не время.
Ваша функция getSTime() у нас работает. Почему не работает у Вас, к сожалению не понятно. Проверьте, какие значения она у Вас возвращает, перед тем как попасть в условие if.
Ну почему никак, неужели я средствами lua в скрипте не смогу получить, например, время ПК?
Sergey Gorokhov написал: Здравствуйте, По всей видимости проблема кроется в функции getSTime() Что это за функция, нам не известно. Это какая-то Ваша функция. Ищите проблему в ней.
Функция getSTime
Код
function getSTime()
--возвращает текущее время сервера в виде числа формата HHMMSS
local t = ""
local a = tostring(getInfoParam("SERVERTIME"))
for s in a:gmatch('%d+') do
t=t..s
end
return tonumber(t)
end
Sergey Gorokhov написал: Здравствуйте, По всей видимости проблема кроется в функции getSTime() Что это за функция, нам не известно. Это какая-то Ваша функция. Ищите проблему в ней.
Как мне правильно прописать условие на проверку времени, используя стандартные функции qlua? В справке нашел функцию getTradeDat, как на основе неё сделать условие?
if (Значение функции getTradeDat) >10:00:00 and (Значение функции getTradeDat) < 18:40:03 then
Добрый день, товарищи! Есть определенный набор тиккеров в скрипте.
При колбэке OnParam получаю определенные параметры, параметры отправляются в таблицу, так же в таблице присутствует расчетный параметр Delta. Но незадача в том, что как только я добавляю закомментированное условие, всё, что после данного условия перестает выполняться.
При присвоении Delta - LASTDEPTHT, LASTDEPTHT в отладчике уже nil Если убрать условие - всё ок
Не понимаю как условие на проверку времени дает такой эффект.
Пожалуйста, расскажите, почему? Я только изучаю Lua и могу что-то делать не правильно, прошу натолкнуть на путь истинный )
З.Ы. В моей задаче необходимо получать значение последней сделки только при проведении основных торгов, далее, после основных производить вычисление только с последним значением. Если условие не поставить, то по фонде цифра последней сделки поменяется после аукциона, а мне этого не надо.
Код
function OnParam (class, sec)
if string.find(ticker_list,sec)~=nil and (class==«TQBR» or class==«SPBFUT») then
local BIDDEPTHT_T = getParamEx(class, sec, «BID»)
local BIDDEPTHT=tonumber(toPrice(sec, BIDDEPTHT_T.param_value))
tbl:SetValue(line_count_table[sec],'BID', string.format(BIDDEPTHT))
local OFFERDEPTHT_T = getParamEx(class, sec, «OFFER»)
local OFFERDEPTHT=tonumber(toPrice(sec, OFFERDEPTHT_T.param_value))
tbl:SetValue(line_count_table[sec],'OFFER', string.format(OFFERDEPTHT))
------if getSTime()>100000 and getSTime()<184003 then
local LASTDEPTHT_T = getParamEx(class, sec, «LAST»)
local LASTDEPTHT=tonumber(toPrice(sec, LASTDEPTHT_T.param_value))
tbl:SetValue(line_count_table[sec],'LAST', string.format(LASTDEPTHT))
------end
local Delta = LASTDEPTHT
tbl:SetValue(line_count_table[sec],'Отклонение', string.format(Delta))
end
Sergey Gorokhov написал: Александр Правилов , Какой именно офис Вы тестировали? Ранее были ситуации когда на версии Offise 2010 Starter (сокращенная версия офиса), DDE не работал. На остальных должен работать, с такими проблемами ранее никто не обращался. А на счет 13го, к сожалению подсказать затруднимся
Я же написал наверху. Сначала поставил 13, потом снем, поставил 10, потом поставил 13. (все проф, лицензии) Единственное, что этому предшествовало, это сброс системы. То есть была установка и квика и офиса на чистую систему.
Sergey Gorokhov написал: Здравствуйте, В самом Excel, в параметрах, не должно быть галки "Игнорировать DDE-запросы от других приложений" Где эта галка расположена в Вашей версии Excel, к сожалению подсказать затруднимся.
Я же написал в самом первом посте, что галка не стоит. :(
Denis написал: Не давайте удаленный доступ незнакомым людям, никогда! Скайпом не пользуюсь... Только что успешно вывел в excel свою таблицу котировок фьючей, тоже открытие, версия квика 75072
удаленный доступ вы бы не получили, а видели картинку, про безопасность можно не переживать ;-) как выводится я знаю, есть какая-то проблема, вот и всё.
Denis написал: если стоит галка excel "запускать приложение DDE сервера автоматически", то excel запускать вручную не нужно. Квик сам запустит книгу. Если путь к книге и имя листа прописаны корректно, то все должно работать.
Если бы работало, вопросов бы не было :) Я даже могу удаленный доступ дать, возможно это бы помогло решить мою проблему. Скайп helskk
Добрый день! Дано: — Чистая ОС Win 10 Лицензия — MS Office сначала 13, потом 10, потом опять 13 (тестировал) — Чистый квик от Открытия — В офисе галка об игнорировании DDE не стоит — Все рекомендации в справке квика сделаны — От имени админа запускал — На другом ПК работает (и на этом тоже работало)
Суть: Не работает вывод через DDE в Excel, вообще никак… не могу понять почему, возможно кто-то сталкивался с данной проблемой и знает пути решения, поделитесь, пожалуйста :(
По скрину: книга запущена и лист тоже. сам Excel через квик загружается нормально.