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 - функция определения строки кода скрипта.
Добрый день. Скрипт: 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" - в переводе "попытка выполнить арифметику над табличным значением". Ну а почему нельзя выполнить арифметику над табличным значением? Или что имеется ввиду?
я ж написал, что понял, что строки в 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 не прерывает выполнение программы сама, а лишь вызывается при остановке и возвращает время на остановку скрипта. Я про другое. У меня эта 1мс никак не выходит. Любой скрипт останавливается ровно 5 секунд (которые заданы по умолчанию) и никак не реагирует на мои данные по return - делал и мало (1мс), и много (30с) - все одно пауза при нажатии "остановить" ровно 5с.
Такая функция (без всяких еще дописок в основном коде) должна мгновенно (за 1 мс) останавливать скрипт или нет? function OnStop() return 1 end в примерах есть еще переменная stopped (которой присваивается true в этой функции) - зачем она? p.s. я новичок - чур не обзывать тупым ))
Вот нельзя было конкретнее написать ,что лишнее "S" в конце, должно быть 'KILL_ORDER' ))) пришлось еще голову поломать, глаз-то уже замылился )) Спасибо !!!
"1) отобразите сообщение, которое возвращает sendTransaction;" Это которое у меня в коде месседжем? Вот: [img]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZUAAAD9CAYAAAB0i+q4AAAgAElEQVR4nO3d3VNUV6L38S+I+DIZaBwFpQ1KEl9yBlCMTEx0NBIdnadAJnMXq6JRr+YSzI3zBww3B/wHjqQgVeZM1XMmj0pVdEbJ0fiSGRxR6IrJzEQMk1YBhRaJYqP0c9EvNk2/7KZX00D/PlVE2HvttVa/ZP96rdW7O+N3v/udBxERkQQ1NzeTmepOiIjI7JF16fJlcn7601T3Q0REZqjXX3+drKwsALJ++tJLFBYWprhLIiIyU7nd7kCoaPpLRESMyQLweLRWLyIiidNIRUREjMnyeDwaqYiIyKQFZ4hGKiIiYozWVERExBiNVERExJhxayq29XuoLs0dV6Dny084fzt4y0q2ffBLmLAdWLkN767z3LatZ091ET2nTnLdZWP9nmqKek5x8rorzDFF0PMln0yoUMI9Jjzs4tTJ67jCH5JCNtbv2QoXTnLdBSu3fcCK78M8T0Qk5QoLC1m3bh3nzp3D7XaP25eZmcn27du5ffs23333Xcy6gme7fNNfuayv2UMZnZxsCTpZ2dZTs+cDPljxJS3/2x1aDRFnzYKCyh9anpDtABS/w75f5tJ5soXQrBGwra+hOreTlpbQ+366GqTj/PfU7PmAUoCeL2np1tSqyHSTmZlJRUUFOTk57Ny5kz//+c+BYPEHSmFhIYsXL6anp2dC6EStG6D4HV+gnAh59eu6zomWL+kp+iXvFJu8SfgCBb5sOaFACauY9WUP+XJCmE9zruucaGmhpaUlzAsREZkOxsbGOHv2LMPDwyxatIhf/epXZGdnk5mZSWVlJYWFhbjd7nFhY1WWx/M6K4qg50IHg2FfVN7iemcpe0rXY7vVwSC+Qp4wI5XALu/IJPBf7z/evzweKN7O/l/CheYvGH/ayaO8Zg9FPSc50TEYocveMmU23589F2j+wldLXjk1e4roOXmCjkG87WwtAlcnJy/A1uB94cpHqzveviS6Py+XHJeLwZXvsG9rUeAIV2fQfRPa/1h/h7ZHz4vHYELZkG2E2V+8nf1bc+i0sj/SwykiKfHo0SPOnDnDrl27AsHy9OlTli1bhtvt5syZMwwMDFiqa/z013+spYgeLkQ5dw7e7sFVZsMGJHxu8J3oey40M7HJQTpONNMR8WDfSXHoAs0nugN/799OmJN/Mdt97XzRDeSVx+hYPHWHK1/M9v1b2V7c7W0vZn0x9tts2GxF7Nnaw4Vm/31VzPb9e6ghWuhavX2QV17DnppyXCc6JvG45lFeVgQRV3Zi7ReRVBseHh4XLEDcgRIqjnd/5WDLm1QbAbayPewvc9HZA0VbayiPt77i9ZTZergQOMkP0tHZA0UrCZ2dK96+lSJXJ9etzsDEUTcAeSspsrnoDDTQzRfNvgCzUp/F9nouBI/muvniQg+2svXh+xTX7YPBjk56bGWsn8TUZl75Vmw9nZEjJcZ+EZkeHj9+zI8//hj4+8mTJwwPD0+6viwTnbLM1cnJEx0Mchtq9lC2tZzb8b5KdrlC1n1cuCgKCjwbZXv2e6eSToQmindf2fgK6bFSd2gnbTZsDNEZrfOx+hrztvRwO/QmTChjTZ4tB7Cxdf9+toZWacvzDShi3D8Bxay3dfLFdRs1ZRN2WtgvItNBZmYm7777LgUFBYyOjjI6Okpubi67du3izJkzca+nAGTx9Tf0VFezcuUYt7ozwhbKW1GEjSFuPBhjjEEGXZDnGcPjGV8+LzcHXN8zODbGWODdX2OMjXlXV1zfdzPg8QAD/P38DYpq1rF1fTf/z+JUjrdKD56xMTwZGb5tQe14W+HGic9wlR9gf00uJz67xmBGhq+cd1/HoO/YvHLeq1nhPTZG3aG31T+FGFw+rr7G2j84iIu8CfVPvL0v+hfa3/F/A64bgftjQn/zVkS/f4LaWrm9jMGOzxhjQ9i+hNsfev+JSGrNmTNn3KL86dOncbvd7N69m0WLFrFr167Atnhkwtd090DRug3kBU5CeZT/5kM+rCzG4ymmfJ0NerrpzsggI2MQ1xDk2BZNqMyWZ4MhV9iTVqiMwQ7O33BhW1dDZXEcbzu1rWBlcNO2PGwM4QqZ/rt17jw9tnVs2zCxn4nWDYBrEBc5hLkbrNcXbf+Ai6Fw9UfrUxQDrqGJ7U2GbQPFg+cDwRP3fhFJOX+g2O32QKAMDAwwPDzM6dOnA+8K2717N9nZ2XHVnenxeLh17gQ3WEfNgXcp9o0krn12ghs52zhwYBtF9HD+3K3ANSe3unsCYRC4DiWvnHVF0NN9K+rHvgTKezwMXPuM8z1QtM3brifGD7c6uOGysa78Fd+2PDZ4G+XWhJZuce58D7Z12yjP84Ttw/ji0eue0JeB23wfUv5FEFvoa8zbcouOG7CuJui+ySvnvW1FuG50TLi9obcn4u3b5n3x4PF48BRX8uGHv7F2/wBgY9066Lg2EPf+WI+tfvSjH2s/H374YcyfWHU8e/aMx48f43a7+fzzz3nw4EFg36NHj/j8888ZHh7myZMnPHv2zFK//HxrKgNc++xjrr3yLgcOHGDbhJNFEdsOvAsfn/OdEM/xsWsD79Uc4ECgsIsbJz7mWpyvoG+dO0/xgW1se28Drs9us/K9GlZ8f4LPwlbkDTveq+GAv+Ge83x8bmKk+CrnfPEBtm3bwO3zsXoSZ90xyye6HwaufcYJ3qMm6DFx3Qi9b2ysqznAuuAtE/5+F9fH5wLt1Rzw7/VOd10bACyOYHpuXCPaQxxrv4gk5uOPPzZSz8WLF7l+/XrYRfnh4WFaW1txu908f/48rnoz3nzzTU9+fn7Mgove+C3lrj9xLvYV+zKdLHqD3/7Gxo2mc+ihE5FkyMnJIScnh+bmZuvfp/Lg6v9wdgo6J4aFXJAqImJacIboU4pFRMQYfZ/KbPegnf/7X6nuhIikC41URETEGH1HvYiIJERrKiIikhRaUxEREWM0UhEREWOynrrdPHr0KNX9EBGRGWr58uWB37OGhoYYGhpKYXdERGQmKy0tDfyu6S8RETFGoSIiIsYoVERExBiFioiIGKNQERERYxQqIiJijEJFRESMUaiIiIgxChURETEmK57CT0dGktUPERGZJgoKCnA9fDipY+MKFYB58+dPqiEREZn9NP0lIiLGKFRERMQYhYqIiBijUBEREWMUKiIiYoxCRUREjFGoiIiIMQoVERExRqEiIiLGKFRERMQYhYqIiBijUBEREWMUKiIiYoxCRUREjFGoiIiIMQoVERExRqEiIiLGKFRERMQYhYqIiBijUBEREWMUKiIiYoxCRUREjFGoiIiIMQoVERExRqEiIiLGKFRERMQYhYqIiBijUBEREWMUKiIiYoxCRUREjFGoiIiIMQoVERExRqEiIiLGKFRERMQYhYqIiBijUBEREWMUKiIiYoxCRUREjFGoiIiIMQoVERExRqEiIiLGKFRERMQYhYqIiBijUBEREWMUKiIiYoxCRUREjFGoiIiIMQoVERExJivVHUilxYsXA/CLigpsNhsZGRlG6vV4PLhcLv7W3s79+/eN1CkiMhOkbaisWbOGNzZsADAWJn4ZGRnk5eXxq507+fu1awB8++23RtsQEZmO0jJUFuXl8caGDcbDJFRGRkYguPr7+hgYHExqeyIiqaY1FRERMSYtQ2XTpk2TGqWMjo5y7tw5/vuPf+Trmzf5+ubNmMdkZGSQkZHBW2+/PZmuiojMKGk5/WWz2SZ13N27d7nX2wuAw+EA4D9ef93Ssbk5OZNqU0RkJknLUJnsWsrSpUtZtGgRAwMDrF2zZkraFBGZSdIyVCYrOzubX+/enepuiIhMW2m5piIiIsmhkUoMo6OjOJ1OAO7fv8+ChQtZ9dprZGdnp7hnIiLTj0Ilhq6uLoaGhgBw3rkDeK85eeedd1LZLRGRaUmhEsOGDRvweDwAHP/0UwCGf/wxlV0SEZm2FCoWPHz4cNzfeXl5KeqJiMj0poV6ERExRiMVC/xrKX72wsIU9UREZHpTqFjgf/cXeC9iLFSoiIiEpVCJYWxsjAcPHgT+zsnJSbu3E1ccbGRvycTt/W0N/KF1GYca9xK823G8jmNXw9TBcWqbgnds9B7rCLd9J30N9ZxyAhsPcjTQAQfH65poD9vTjRxqLKOzrol2f90T+usMe6T38IMc3cuE+l/c/n7afH2yVx3ho8ol4fsUpp5o5cPVH3F70H0x7vZE2h6lfpFkUKjEMDY2Fnj3F8DIyAj9/f1kZXnvunRYtG9vqvOdAENO9gAsY+JJ7yAVV4NOsvYqdhY4cLCTavvVkJNaP/0Fezm08eqEIPIf+/u9cLzO1wd7FdUbgXBlJwg+iW7kUONhjuaHBhiAneojh6nsdeAI2VNxsJGdfQ3U1o0/ExfmLwkTnpHrCV8+cv3ht2/k0N4C2hrqOOXcyKHGfVR31Ht/D9xHwdsj1y+SLFqoF7OuduKggKX2F5vs5aXQdYbTXVBabp9wSNdf2ijYWcXEPcCyfJb09xFY1XK2cspSoEzoGMca2ugvKaNiwj4np+rrqG3qDNm+kbKCNprDjm766btrtZ5I5SPVH2G7fSkF/V1cc3pvT6djCfnLgI1llDg6fSF+ldNt/vs5Wv9FkkOhEkNWVhZvvPEGb7zxBvPmzeP58+c4HA4eP3nC4ydPUt296WdjGSWBEx+AnQ2l0NXhxNnRBaXlE8Pjbit/6a1kf1WYWLnaiWNJhH3xcnbQ1V9C2UaL5TeWUdKbz+7GRo42NnL0iD/47CwtWELlYe/238fsW4TykeqPtN3ZQRelbPAWoqzEQedVsC8toD8osZz3elmSvyxK/0WSJy2nv9xud1zrImtWrx7372TbnL28J8xKAMdxauuDhhL2ckrpotkJ0EEX+9hgb8UZ8uK5vek4ZUHTNi9c5VjdXaqPHOZoZfj1mqQqKaCvoY5a31TS/qoO/tDqHZGcAgiZbgovQvlI9d+L0m5LF7/33deO494pwahBEaEekWRJy5HK3//+97Roc+r009ZQR22Y6SXv1FcH3tOYk2tdULkr3FDhKseO90bY55tWamijYG8jh6yONCL0deI0VBSOvwTCor3T4R0BjOOdhgo3rRdeSPlI9Yfbbq/i9/ugua6O2ro6Osss3Bcx+y9iVlqGyq3ubq5cuYLb7U7qCMLtdnPlyhWuXLnCre7upLUzbThbaW4rYGdgOmgjuyuXsKTysHf6pbHR+w6osOsawNUztBXsjXyidLbS3NZPieX5qxD2ckqX9HIvCS/Ue+OsNN7yEBrQ3pAoKdv4YrrLXy5kOkxkKqVlqEjyOFv/Qm/lPqrt+NZX2vhP3ytr708DbRHXNZycammjYG/QW4E3VnnrArzrM0smecLcyKHDlfQej/R25DCuduIo2elr3071zhIcnSFzb/YqdpbEMfoJLh+p/gjbnfd6WRK0JlVRVuK9L+72BY0QN7K70ruGZan/Ioal5ZoKeEcrsUYPCxYs4LfvvRd23xPfIv3//OlP+lbHca5yum0nH+2rgt4S+rsaGP+a3Mm1rn4+KtsY/m3Bzlaa20r5qNJf3T3yGxs56t/vOE6t5TWBoLUe3xRdfNdoXOVYw9LAGgaO49ReBUKugXEcj1VvpPKR6o+0vYn/XHqEjxor/RX57gsnfzh+kKONjey1VL9I8mSsLC72xC7m9XRkhHnz5yezP9NKpFAZHR3lv//4RwAyMzXYE5HZxZabiyvkg3Sj8X8jbnNzc/qOVCZrbGyM02fOKExSauLV8tGvtBeRqaJQiYPH4+GLL74IfGmXpMpVjtVpHkdkOtLLbRERMUahEoevvvqKe729qe6GiMi0pekvC7oc3o8HTItrTUREEqBQieH27dt0dob7gEAREQml6a8onjx5wqXLl1PdDRGRGUOhIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMUahIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMUahIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMUahIiIixmSlugMJqTjI0ffheF0T7Va2A2Cn+shhKpd4/3J8Wsex9mjbQ5tsZG+J9/e+tgbqW51h9vXT1lDPKefE40VEZrMZGiq+AOh14LC0PVgh987WUdsO2Ks4cvggFe1NtEfcHlx9FUu76qhtAqjgUOM+qju84VFxsJEdfQ3U1ilJRCR9zdDpLyen6uuobeqyuD1YO+3+pHD20hdze3D1rZwKpMwd+vr9v1dQVtDGJ60KFBFJbzM0VOJUcZCjR6pYPmF7KSWOrolTZMHbIx1LIflLernn9JXvzWdXYyNHGxsjlBcRmf1m6PRXYpZXHeFw5RJwfEptU3vM7eFUHHyf/LaGF4FUUkBfQx21vqmwD6o6xq23iIikg/QIlfYm71qJzw+t9dS24h2FNO4ILKqH3R5yrH/dpqRr/CI9jrOBhfn2Lgd7SwsBhYqIpJf0mP6KpL2J444l5Bda3I6d6iP7oKVOoxARkTDSI1SC10UqKqh4sYOykn767kTbHnzsLip7z058q3B7F46SHVTbAexU7yjB0RV9+kxEZDZKj+mvYHcK2NHYyF7fn45P63whEWF70GhleUEBlJRwtPH9wDbvtSrtHGso4MjhRiq9B4dMmYmIpIeMlcXFHquFn46MMG/+/GT2R0REUsyWm4vr4UPL5X+9ezcAzc3NaTL9JSIiU0KhIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMUahIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMUahIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMUahIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMUahIiIixihURETEGIWKiIgYo1ARERFjFCoiImKMQkVERIxRqIiIiDEKFRERMSYrnsIFBQXJ6oeIiMwCcYWK6+HDZPVDRERmAU1/iYiIMQoVERExRqEiIiLGKFRERMSYuBbqI3ny+LGJahK2YOHCqPvVz/jMln4CZOCZgp5IqnjIiLhvpjxPZ0o/Y0k4VJ48fsyywsJEqzHi7p07Ee8Q9TN+s6GfwUZGnk5Bb2SqzZ8/L+K+mfI8nSn9tMLISMXjmRmvAv39LHr5ZXr+/e+U/Wu1n9PdTOknQEaG95XsvPnzU9wTMS0jA6I9FWfK83Sm9DOWtFtTCT6xp+pfEZHZKu1CJZUn9qKXX05Z2+nOP1KR2UeP7fSSdqGSyhO7RioiMtul3ZrK9z09KWt/RVGRpfZn0v05U+jV7OzlfWwjPxdnyvN0pvQzFiOhMpNYPbEnQyoDTUSsWZz5jDezR1g5xw1AYdZzAO48m8Pt59kA/NU9n/tjU3f6nDNnDkuXLqW3txeAZ8+exXV8VlZW4AOB7927x/Pnz433MdCW6Qrf2rSJxYsXA3D//n2ufPWVpeOKi4spevllzl+4YKRcJPGe2P3tAZb6BkTsn6lA27Z1a2Aqrbu7O2ZZ8E69xSprol9W2ppMn/zPq/v37wNYfl75aaQye5l8bDdnP2bX/MfMzZg4alie9ZzlWU8AeDN7hDMjC7nkTuyaDqsKCwtZv24dD30f6vvVX/+K2+22dGx2djZvbdpETk4OANdv3ODfSZyKNx4q/kAJ/T2aVatWsXbNGmPloonnxB5Pe1bKmhqp5OTkUPLznwPeVyD//Oc/o5YFKPn5z2OWNdEvK21Npk/+55LV51RSVRzk6PtwvK6J9pBdy6uOcLi0i4b6Vn4IFG9kbwlAP20N9Zxy+usoAaCvrYH6Vmfy+lraRW1TaE8TrNPC7afqCIcrl4SUcHiPm6rbb8EcPHyw0HuyXjN31NIxczM8VC34kVVZbj55nAvA8ygXYCbq3r17DBUXk5vrbWvTm29aCpbgQBkaGgrUlUxJX1OxNE8YVCZqeavlovTl9vffx3PAhOMTKbtyxQpL7cd12zwe6+XjKWupuuj3h9XHfrKPZTzMvJq1U33kMJW9Dhxh91ewq3IJ9AdtOdjIjr4Gauuc48oder+AtoY6TjkrONS4j+oOX9gYZad6RwFtLU3m6ovj9v/QWk9t64u9y6uO8AFnaKeCQ+/D8bo67+8J3v5Yj22s54onwU9b8Nef6P9Z8ZxHPb5tMW9bmP1WjktESt/9tXrVKlavWsXatWuNlLNi5YoVlvtmtT2rZeMKNIvWrl3L6lWrjJdNlNW2prJPiXNyqr6O2qausHuXV+2Atjb6AlsqKCto45PQV+H2AvL7u+hwArTT6VhCfjIupraXU9J71mBYxXv7g1Wwq7KXs61OqCilxNHlG+W0c6YNSsrtpjoZt/+z4EfWzB21PEoJtmbuKLsXPGb3guR+xMro6CiXr1xhaGiIoaEhbLm5bNq0iezs7LDls7Ozyc7O5u233gqMUi5fucLlK1cYHY3/dsYjZSOV1atXhz0Rh5a3Ws4Kj8dD9+3bUcusXr0awHKb8fSveOXKmO1HOjaatWvX4gH+8Y9/WC6LxfLRxOqn1bYm06fUjFSisFfxQf5Z6s8UcKTUt62ilJJeoLER7+xXm3dazNmBg32U21v5wVlBWYmDTlODiSDLy0vp62qNXdCEcLc/WEUp+W1naAeWFxTQ13cmsOuH3l7ySwuByaVfIiOVgsxnvDVvZFLt+m2e511n+dvTefQ9nzPpemI9p58+fcqly5e9bb79NrbcXN5+663ANv9UmD9MgECgXLp82fIaTKJS8u6v1atX87qFV/ZWy8Uj2ok9nvb84RNP/6wEymQF9yPWiTmesomy2tZU9sk8O9X7SnG0tAJV43eVFNDXUEet0zsV9kFVB/WtTk61dHHkcCOVgOPTuglrE4nzjgw664xXHEaU2+/fv6MAR0vq1k0i+cX8pwlP1/iP/0X2CK1PfpJol6LyB8Oly5fZ/Pbb5OTksPnttwPbgMB2YMoDBVIQKqkMFIh8Yo83UCbTN6sjlcmK98TsLz8VJ3GrbSWrT8kcqSyv2kdJVwv1TiB0FsfxYvqpvcvB3tJCsJdzZB98UlfHD3jD5hB1HDOZLEEjg2SLevshMA1Xn6RMSeSxXZNlbipodZYbSG6o+Lnd7nHBAgTCJXhRfqoDBdLwOpVkn9ijSVW7kkzexel8DnO08sXWw0eg4Wz4I5aXl0JXS+DdYd6wqYB2UxEwlSODKLff9w640Gm40Omu0OkwmdmmbE2l0PexzrFe4S9btsxSucmuqdwKc11EYWGhpZGHx+OJq2yoV4qLw7Zv5dh4vL52LY8ePeLOnTtGy4aKt5/+tkz0afqsqbRzrC4oDOxV3lFIfSs/UIHj/R1U29s55bRTvaMEx9kmfqCU/B3lLG91ekcqpSVmT6pJHhmMF+32A9gpL4W+jqBD7vTR934pFbTTTgW7KsHRMPnOJrKmkpdp7iLA3DmJvasq3mOfPn3KxUuX2LJ5M8C4Ka+Lly4BTPkoBdJwpGL1xJ4MU9luPO/wSPa7QSbT1lT2KXnaOdZQEFg7wfEpte0ATTQUHOFwo++lveNTag1epzGlC/QxFZK/pJfO4JvnbKX+04McbWxkL941JfNvp556+iI4rykLFf+rzm++/TbqRYJWy01WuBP7nTt3LLcXT9lQUxVo33z7Lf39/bELxlk2UVbbmso+TU7Iq/Ngzlbq60P+rpt4gg+9hsOcCnaVdnEmqZkSx+2PVLa9yRewqeUay2TxnDEzdT2f2is0srOz2bJ587gRCnhHLP7Ry8VLl2bmmko8bym+efMmeDwRr+vwl7daLt5+vvrKK3x369aEfbHaC9c3CP/W40j9C9eu1WOt+Oabb7z98/1rpbzVsuHE00+rbVktN1s+fM+8do7Vxy6VTqI9V751Z7F4gZmT7j+ezZ2y6a952dls9gXKQ/+i/MWLAGzesoVc/+L95s1cuniRp1MYLGn30fdWT+zJ8Oorr6SsbRGRqZCSNRX/K9FYV6FbLRePSCOV4Pbi6ZuVsn7JDLR4Rh3xjmgSYbWtZPdJHyg5eyXy2H41Mo9NC9xM/pJF8C/1/+1J+KvbTZrnu4LePxp5ODQUGKH4RyOXLl5k85YtAOTm5LB5y5YpHa2kbKHe6kl5MifvaGKd2ONtL57gixZoiYg3UKYiTOJpayr7JBLs3lgWXz3JZnMCU2CXR+YF6kqmednZ48LCHyihYfHU7Z4wFeYPFv/+ZErpB0p+ffOmtwwv3kIcrrzVclb6+dqrr/Kv776LWfbrmzfHtRetTatlrbQbrZ1wbn7zjXeNx3BZK6L102pbk+3T9HlLsaRaoh8oefLHBfzMt1i/Nju+7yn5xp1F6/B8bzuGPpgynLlz57J58+bAWsnDhw+5eOkST58+DVt+xLf94sWLbNm8mdzcXDb7Fu8vfPllUt9daTxae3t7A18G4/9CmVhu3rzJ4OAgxStXGikXjdUTe7zt+csCEctbDbRY7t69G7iQMtbHWN+9exfwXniZ7I+8ttrWZPrkf15ZfU6JWPWcDP5r6CUAts4fYffCEbJjrDa7x+D04/lcGJk/BT2E5cuXk5ubG/g+lWiBEsx/Lcsvt2wJfGx+0csvJ3UqPu0W6l979dWUtW0iUGRyNFKZvfTYTi8ZK4uLExqzPXn8mEU/+5mp/iRk4MEDFiwM/01s06Gf/pHKdO+n32zop99LP1nIgwcDzJs/Na8sZeq89JOFDP8Y/qPnJ/M8XTLnOZvmu3ltrncqzO77OmHnszn8a9Q7ufPVSDb9cX4icSL/P82ZM4fldjt3fKP8eKev5s6dS6Hv00p+cDqjfp2wlf+fQv16924Ampubk7+mMp14PB5WvfYa//zXv1LSvtV2Z9L9OVPo1ezsleiaStSkAx4AAAE2SURBVKi+Z5mcHLby4sPs8z9aP589e5bQ9zG53e6kfJ9TOGk3/ZWqQAFY9dprKWtbRGQqpN1IZfWqVfwjid/THo3VdmfS/TlTaKQye5keqaTKTOlnLGk3UklVoAAz6GtzRUQmJ+1CxX9iT8W/qQy0dKeRyuylx3Z6MfLuL1tenqn+JMQ1OBj13RXqZ3xmQz/9cnN+Sl9fv979NQvl5vyUh0Phv6dnpjxPZ0o/IzH67q8FCxfi8l30l2rR7gj1M36zoZ9+GRkZFBTkT0FvZDqZKc/TmdJPK4ws1Cfaiamifpo1U/oJ4Ho4lOouSIrMlOfpTOlnLGm3piIiIsmjUBEREWMUKiIiYoxCRUREjFGoiIiIMQoVERExRqEiIiLGKFRERMQYhYqIiBijUBEREWMUKiIiYsz/Byq5lVYbuZF5AAAAAElFTkSuQmCC[/img]
OnTransReply не вызывается по транзакции transaction_stock_kill (в этом же скрипте ранее транзакция на выставление заявки - по ней OnTransReply вызывается и .result_msg выходит). Т.е. физического действия не происходит, хотя программно транзакция проходит, т.к. TRANS_ID присваивается
Номер заявки совпадает с табличным в QUIKе (первое сообщение в коде). Транзакции на снятие заявки проходит - второе сообщение в конце с TRANS_ID выходит (т.е. транзакция прошла), а по факту снятие активной заявки не происходит, почему так? чего не хватает?
В таблицах транзакций и сообщений все ном, записей по ошибкам нет.
Сегодня и по фьючерсу не вызывается... Cкрипт подачи заявки стандартный, заявка то выставляется, а OnTransReply не вызывается. Проверяю на простое действие:
function OnTransReply (order) message ('chto-to otozvalos') end
выходит только стандартное окно выставленной заявки, а моего окна не выходит.
p.s. как листать окна знаю, нет там его. это я в демо-версии балуюсь, может в этом дело?
Напрочь отказывается вызываться функция OnTransReply для опционов. Один в один написан код для заявки на фьючерс и опцион, по факту обе заявки системой выставляются, по итогу OnTransReply для фьючерса вызывается, а для опциона нет. Пробовал и вместе, и отдельно опцион запускать - ни фига. p.s. подскажите, а есть на форуме поисковик по ключевым словам? может этот вопрос был в другим темах, но при отсутствии поисковика очень трудоемко все листать
Спасибо за ответ. Очевидно, что Ваш уровень знаний в QLUA значительно выше моего, поэтому мои формулировки могут показаться дилетанскими, не спорю. Правильно тогда мой вопрос будет звучать как: Результатом работы скрипта получается таблица как ТИП ДАННЫХ, которую нужно сохранить в файл.
Цитата
Цитата: Вам надо найти реализацию нагугленной вами этой функции или написать ее самостоятельно
в этом и вопрос как ее написать - никаких функций для этого я не нашел, даже зацепочки. Неужели такая стандартная задача до этого никем в QLUA была не востребована и не изучена?
Не могу разобраться как сохранить результаты работы скрипта в файл. Нагуглил про функцию 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 и не останавливает скрипт. Как это реализовать?