Дмитрий (Все сообщения пользователя)

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

Страницы: 1
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
 
Hазобрался, настроил, вроде работает как надо. спасибо.
Последний вопрос для закрепления материала )))
а вот эта запись " Log:flush() " - что означает в вашем примере записи в Log ?
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
 
Цитата
nikolz написал:
У меня один лог файл. В него пишут разные потоки. Так как я могу создавать любое число потоков и Lua машин, то мне нет надобности создавать еще какие-то скрипты.  Но мой вариант работы эквивалентен вашему варианту с двумя скриптами.У меня проблемы запись в этот  файл.  Попробуйте открывать файлы один раз с дозаписью и завершать запись принудительной записью в файл.типа так: Log:write(os.date()..","..tostring(s)..",num="..tostring(num)..","..tostring(count).."\n"); Log:flush();
Вот это, наверное, то, что нужно, только я не понял всю конструкцию - как открыть один раз и потом дописывать? т.е. просто у вас один раз в начале открыт Log = io.open('...', 'a'), а потом уже без открытия просто по ходу вставляете Log:write(os.date()..' и так дает дописывать?
p.s. я кажется свою проблему понял, у меня не второй скрипт конфликтил с первым, у меня в первом колбеки могли при стечении обстоятельств писать "логи" одновременно с main(), а так как я постоянно "io.open" и "close' при каждой записи - получалась коллизия, а если буду держать файл открытым, то будут писать оба без ругани, получается. Так?
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
 
В моей ситуации, я так понимаю, это не поможет. У меня 2 скрипта иногда открывают один и тот же файл (мне надо иметь общий файл, а одновременное открытие - совпадение, которое
надо как-то нейтрально обходить), а потом кто-то его первый закрывает, а второй при попытке закрыть еще раз выдает ошибку. Я так это вижу исходя из того, что именно на FileWrite:close() в первом скрипте происходит ошибка (во втором скрипте открывает на чтение и отрабатывает быстрее - там никогда ошибку не выдает - я там вообще только первую строку читаю, больше не надо).
Отсюда вопрос: а как-то статус, что файл стал "close" можно получить запросом? пытался выводить значение переменной "FileWrite" через "tostring", чтоб по нему как-то зацепиться, но выдает какой-то буквенно-цифровой код, описание структуры которого в инете найти не смог.
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
 
"либо писать метку в строку и искать эту метку" - а это как работает?
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
 
И что-то такая конструкция работает не правильно, теперь у меня файл до остановки скрипта пустой. Наверное, скрипт держит его открытым и не фиксирует запись.
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
 
Спасибо. А вы не могли бы в 2-х словах пояснить как работает условие без значения, ну т.е. я понимаю когда, например " if Filewrite == nil then ... ", а что значит переменная без сравнения в  конструкции " if Filewrite then ..." ?  
Работа нескольких скриптов с одним файлом, Выдает периодически ошибку при работе нескольких скриптов с одним файлом
 
function mark_Fail (zap, mark) - моя функция записи в файл
FileWrite = io.open('D:\\QLUA\\fails\\mark.txt', zap)
FileWrite:write(mark)
FileWrite:close()
end
а другой скрипт читает этот файл.
Все работает нормально, но периодически первый скрипт выходит на ошибку "attempt to use a closed file" на строке FileWrite:close(). Ошибка выходит редко, 2-3 раза в день, при этом запись в файл примерно каждые 6-8 секунд, а просмотр другим скриптом каждые 60 секунд)
Я своим скудным умишком полагаю, что происходит наложение запросов двух скриптов на один файл и конфликт.
Вопросы:
1) как сделать "бесшовную" работу нескольких скриптов с одним файлом? Не запись одновременно, а один скрипт пишет - несколько читают и не мешают основному писать.
2) на крайняк, как сделать, чтоб не останавливало скрипт по такой ошибке? Готов просто пропускать запись, если вдруг прошло "наложение" в этот момент
Заранее благодарю отозвавшихся на вопрос.
Номер строки в коде скрипта, Вывести номер строки в коде скрипта
 
Скрипт имеет длинный код (пишу плохо, поэтому структура кода не оптимальна), по ходу коду навставлял "ловушки", которые записывают в файл ключевые данные по работе скрипта. Потом разбираю записи и долго ищу в какой строке кода сработала запись. Вопрос - можно ли как-то вывести строку кода при реализации скрипта? Ну, типа:
message (CodeLine)
выдает сообщение с номером строки кода, где CodeLine - функция определения строки кода скрипта.
Кол-во в заявках стакана на одном ценовом уровне, Кол-во в заявках стакана на одном ценовом уровне
 
