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 - функция определения строки кода скрипта.
Добрый день. Скрипт: 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" - в переводе "попытка выполнить арифметику над табличным значением". Ну а почему нельзя выполнить арифметику над табличным значением? Или что имеется ввиду?
Прочитал внимательно, что есть на форуме по работе со стаканом котировок в 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 понятен, я не понимаю, почему из стакана не цепляет?
Люди добрый и умные, помогите начинающему скриптеру. Голову сломал. Выставляю заявку на продажу фьючерса и контролирую ее по битовым флагам на исполнение. Типа так: 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. Не могу понять, что тогда означает окно "позиция по инструментам" применительно к валютному счету, если собственно валюта в нем не считается за инструмент?
Такая функция (без всяких еще дописок в основном коде) должна мгновенно (за 1 мс) останавливать скрипт или нет? function OnStop() return 1 end в примерах есть еще переменная stopped (которой присваивается true в этой функции) - зачем она? p.s. я новичок - чур не обзывать тупым ))
Номер заявки совпадает с табличным в QUIKе (первое сообщение в коде). Транзакции на снятие заявки проходит - второе сообщение в конце с TRANS_ID выходит (т.е. транзакция прошла), а по факту снятие активной заявки не происходит, почему так? чего не хватает?
Напрочь отказывается вызываться функция OnTransReply для опционов. Один в один написан код для заявки на фьючерс и опцион, по факту обе заявки системой выставляются, по итогу OnTransReply для фьючерса вызывается, а для опциона нет. Пробовал и вместе, и отдельно опцион запускать - ни фига. p.s. подскажите, а есть на форуме поисковик по ключевым словам? может этот вопрос был в другим темах, но при отсутствии поисковика очень трудоемко все листать
Не могу разобраться как сохранить результаты работы скрипта в файл. Нагуглил про функцию SaveTable, но она не хочет работать (или я не понимаю как ее использовать). Что-то типа t_id = AllocTable() --дальше формируем таблицу, в конце прошу скинуть в файл: SaveTable(t_id, SaveResalt) и в итоге: attempt to call a nil value (global 'SaveTable')
p.s. таблица сама на экран выводится нормально, никаких ошибок не выдает
При выполнении этого фрагмента скрипта: nLKOH = getDepoEx ("NC...", "10...", "LKOH", "NL...", 0).currentbal выдает ошибку "attempt to index a nil value" Я понимаю, почему система возвращает ошибку - позиций по "LKOH" просто нет в "позициях по инструментам", но пусть выдаст тогда значение 0 и не останавливает скрипт. Как это реализовать?