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

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

Страницы: 1
Имитация SetUpdateCallback(.....)
 
Добрый вечер.

Есть желание поэкспериментировать в выходной день, но в выходной день DS:SetUpdateCallback(....) не приходят, но мы можем тиковый график сохранить в файл. Для имитации SetUpdateCallback(....) я хочу с помощью луа читать файл с тиковыми значениями (построчно) и заносить в DS.
Ввиду отсутствия опыта, прошу помочь, как это реализовать - чтение из файла и введение новых значений в DS.

Спасибо
Функции O, H, L, C, V, T, вопрос по ds:T(1).count
 
Это количество сделок, совершенных в один момент в течении 1 сек.?
Функции O, H, L, C, V, T, вопрос по ds:T(1).count
 
Я понял так, что в пределах каждой секунды    count изменяется от 1 до 10000max и можно считать сколько    count- столько сделок в течении 1 сек?
Функции O, H, L, C, V, T, вопрос по ds:T(1).count
 
Добрый вечер

В хелпе, в описании функций  O, H, L, C, V, T
есть разъяснение:
Где:  
  • count – количество тиковых интервалов в секунду. Может принимать значения от  «1» до «10000» включительно.
Вопрос: count - это кол-во тиков в секунду?, другими словами кол-во сделок в секунду, или я не правильно понимаю?

Спасибо
Как включить файл в луа?, Есть ли в Луа аналог директивы include из С
 
Спасибо dofile работает
Как включить файл в луа?, Есть ли в Луа аналог директивы include из С
 
Цитата
swerg написал:
require
вчера пробовал, выдает ошибку - не находит модуль
Частота получения данных
 
Спасибо
Частота получения данных
 
Спасибо,

Другими словами (чтобы крестьянам было понятно), например за 1 сек. я по варианту 1 и 2 получу данные (например) 10 раз?, т.е. получаемые данные не зависят от интервала (от интервала зависит организация предыдущих данных по временным интервалам)
Частота получения данных
 
Добрый вечер

Возник такой вопрос: Есть разница в частоте получения данных по разным интервалам
вариант 1 -> CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_M1)
вариант 2 -> CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL_TICK)

Разница в организации данных (минутные свечи при INTERVAL_M1) понятна.

Спасибо
Как включить файл в луа?, Есть ли в Луа аналог директивы include из С
 
Добрый день

Есть несколько файлов, во всех примерно один набор переменных, функций. При корректировке приходится менять везде, поэтому появилась идея -> определить все общие переменные и функции в одном файле и включать его/их в файл основной программы.
Какие возможны проблемы при таком подходе (видимость переменных, функций .....)?

ЗЫ Вопрос теоретический, к квику отношения не имеющий, но боюсь, что моего английского не хватит для полного понимания документации на луа, думаю, что это поможет многим начинающим избавиться от мартышкиного труда.

Спасибо
Снять заявку
 
Чем дальше в лес, тем ......
В функции OnOrder(order) в таблице order есть
trans_id NUMBER Идентификатор транзакции
Это номер транзакции, отправленный в sendTransaction?
Снять заявку
 
Еще один вопрос.
1 отправка транзакции на сервер Идентификатор транзакции ->TRANS_ID
2 по OnTransReply(trans_reply) Получаем номер заявки ->orderNum = trans_reply.order_num

Вопрос: Если OnTransReply не дойдет, то как узнать номер заявки, которая была выставлена по транзакции TRANS_ID?
Снять заявку
 
https://forum.quik.ru/messages/forum10/message11477/topic996/#message11477
Вот в этом примере в ф-ции заполняются только эти поля
        local transaction={
                 ["TRANS_ID"]=tostring(1000*os.clock()),
                 ["ACTION"]="KILL_ORDER",
                 ["CLASSCODE"]=classCode,
                 ["SECCODE"]=secCode,
                 ["ORDER_KEY"]=tostring(getItem(ord,orders[i]).order_num)
           }
Для не посвященного сплошной мрак  :sad:
Снять заявку
 
Цитата
Владимир Б****ов написал:
или и другие поля необходимо заполнять?.
Поля, определяющие счет, код класса, код бумаги - обязательны к заполнению (я это понимаю  :smile: )
Снять заявку
 
Добрый день
Не могу разобраться
я выставил заявку (не смотрите, что она рыночная)
     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, но хотелось  бы  видеть примеры реализации простейших вещей: выставление заявок(рыночных, лимитированных, условных,...), снятие этих заявок, отслеживание исполнения заявок.

Спасибо
Видимость переменных в калбэк функциях
 
Спасибо всем, вопрос решен
Видимость переменных в калбэк функциях
 
Добрый день

Из за того, что калбэк функции выполняются в других потоках, возник такой вопрос
Например

local var1 = 3
local var2 = 5

function OnInit
 DS:SetUpdateCallback(MyMainProcess)
end

function MyMainProcess(index)
 var3=var1+var2
end

Вопрос: чему будет равняться var3?

ЗЫ: Я понимаю, что это легко выяснить, но калбэк функции в выходной не работают

Спасибо
Теоретическая разница получения данных CreateDataSource+SetUpdateCallback или getNumCandles()+getCandlesByIndex(), В чем разница получения данных 1 способом и 2 способом
 
При создании ds в создателе/конструкторе указывается временной интервал графика INTERVAL_M1
ds1 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1, "last")
Это меня немножко запутало, я посчитал, что это интервал передачи данных, а на самом деле формирование свечей по времени - каждая свеча - INTERVAL_M1.
Теоретически, по времени, есть разница между колбэком и таймером (sleep()), а практически разница заметна? может кто проводил измерения/исследования?
Какой вариант предпочтительней: SetUpdateCallback или sleep()+getNumCandles()+getCandlesByIndex()?
Возможно SetUpdateCallback при не сильно нагруженных вычислениях/обработке будет меньше грузить машину и будет грузить только по существу?
Теоретическая разница получения данных CreateDataSource+SetUpdateCallback или getNumCandles()+getCandlesByIndex(), В чем разница получения данных 1 способом и 2 способом
 
Цитата
Николай Камынин написал:
CreateDataSource+SetUpdateCallback  -  получаем данный в момент прихода их с сервера,
Т.е если таймфрейм установлен в 3 минуты - то получение данных ~ 1 раз в 3 минуты, т.е. объективную информацию по последней свечке(текущей) мы не знаем, знаем только по предпоследней?
Хочу знать о заявке все. Алгоритм действий
 
Доброе утро

Хочу знать о заявке все: принята сервером, поставлена в очередь, исполнена частично(сколько сталось), исполнена полностью, снята(пользователем/системой)
Я представляю такой алгоритм
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) -> Доступ к элементу


Если ГУРУ заметят ошибки в коде - прошу высказать!!!
Страницы: 1
Наверх