Спасибо
Кол-во в заявках стакана на одном ценовом уровне, Кол-во в заявках стакана на одном ценовом уровне
 
Понял. А в данном случае выдаст именно суммарное кол-во в лучшем спросе/предложении?  
Кол-во в заявках стакана на одном ценовом уровне, Кол-во в заявках стакана на одном ценовом уровне
 
Извиняюсь, я что такое TTT ?
Кол-во в заявках стакана на одном ценовом уровне, Кол-во в заявках стакана на одном ценовом уровне
 
Добрый день.
Скрипт:
 StKot = getQuoteLevel2 ('SPBFUT', 'CRM3')
 Q = tonumber (StKot.offer[1].quantity)
В данном случае выдаст сумму всех заявок по лучшему предложению в стакане, или если на данном уровне несколько заявок - выдаст только одну (первую в очереди) ?
Например на уровне 10,987р размещено 3 заявки по 5, 1 и 3 лота соответственно. В стакане вижу 9 лотов суммарно на этом уровне, а что выдаст указанная мной ранее функция? 5 или 9?
Заранее благодарен за помощь.
Ошибка attempt to perform arithmetic on a table value, Ошибка attempt to perform arithmetic on a table value - что значит?
 
Не могу нигде найти описание ошибки "attempt to perform arithmetic on a table value" - в переводе "попытка выполнить арифметику над табличным значением". Ну а почему нельзя выполнить арифметику над табличным значением? Или что имеется ввиду?
Работа со стаканом котировок, Кол-во строк в таблицах стакана
 
понял, спасибо
Работа со стаканом котировок, Кол-во строк в таблицах стакана
 
а проверка на nil зачем? разве могут быть в стакане значения с ценой и кол-вом, равным "ничего"?
Работа со стаканом котировок, Кол-во строк в таблицах стакана
 
я ж написал, что понял, что строки в bid идут обратной нумерацией. но все равно спасибо за ответ, глядя на вашу визуализацию, я сообразил, что система не воспринимала  NumBid = StKot.bid_count как число (а когда вычитаешь что-то - сама преобразует в число, интересно), поэтому правильно надо было NumBid = tonumber (StKot.bid_count) и все поехало.
Работа со стаканом котировок, Кол-во строк в таблицах стакана
 
Прочитал внимательно, что есть на форуме по работе со стаканом котировок в qlua. Написал простейший скрипт и уперся в такой момент.
Вот скрипт:
function main ()
   StKot = getQuoteLevel2('SPBFUT','RNH3')
   NumBid = StKot.bid_count
   bid_quantity = StKot.bid[NumBid].quantity
   bid_price = StKot.bid[NumBid].price
   ...
end

Понятно, что в таблице спроса строки идут от "худшей", поэтому что получить лучший спрос в стакане - запрашиваю кол-во строк и беру последнюю. Ругается ,что нет такого индекса в этой таблице. Думаю, может начинает с нулевой строки. Делаю [NumBid - 1]. Ошибки не выдает, результат показывает, но на поверку обнаруживаю, что выдает 2-ю сверху позицию спроса в стакане.
При этом по StKot.offer[1] нормально выдает лучшее предложение в стакане.
Помогите, люди добрые, как получить "лучший" спрос из стакана?

p.s. окно стакана котировок открыто при работе скрипта
p.s. вариант получения данных через getParamEx понятен, я не понимаю, почему из стакана не цепляет?
Позиции на счете появляются уже после снятия заявки, Позиции на счете появляются уже после снятия заявки
 
О, я в тренде вопросов )))
Главное заключается в том, что многократный вызов колбэка утраивает все расчетные значения, которые я запрашиваю для будущего расчета средней стоимости сделки по заявке, поэтому по факту средняя стоимость сделки из одной большой заявки выходит правильно.
Позиции на счете появляются уже после снятия заявки, Позиции на счете появляются уже после снятия заявки
 
Цитата
Владимир написал:
Дмитрий, Не знаю, как прогрессивный люд, а я делаю только так. Только ещё нюанс: функция сверки с портфелем тоже глючит, и в данный момент она у меня отключена.  
Понятно. А если говорить про расчетным метод контроля, не могли бы еще подсказать, почему OnTrade - функция обратного вызова по сделке - вызывается по каждой сделке ровно 3 раза, а не один? специально ставил счетчик по номеру заявки и сравнивал с таблицей сделок - кол-во по счетчику в OnTrade набегает всегда ровно в 3 раза больше кол-ва сделок. Наверное, что-то кроме самой сделки еще колбэк ловит?
Позиции на счете появляются уже после снятия заявки, Позиции на счете появляются уже после снятия заявки
 
