BlaZed (Автор тем)

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

Страницы: 1
Шаг сетчика в операторе for, Некорректная работа оператора for при нецелочисленном шаге
 
Сегодня столкнулся с некорректной работой оператора for, если задать не целочисленный шаг счетчика

Простой пример
Код
for x=1,2,0.1 do
 message("x="..x)
end
Логично ожидать перебор значений от 1 до 2 включительно с шагом 0.1
Однако перебор значений идет от 1 только до 1.9

Пришлось выкручиваться костылем, типа такого
Код
for x=10,20,1 do
 message("x="..x/10)
end

Причем косячит не для всех шагов, например при шаге 0.2 все корректно.


QUIK 9.7.1.10
При снятии заявки перемерт account пустой
 
Имеется заявка, снимаю ее скриптом
Код
function main()
  local transaction={
    ["TRANS_ID"]  = "12345",
    ["ACCOUNT"]   = "4103YEK",
    ["CLASSCODE"] = "SPBFUT",
    ["SECCODE"]   = "SiU1",
    ["ACTION"]    = "KILL_ORDER",
    ["ORDER_KEY"] = "1892946353983939919"
  }
  sendTransaction(transaction)
  sleep(1000)
end

function OnTransReply(trans_reply)
  local str="OnTransReply\n"
  for k,v in pairs(trans_reply) do
    str=str..tostring(k).."="..tostring(v).."\n"
  end
  message(str)
end
Вывод скрипта
Код
OnTransReply
result_msg=Заявка 1892946353983939919 снята. Неисполненный остаток: 8.
quantity=0,0
class_code=SPBFUT
firm_id=MC0139600000
server_trans_id=1841
error_code=0
brokerref=
uid=160707
client_code=4103YEK
trans_id=12345
sec_code=SiU1
date_time=table: 000001AAA41E6A70
price=0,0
balance=8,0
gate_reply_time=table: 000001AAA41E6CB0
status=3
first_ordernum=0
flags=2359297
error_source=0
exchange_code=
time=102038
account=
order_num=1892946353983939919
Все отлично снимается, но один момент мне не нравится.

Почему при получении ответа на заявку параметр account пустой, я же задал его в таблице transaction?
Ну и главный вопрос, что мне исправить, чтобы при получении ответа на транзакцию параметр account был заполнен правитьно (ожидаю там увидеть "4103YEK")?

PS: На всякий случай сразу упомяну, что в снимаемой заявке поле account было заполнено правильно.



QUIK 8.13.1.16
Слои индикаторов на графике цены, Нелогичное отобраджение подсказки при наложении индикатора на график цены
 
Заметил одну неприятную особенность.
1) Берем любой график и накладываем на него индикатор (пускай будет MA)
2) В окне редактирования графика ставим Moving Average выше чем Price
3) На тех свечах где MA проходит через тело свечи (линия MA перед свечой), при наведении на MA не отображается подсказка со значением MA
4) В окне редактирования графика ставим Moving Average нише чем Price
5) MA "прячется" за телами свеч, зато если MA проходит через тело свечи, то при наведении мышкой на предполагаемое место нахождения MA видим подсказку со значениями.
По-моему такое поведение крайне не логично, надо наоборот чтобы подсказка отображалась если MA перед свечой, а если сзади то не отображалась бы.

Такая беда со всеми индикаторами, MA взял просто для примера.

Прошу исправить.
Что делает SetEmptyCallback() ?
 
Читаю описание функции SetEmptyCallback()
Цитата
Функция позволяет получать данные с сервера. Функция возвращает «true» в случае успешного завершения, иначе – «false».
Судя по описанию без нее новые данные не получишь.
Да и везде пишут, что при заказе надо делать так
Код
ds=CreateDataSource(class_code,sec_code,interval)
ds:SetEmptyCallback()

Итак. Вводные данные.
Выбираем инструмент который до этого не использовали, ну я выбрал "EuM1"
График инструмента не открываем, в заказе котировок указано "по выбранным классам" и данный инструмент не выбран, в папке archive файла с таким инструментам тоже нет.
Другими словами, QUIK пока еще никогда не получал данный инструмент.

Пишу простенький скриптик
Код
is_run=true
function main()
  ds=CreateDataSource("SPBFUT","EuM1",INTERVAL_M5)
--  ds:SetEmptyCallback()
  while(ds:Size()==0) do sleep(100) end
  while is_run do
    message("C="..ds:C(ds:Size()))
    sleep(1000)
  end
end
function OnStop()
  is_run=false
  return 100
end

...и он работает, данные обновляются.
Но почему данные обновляются?
Я же закомментил ds:SetEmptyCallback()

Всегда думал, что SetEmptyCallback() нужна для того чтобы поток данных обновлялся, но оказывается что нет.

Прошу знающих объяснить, зачем все таки нужна функция SetEmptyCallback()?
Первоначальные настройки индикаторов из LUA
 
Добрый день,
Заметил, что для всех индикаторов которые я пишу, при добавлении индикатора на график приходится снимать галочку "Поместить график в новую область", а в настройках индикатора выставлять галку "Показывать последнее значение"

Можно ли как-то из кода индикатора ставить и снимать эти галочки?
Определить выбранный язык QUIK из LUA
 
Собственно вопрос в теме.
Можно ли из LUA определить выбранный язык QUIK?
Фильтрация сообщений, Надоели ненужные сообщения
 
Добрый день.
Постоянно в окно сообщений валятся ненужные сообщения от биржи.
Например такие:
"[FORTS] Уважаемые клиенты, если цена останется на текущем уровне в течение 3 минут, то торги фьючерсами SLV будут приостановлены для 1-ого расширения верхней границы диапазона оценки ценового коридора и рыночных рисков"

А мне вот на фьючерс SLV вообще плевать, не торгую им и не собираюсь.

Причем не одно-два сообщения приходят, а в определенные моменты по 30-40 за 10 минут вываливаются. Полностью отключить сообщения не предлагайте, ибо иногда и правда что-нибудь полезное приходит.
Но вот этот "официальный спам" надоел.


Можно ли реализовать фильтрацию сообщений, по типу подписок?
Чтобы можно было бы указать по каким инструментам меня интересуют сообщения, а по каким нет.

Другими словами, чтобы биржа/брокер при отправке сообщения соотносили бы ее к определенному типу/инструменту, а со стороны клиента можно бы было выбирать какие сообщения видеть, а какие нет.
os.date() утечка памяти или нет?, при использовании os.date() память потребляемая скриптом растет
 
Добрый день.

Заметил, что при использовании в скриптах функции os.date() память потребляемая скриптом (смотрю в окне Доступные скрипты) растет до определенного предела, через некоторое время память возвращается к первоначальному объему.

Пример скрипта
Код
is_run=true
function main()
  while is_run do
  os.date()
  sleep(100)
  end
end
function OnStop()
  is_run=false
end

Почему подозреваю именно утечку?
1) Память увеличивается при обновлении данных функцией. Пример: os.date("%H%M%S") увеличение потребляемой памяти раз в секунду, os.date("%H%M") тут уже раз в минуту.
2) Проблема именно с данной функцией. Например если вместо os.date() использовать os.time(), то потребляемая память не увеличивается.
3) После определенного предела, память очищается до первоначального состояния. Как будто срабатывает сборщик мусора.


Используемая версия quik 8.9.0.107, на более старых версиях наблюдал такую же картину.
Страницы: 1
Наверх