Есть желание поэкспериментировать в выходной день, но в выходной день DS:SetUpdateCallback(....) не приходят, но мы можем тиковый график сохранить в файл. Для имитации SetUpdateCallback(....) я хочу с помощью луа читать файл с тиковыми значениями (построчно) и заносить в DS. Ввиду отсутствия опыта, прошу помочь, как это реализовать - чтение из файла и введение новых значений в DS.
Возник такой вопрос: Есть разница в частоте получения данных по разным интервалам вариант 1 -> CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_M1) вариант 2 -> CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_TICK)
Разница в организации данных (минутные свечи при INTERVAL_M1) понятна.
Есть несколько файлов, во всех примерно один набор переменных, функций. При корректировке приходится менять везде, поэтому появилась идея -> определить все общие переменные и функции в одном файле и включать его/их в файл основной программы. Какие возможны проблемы при таком подходе (видимость переменных, функций .....)?
ЗЫ Вопрос теоретический, к квику отношения не имеющий, но боюсь, что моего английского не хватит для полного понимания документации на луа, думаю, что это поможет многим начинающим избавиться от мартышкиного труда.
Добрый день Не могу разобраться я выставил заявку (не смотрите, что она рыночная) local Transaction={ ['TRANS_ID'] = tostring(TRANS_ID), -- Номер транзакции ['ACCOUNT'] = ACCOUNT, -- Код счета ['CLASSCODE'] = CLASS_CODE, -- Код класса ['SECCODE'] = SEC_CODE, -- Код инструмента ['ACTION'] = "NEW_ORDER", -- Тип транзакции ('NEW_ORDER' - новая заявка) ['OPERATION'] = "S", -- Операция ('B' - buy, или 'S' - sell) ['TYPE'] = "M", -- Тип ('L' - лимитированная, 'M' - рыночная) ['QUANTITY'] = "1", -- Количество ['PRICE'] = tostring(OpenPrice) -- Цена }
Теперь мне надо ее снять local Transaction={ ['TRANS_ID'] = tostring(TRANS_ID), -- Номер транзакции ['ACCOUNT'] = ACCOUNT, -- Код счета ['CLASSCODE'] = CLASS_CODE, -- Код класса ['SECCODE'] = SEC_CODE, -- Код инструмента ['ACTION'] = "KILL_ORDER", -- Тип транзакции ('NEW_ORDER' - новая заявка) ['OPERATION'] = "B", -- Операция ('B' - buy, или 'S' - sell) ['TYPE'] = "M", -- Тип ('L' - лимитированная, 'M' - рыночная) ['QUANTITY'] = "1", -- Количество ['PRICE'] = "0" -- Цена ["ORDER_KEY"] = TRANS_ID_OLD -- "<номер снимаемой заявки>" }
1. Какие варианты снятия существуют: 1-перебор таблицы заявок, 2-снятие по ["ORDER_KEY"], 3-какие еще? 2. не могу найти описание ВСЕХ полей таблицы Transaction, в одних примерах нет поля ["ORDER_KEY"], в других оно есть 3 при выставлении определенных видов заявок, требуется заполнение полей, которые лишены смысла при таком типе заявки и эти поля не помечены как "обязательные" 4.Если я устанавливаю ['ACTION'] = "KILL_ORDER", то такие поля как OPERATION, TYPE, QUANTITY, PRICE (может и другие) вообще теряют смысл? Важно только поле ORDER_KEY - номер снимаемой заявки(если я правильно понимаю назначение этого поля), или и другие поля необходимо заполнять?.
Для тех.поддержки по поводу хелпа к луа Я, думаю, тут не так много людей, которые пишут что-то подобное игре в "крестики-нолики". Пример этой программы, безусловно, интересен и позволит расширить функционал интерфейса программ на Lua, но хотелось бы видеть примеры реализации простейших вещей: выставление заявок(рыночных, лимитированных, условных,...), снятие этих заявок, отслеживание исполнения заявок.
Хочу знать о заявке все: принята сервером, поставлена в очередь, исполнена частично(сколько сталось), исполнена полностью, снята(пользователем/системой) Я представляю такой алгоритм 1. sendTransaction() - отправляем на сервер 2. OnTransReply(trans_reply) - ждем и анализируем состояние транзакции. Если 3 то транзакция выполнена (я считаю, что заявка поставлена в очередь.) 3. Отслеживать исполнение заявки частичное/полное мне надо с помощью OnOrder() или OnTrade() и в чем разница между этими функциями? 4 Что бы снять/изменить заявку мне надо использовать sendTransaction() или что? По какому параметру определять, что это одна и та же заявка?
Теоретическая разница получения данных CreateDataSource+SetUpdateCallback или getNumCandles()+getCandlesByIndex(), В чем разница получения данных 1 способом и 2 способом
Добрый день В прошлой версии форума я задавал вопрос про массивы и очереди, так вот - разобрался!!! Выкладываю код, может кому понадобится ********************************* Queue = {}
function Queue.new(q_size) return { first = 0, last = -1, max_size = q_size } end
function Queue.push( queue, value ) queue.last = queue.last + 1 queue[queue.last] = value
if queue.last >= queue.max_size then local val = queue[queue.first] queue[queue.first] = nil queue.first = queue.first + 1 end end
function Queue.pop( queue ) if queue.first > queue.last then return nil end
local val = queue[queue.first] queue[queue.first] = nil queue.first = queue.first + 1 return val end
function Queue.empty( queue ) return queue.first > queue.last end
function Queue.get( queue, pos) if queue.first > queue.last then return nil end if pos > queue.last then return nil end
local val = queue[queue.first + pos] return val end ********************************* Использование: q = Queue.new(5) -> Создаем очередь фиксированной длины, в данном случае - 5 элементов. По мере добавления новых элементов, лишние(свыше 5) удаляются qq = Queue.new() -> Создаем очередь бесконечной длины v1 = Queue.get(q,0) -> Доступ к элементу v2 = Queue.get(q,1) -> Доступ к элементу v3 = Queue.get(q,2) -> Доступ к элементу v4 = Queue.get(q,3) -> Доступ к элементу v5 = Queue.get(q,4) -> Доступ к элементу v6 = Queue.get(q,5) -> Доступ к элементу
Если ГУРУ заметят ошибки в коде - прошу высказать!!!