Цитата
Владимир написал:
Дмитрий, А зачем Вы вообще связываетесь с getFuturesHolding? Вы знаете, что заявка исполнена (или исполнена частично, или не исполнена вообще). Портфель тоже нередко глючит (это если у брокера его смотреть). Так контролируйте всё, что угодно по собственным данным скрипта, ведите портфель сами, периодически сверяясь с брокером.
Вот оно как прогрессивный люд то делает... Понял, попробую так, расчетно держать портфель, по итогам операции или по таймингу делать сверку с портфелем в терминале. Спасибо.  
Позиции на счете появляются уже после снятия заявки, Позиции на счете появляются уже после снятия заявки
 
Цитата
Евгений написал:
где то в коде скорее всего ошибка
там код проще простого, я везде месседжей и "ловушек" понаставил, код идет без ошибок и хронологически по месседжам видно, что заявка исполнена, а позиций нет
Позиции на счете появляются уже после снятия заявки, Позиции на счете появляются уже после снятия заявки
 
Люди добрый и умные, помогите начинающему скриптеру. Голову сломал.
Выставляю заявку на продажу фьючерса и контролирую ее по битовым флагам на исполнение.
Типа так:
 if bit.band(trade.flags,1) == 0 and bit.band(trade.flags,2) == 0 then
   ZayavkaIspolnena_F_Buy = true
 end
После получения (строго после) условия ZayavkaIspolnena_F_Buy = true проверяю позицию по getFuturesHolding и часто получается так, что позиции теряются (не показывает getFuturesHolding), хотя заявка исполнена.
Ставил задержку между ZayavkaIspolnena_F_Buy и  getFuturesHolding sleep (1000) - уже лучше, но на 5 раз проскочило опять, в этот раз была заявка на 20 позиций реализована частями (15+3+1+1), а на getFuturesHolding выдало наличие =18 (а по факту в портфеле появились все 20 фьючерсов), т.е. последние 2 сделки не успели по системе перейти в позиции до сработки getFuturesHolding.
Топорно увеличивать еще паузу между ZayavkaIspolnena_F_Buy и  getFuturesHolding - но до какого интервала? да и не правильно это, концепт моего бота подламывает.
Уверен, что опытные товарищи эту проблему легко решают в коде, подскажите, как точно получить значение реализованной заявки.

p.s. по-простому расчетно брать из кол-ва в заявке мне не вариант, т.к. скрипт подразумевает частичное исполнение заявки и снятие ее, потом расчет, и перевыставление на остаток, т.е. мне надо контролировать позицию к заявке по наличию в портфеле
Позиции по инструментам - валюта, Позиции по инструментам - валюта - не показывает
 
На валютном счете произвел покупку 3000$, в итоге в "позициях по инструментам" по валютному счете показывает 0, а в позициях по деньгам = 3000USD.
Не могу понять, что тогда означает окно "позиция по инструментам" применительно к валютному счету, если собственно валюта в нем не считается за инструмент?
OnStop, Не могу задать время на остановку скрипта из диалога управления
 
Спасибо за ответ.
Но я понимаю, что функция OnStop не прерывает выполнение программы сама, а лишь вызывается при остановке и возвращает время на остановку скрипта. Я про другое. У меня эта 1мс никак не выходит. Любой скрипт останавливается ровно 5 секунд (которые заданы по умолчанию) и никак не реагирует на мои данные по return - делал и мало (1мс), и много (30с) - все одно пауза при нажатии "остановить" ровно 5с.
OnStop, Не могу задать время на остановку скрипта из диалога управления
 
Такая функция (без всяких еще дописок в основном коде) должна мгновенно (за 1 мс) останавливать скрипт или нет?
function OnStop()
return 1
end
в примерах есть еще переменная stopped (которой присваивается true в этой функции) - зачем она?
p.s. я новичок - чур не обзывать тупым ))
Закладки
 
спасибо
Закладки
 
Добрый день.
А по этой теме есть какие-то подвижки на момент 2022 года?
KILL_ORDERS, KILL_ORDERS не отрабатывает
 
Вот нельзя было конкретнее написать ,что лишнее "S" в конце, должно быть 'KILL_ORDER' )))
пришлось еще голову поломать, глаз-то уже замылился ))
Спасибо !!!
KILL_ORDERS, KILL_ORDERS не отрабатывает
 
Ой, картинка не подгрузилась.
Ну, в общем, там
" TRANS_ID 1651566806 "
KILL_ORDERS, KILL_ORDERS не отрабатывает
 
"1) отобразите сообщение, которое возвращает sendTransaction;"
Это которое у меня в коде месседжем? Вот:
[img]data:image/png;base64,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[/img]
KILL_ORDERS, KILL_ORDERS не отрабатывает
 
