Sergey Gorokhov написал: Просто добавить условие фильтрации. Если сделка с таким номером по данному классу уже была то игнорировать.
Извините за глупый вопрос - как это сделать? Для этого есть какие то функции qlua? или же обычными средствами lua Во втором случае примерно понятно как это сделать
что именно не понятно? добавляете условие if и пишите проверку, все стандартными средствами lua никакой магии. Вы же умеете сравнивать две переменные? (if a==b then) вот это оно и есть. вопрос только в том как хранить ранее полученные данные можно просто в виде таблицы lua можно в файле как Вам удобней
что именно не понятно? добавляете условие if и пишите проверку, все стандартными средствами lua никакой магии. Вы же умеете сравнивать две переменные? (if a==b then) вот это оно и есть. вопрос только в том как хранить ранее полученные данные можно просто в виде таблицы lua можно в файле как Вам удобней
А да, сразу что то не подумал все просто, еще до того как вы ответили уже решил проблему примерно так function OnInit ()
ordn=0 tr=0 end
function main() while is_run do tr=0 ordn=0 sleep(1000) end;
function OnOrder (neworder)
if ordn==0 then ordn=neworder.order_num .... end
function OnTrade(trade_data)
if tr~=0 then return end if tr ==0 then tr=trade_data.trade_num ... end
Но хотелось бы знать почему на выполнение одной заявки на покупку одного лота приходит три ответа с разным временем? Это временный глюк на сервере или эти дубликаты могут иметь какое то значение?
Вообщем сравнил результаты выгрузки таблиц OnOrder (neworder) и OnTrade(trade_data) в файл (дубликаты по одной и той же сделке) Таблицы neworder отличаются значениями withdraw_datetime, datetime и uid, причем 1ый uid=0 а второй uid = 132894 Таблицы trade_data отличаются значениями canceled_datetime (Какой тут может быть canceled_datetime? заявка ведь выполнена) и datetime
Люди подскажите пожалуйста - как при запуске скрипта, из секции OnInit () сразу узнать текущее состояние баланса денежных средств, исходя из справки для этого служат функции getMoney и getMoneyEx, им нужно передать параметры (STRING client_code, STRING firmid, STRING tag, STRING currcod client_code можно получить а как получить firmid, tag и currcod? Их можно получить либо по результатам из таблиц ontrade или onorder но для этого уже после запуска скрипта создать заявку, либо прописать вручную, но допустим я хочу максимально автоматизировать скрипт - чтобы он без совершения каких либо сделок или заявок сам каждый раз узнавал все нужные рабочие параметры, без прописывания их вручную, терминал ведь знает все эти параметры сразу после соединения с сервером
Анатолий написал: а как получить firmid, tag и currcod?
Функции getMoney и getMoneyEx, обращаются к лимитам по деньгам, следовательно посмотреть нужные данные можно в таблице лимитов по деньгам. firmid - это фирма tag - это тег (код позиции) currcode - код валюты.
Цитата
Анатолий написал: терминал ведь знает все эти параметры сразу после соединения с сервером
Да знает. Но он не знает от какого счета Вы будете торговать и какой вид лимита использовать при торговле. И никто не знает, кроме Вас. В терминале может быть далеко не один код клиента/торговый счет. И позиции могут вестись далеко не только за рубли. Следовательно автоматики в это месте нет.
Но, Вы можете написать алгоритм который будет искать нужные параметры в таблицах лимитов через функцию getItem. Она не требует указания фирмы/счета и прочего, а только номер строки из таблицы. Следовательно, можно написать цикл который будет перебирать все строки до нахождения нужной и брать из нее данные.
Алексей Орешкин написал: Сделал видео как это проходит у меня.
Добрый день.
Данная ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Посмотрите, пожалуйста, смежную проблему с "лишними" вызовами OnCalculate. При редактировании параметров какого-либо индикатора он пересчитывается 3 раза, а все остальные на диаграмме - по 2. При большом количестве ресурсоемких индикаторов работать становится сложно. Версия 7.2.1.5. В версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные не трогались. Нельзя ли вернуть прежний порядок?
Здравствуйте,
Судя по описанию эта такая же проблема, описанная выше. Сейчас и правда OnCalculate работает некорректно. Над устранением ошибки работаем.
Ребята, это не хорошо! У вас два основных инструмента, и один не работаем, на втором цикле изменены значения внешних переменных, результат получается неожиданный. У меня месяц ушел, что бы понять в чем дело. Печально Жду с нетерпением рабочего варианта!
Здравствуйте. Вопрос к поддержке и участникам форума. В версии квика 11.3.1.2 опять такие же глюки, как двойной прогон функции OnCalculate?? А также, при подсоединенном индикаторе, вызов таблицы "добавить график (индикатор)", но при отказе от добавки, происходит его новый проход???
Количество вызовов OnCalculate зависит от событий, возникающих при добавлении в диаграмму новых индикаторов и от событий перерисовки самой диаграммы. Возникающие при этом лишние OnCalculate мы уберем в очередных версиях ПО.
Возникла такая проблема. Может кто подскажет. Мой скрипт стал эпизодически останавливаться с ошибкой "attempt to perform arithmetic on a nil value". Сама ошибка понятна, но проблема заключается в том, что в этом сообщении не указывается номер строки, в которой эта ошибка произошла. Обычно при появлении таких ошибок в сообщении указывается и номер строки, благодаря чему можно найти ошибку и устранить. Я первый раз с таким сталкиваюсь. Есть ли какие-нибудь ещё способы определить строку, из-за которой эта ошибка произошла?
Igor_User написал: Есть ли какие-нибудь ещё способы определить строку, из-за которой эта ошибка произошла?
Lua предоставляет несколько подходов для обработки и обнаружения ошибок, а также для организации процесса работы с ними. Основные способы обнаружения ошибок, использование pcall или xpcall. Если нужно не только отловить ошибку, но и логировать её с дополнительной информацией ( место ошибки, стек вызовов и т.д.), можно использовать debug или писать собственное логирование.
Igor_User написал: А что такое debug в QLua? В справке такого нет. Где можно почитать об этом?
Читать нужно сам язык луа не ниже версии 5.4 - это его таблица, QLua - это библиотека от разработчиков для возможности доступа и взаимодействия срипта с рабочим местом квик.
Igor_User написал: Возникла такая проблема. Может кто подскажет. Мой скрипт стал эпизодически останавливаться с ошибкой "attempt to perform arithmetic on a nil value". Сама ошибка понятна, но проблема заключается в том, что в этом сообщении не указывается номер строки, в которой эта ошибка произошла. Обычно при появлении таких ошибок в сообщении указывается и номер строки, благодаря чему можно найти ошибку и устранить. Я первый раз с таким сталкиваюсь. Есть ли какие-нибудь ещё способы определить строку, из-за которой эта ошибка произошла?
Igor_User написал: Есть ли какие-нибудь ещё способы определить строку, из-за которой эта ошибка произошла?
message("OK") и дихотомия. Ставим message в середине скрипта, если выскочило "OK", значит, ошибка дальше. Нет - до него. Делим проблемный кусок дальше. И т.д.
Как использовать getParamEx для создания индикатора? Написано что функция возвращает таблицу, но мне нужно только одно значение и с какими аргументами её вызывать? Будет ли корректной запись "local C = getParamEx ( , , PREVLEGALCLOSEPR)"? Как мне использовать его чтобы он показывал для инструмента который я выбрал из таблицы текущих торгов и нужно ли мне добавлять в таблицу значение чтобы его можно было использовать? В моем случае цена закрытия предыдущего дня.
Михаил Горбатский написал: Как использовать getParamEx для создания индикатора? Написано что функция возвращает таблицу, но мне нужно только одно значение и с какими аргументами её вызывать? Будет ли корректной запись "local C = getParamEx ( , , PREVLEGALCLOSEPR)"? Как мне использовать его чтобы он показывал для инструмента который я выбрал из таблицы текущих торгов и нужно ли мне добавлять в таблицу значение чтобы его можно было использовать? В моем случае цена закрытия предыдущего дня.
Не в обиду, но Ваше непонимание в первую очередь вызвано незнанием языка lua. Поясняю Функция луа может возвращать либо скаляр, либо таблицу. В данном случае возвращается таблица ее формат указан в документации к библиотеке QLua:
Функция возвращает таблицу Lua с параметрами:
Параметр
Тип
Описание
param_type
STRING
Тип данных параметра, используемый в таблице «Текущие торги». Возможные значения:
«1» - DOUBLE;
«2» - LONG;
«3» - CHAR;
«4» - перечислимый тип;
«5» - время;
«6» - дата
param_value
STRING
Значение параметра. Для param_type = 3 значение параметра равно «0», в остальных случаях – числовое представление. Для перечислимых типов значение равно порядковому значению перечисления
param_image
STRING
Строковое значение параметра, аналогичное его представлению в таблице. В строковом представлении учитываются разделители разрядов, разделители целой и дробной части. Для перечислимых типов выводятся соответствующие им строковые значения
result
STRING
Результат выполнения операции. Возможные значения:
«0» - ошибка;
«1» - параметр найден
================ при вызове этой функции надо указать три параметра class_code --код класса инструмента sec_code --код инструмента param_name -- название параметра инструмента. Это параметры таблицы TTT (название столбца на англ яз) --------------- class_code и sec_code при написании индикатора можно получать с графика (см функции в док QLUA)