OnTransReply не вызывается по транзакции transaction_stock_kill (в этом же скрипте ранее транзакция на выставление заявки - по ней OnTransReply вызывается и .result_msg выходит). Т.е. физического действия не происходит, хотя программно транзакция проходит, т.к. TRANS_ID присваивается
KILL_ORDERS, KILL_ORDERS не отрабатывает
 
 CLASSCODE - у меня переменной вставлено, там все правильно, заявка выставляется до этого
KILL_ORDERS, KILL_ORDERS не отрабатывает
 
Такой простенький код:

function transaction_stock_kill ()
   message('transaction_stock_kill poshlo '..Num_Z [j])
   t_kill = tostring (os.time())
   transaction_kill = {
       CLASSCODE = ClassCodeSt,
       SECCODE = "GAZP",
       ACTION = 'KILL_ORDERS',
       ORDER_KEY = tostring (Num_Z [j]),
       TRANS_ID = t_kill
                                  }
  sendTransaction (transaction_kill)
  message('TRANS_ID '..transaction_kill.TRANS_ID)
end

Номер заявки совпадает с табличным в QUIKе (первое сообщение в коде). Транзакции на снятие заявки проходит - второе сообщение в конце с TRANS_ID выходит (т.е. транзакция прошла), а по факту снятие активной заявки не происходит, почему так? чего не хватает?  
OnTransReply для опционов, OnTransReply для опционов не вызывается
 
В таблицах транзакций и сообщений все ноРм
OnTransReply для опционов, OnTransReply для опционов не вызывается
 
В таблицах транзакций и сообщений все ном, записей по ошибкам нет.

Сегодня и по фьючерсу не вызывается...
Cкрипт подачи заявки стандартный, заявка то выставляется, а OnTransReply не вызывается. Проверяю на простое действие:

function OnTransReply (order)
message ('chto-to otozvalos')
end

выходит только стандартное окно выставленной заявки, а моего окна не выходит.

p.s. как листать окна знаю, нет там его.
это я в демо-версии балуюсь, может в этом дело?
OnTransReply для опционов, OnTransReply для опционов не вызывается
 
Забыл написать, что пробую в демо-версии, может в этом дело?
OnTransReply для опционов, OnTransReply для опционов не вызывается
 
Напрочь отказывается вызываться функция OnTransReply для опционов. Один в один написан код для заявки на фьючерс и опцион, по факту обе заявки системой выставляются, по итогу  OnTransReply для фьючерса вызывается, а для опциона нет. Пробовал и вместе, и отдельно опцион запускать - ни фига.
p.s. подскажите, а есть на форуме поисковик по ключевым словам? может этот вопрос был в другим темах, но при отсутствии поисковика очень трудоемко все листать  
Сохранение результатов работы скрипта в файл
 
Спасибо за ответ.
Очевидно, что Ваш уровень знаний в QLUA значительно выше моего, поэтому мои формулировки могут показаться дилетанскими, не спорю.
Правильно тогда мой вопрос будет звучать как:
Результатом работы скрипта получается таблица как ТИП ДАННЫХ, которую нужно сохранить в файл.
Цитата
Цитата: Вам надо найти реализацию нагугленной вами этой функции или написать ее самостоятельно
в этом и вопрос как ее написать - никаких функций для этого я не нашел, даже зацепочки.
Неужели такая стандартная задача до этого никем в QLUA была не востребована и не изучена?
Сохранение результатов работы скрипта в файл
 
Не могу разобраться как сохранить результаты работы скрипта в файл.
Нагуглил про функцию SaveTable, но она не хочет работать (или я не понимаю как ее использовать).
Что-то типа
t_id = AllocTable()
--дальше формируем таблицу, в конце прошу скинуть в файл:
SaveTable(t_id, SaveResalt)
и в итоге:
attempt to call a nil value (global 'SaveTable')

p.s. таблица сама на экран выводится нормально, никаких ошибок не выдает
Как обойти attempt to index a nil value ?, Как обойти attempt to index a nil value при отсутствии реальных значений в таблице
 
Спасибо, все получилось
Как обойти attempt to index a nil value ?, Как обойти attempt to index a nil value при отсутствии реальных значений в таблице
 
При выполнении этого фрагмента скрипта:
nLKOH = getDepoEx ("NC...", "10...", "LKOH", "NL...", 0).currentbal
выдает ошибку "attempt to index a nil value"
Я понимаю, почему система возвращает ошибку - позиций по "LKOH" просто нет в "позициях по инструментам", но пусть выдаст тогда значение 0 и не останавливает скрипт.
Как это реализовать?  
Страницы: 1
Наверх