Незнайка (Все сообщения пользователя)

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

Страницы: 1 2 3 4 След.
Неверно отображается комиссия в таблице сделок, за скальперские сделки на срочном рынке
 
вверх
Индикативные курсы валют
 
Транслируются ли в QUIK индикативные курсы валют? Ну те, которые используются для расчета стоимости шага цены.
Интересует, есть ли у какого-нибудь брокера в реалтайм?
А как тут зарегистрировать пожелание?
 
Цитата
Daniil Pozdnyakov написал:
Ваше пожелание зарегистрировано.
Логично было бы написать в теме с обращением. А то как будто зарегистрировали пожелание зарегистрировать пожелание.
Неверно отображается комиссия в таблице сделок, за скальперские сделки на срочном рынке
 
На срочном рынке МБ существует понятие "скальперские сделки":
Цитата
Срочные сделки, совершенные на основании безадресных заявок, приводящие к открытию и закрытию позиции по фьючерсу в течение одного Торгового дня
Комиссия по таким сделкам взимается только при открытии позиции. При закрытии позиции в течение одного Торгового дня комиссия не взимается.
Квик же показывает комиссию как по сделкам открытия, так и закрытия позиции.
Кнопка "С" в стакане (закрытие позиции) не срабатывает, когда есть другие выставленные заявки
 
Цитата
Dmitri написал:
Если выставлены другие заявки, то по нажатию данной кнопки она просто не срабатывает, брокер выдаёт ошибку.
Скорей всего, там превышение по лимитам из-за наличия активных заявок.

Цитата
Dmitri написал:
Логично было бы если по нажатии кнопки закрывается позиция и сразу же снимаются все выставленные заявки.
Если уж делать снятие заявок, то опционально. И в другом порядке: сначала снять активные заявки, а затем закрыть позицию.
А как тут зарегистрировать пожелание?
 
Цитата
Daniil Pozdnyakov написал:
какое пожелание Вы хотите зарегистрировать ?
https://forum.quik.ru/messages/forum8/message59315/topic6828/#message59315
А как тут зарегистрировать пожелание?
 
Вопрос - в теме.
Где посмотреть прибыль по отдельной бумаге в рублях за текущий день?
 
Цитата
Сергей написал:
В таблице Купить/Продать в поле Прибыль/Убытки данные не за текущий день, как просят многие пользователи, а суммарные прибыль или убытки.за все время.
Тут даже не за все время, а пока позиция открыта.
Как я понял, считается тупо как разница между средней ценой приобретения и текущей ценой, помноженная на количество бумаг.
Если в течение дня позицию закрыть и снова открыть, то весь предыдущий результат будет похерен.
Расширить список функций обратного вызова
 
Можно сделать функции, вызываемые в основном потоке квика:

Код
SetTimeout (func, [start [, ...]])
Вызвает функцию один раз через определённый интервал (delay) времени
func - вызываемая функция
start - время (в мс), через которое необходимо вызвать функцию, по умолчанию start = 0
... - список аргументов вызываемой функции
Если start = 0, то функция func вызывается немедленно синхронно. SetTimeout при этом возвращает результат работы func
Если start > 0, то func вызывается асинхронно через заданное время. SetTimeout возвращает идентификатор, который можно использовать в ClearInterval.

Код
SetInterval (func, delay [, start [, ...]])
Вызвает функцию регулярно, повторяя вызов через определённый интервал (delay) времени
func - вызываемая функция
delay - период повтора (в мс)
start - время, через которое будет первый вызов (в мс), по умолчанию start = 0
... - список аргументов вызываемой функции
Возвращает идентификатор, который можно использовать в ClearInterval.

Код
ClearInterval (id [, start [, delay]])
id - идентификатор функции таймера, параметры которой надо изменить
start - изменяет время следующего вызова
delay - изменяет период вызова
если start и delay не заданы, то таймер удаляется
Как в QUIK 9 можно экспортировать список всех инструментов?
 
Цитата
Иван написал:
Перерыл все таблицы в QUIK, но так и не нашёл.
Таблица "Текущие торги"
Далее "ПКМ - Сохранить в файл" или "Действия - Копировать все"
GetItem не работает с пользовательскими таблицами
 
Цитата
Alex написал:
Если все параметры уже находятся в пользовательской таблице то можно не использовать ParamRequest ?
Можно.
Но я всегда использую ParamRequest, чтобы потом не думать, добавлен ли параметр/бумага в пользовательскую таблицу и открыта ли она вообще.
GetItem не работает с пользовательскими таблицами
 
Alex, GetItem и getNumberOf работают только со стандартными таблицами. Они все указаны в руководстве.
Если вам нужны параметры бумаг, то надо использовать ParamRequest и getParamEx/getParamEx2
Нужен простой скрипт
 
Написал в ЛС
Просьба к модераторам форума
 
Здесь нет модераторов. Я оставил свою кандидатуру на вакантную должность. Предложений пока не поступало.
Предлагаю проголосовать за мою кандидатуру :wink:
Расширить список функций обратного вызова
 
nikolz, милейший, я не хотел вас обидеть, но вы всегда пишите не в тему, не заморачиваясь ее прочтением.
Вы сделаете себе одолжение, не встревая в чужие темы со своим чрезвычайно важным мнением, выставляя напоказ свою глупость.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Anton написал:
Тут идея в том, что пара onMainInit/onMainCleanup строго в мейне выполняется
С onMainInit еще понятно - если там тяжелый код, то чтобы при запуске скрипта QUIK не зависал, его лучше выполнить в main.

Цитата
Anton написал:
задача-то наоборот разложить по полочкам, чтобы с первого взгляда было понятно, что в каком порядке происходит.
Если только в образовательных целях.
На практике в выполнении onMainCleanup в main никаких плюсов не вижу. Или я чего-то не знаю ))
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Anton написал:
2) onMainInit как раз чтобы вынести бизнес-код из мейна, заодно весь мусор, созданный в процессе инициализации, попадет к коллектору сразу после нее, а не после того, как мейн закончится (т.е. никогда).
Тоже самое, если запихать содержимое onMainInit в блок do end?

Цитата
Anton написал:
1) OnStop снижает runStatus с 3 до 2 и крутит спинлок, не давая квику начать отсчет остатка жизни мейна.
А не проще onMainCleanup выполнить в OnStop? Ведь пока OnStop крутит холостой цикл, QUIK все равно ничего не делает.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Евгений написал:
других форумов где он уже заблокирован за вредоносную деятельность
Жаль, что на этом форуме не банят флудеров.
Расширить список функций обратного вызова
 
nikolz, брысь.

Цитата
Незнайка написал:
не все задачи можно выполнить штатными средствами QLua из main
Расширить список функций обратного вызова
 
https://forum.quik.ru/forum10/topic5983

Причина: не все задачи можно выполнить штатными средствами QLua из main:
https://forum.quik.ru/messages/forum10/message58915/topic6806/#message58915
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Anton написал:
лучше dofile вместо require использовать

Anton, почему?
Синхронизация потоков
 
Цитата
_sk_ написал:
Есть следующий "хак", гарантирующий, что выполнение кода будет только в одном потоке.

Код
   table.ssort ({  0 ,  1  },  function (a, b) 
  тут_ваш_код
   return   true 
 end )  

Запускаю одновременно два скрипта. Использую "хак", рассчитывая, что скрипты будут писать в файл по очереди:
Скрытый текст

Но в файле строки оказываются вперемешку:
Скрытый текст

Почему так? "Хак" не работает с файловыми операциями?
Колбек при отправке транзакции в торговую систему, Контроль количества отправляемых транзакций
 
Цитата
Незнайка написал:
Дать нормальное описание и/или привести в соответствие значения флагов:
https://forum.quik.ru/messages/forum10/message53237/topic6249/#message53237

Цитата
Незнайка написал:
262144 + 1 = "отправлена с помощью LUA" + "отправлена с помощью файла импорта"
Взаимоисключающие значения
Запись в один файл из разных скриптов.
 
Если писать только внутри колбеков, то в пределах одного квика запись в один файл из разных скриптов корректна.
Из разных квиков пока не придумал, как сделать.
Запись в один файл из разных скриптов.
 
Цитата
s_mike@rambler.ru написал:
правильный путь - это формирование флага. Например, если один скрипт хочет писать, он пробует создать папку-семафор на диске. Если папка создалась удачно, дописывает файл. Если при создании папки была ошибка (папка существует), то надо подождать. По окончании записи нужно закрыть файл и удалить папку.
В Lua есть штатные средства создания папки?
Если только создавать файл-флаг. Но это не поможет: несколько скриптов увидят, что флага нет и начнут запись одновременно. Результат будет тот же.

Цитата
s_mike@rambler.ru написал:
использовать механизмы мютексов или что то в этом роде, Но это уже с++
Для торговых ботов использую только QLua.
Если только Арка когда-нибудь сделает мютексы. Но рассчитывать, что это произойдёт в ближайшем будущем я бы не стал.

Цитата
s_mike@rambler.ru написал:
а ещё лучше пересмотреть логику скриптов, чтобы писать из одного скрипта
У каждого скрипта свои данные, которые он пишет в общий файл. Если вести запись только из одного скрипта, то другие скрипты должны будут ему эти данные передать. По сути это будет та же самая задача - обмен данным между скриптами.
Запись в один файл из разных скриптов.
 
Цитата
Владимир написал:
закрывать файл после каждой записи
И что это даст?

Цитата
Владимир написал:
объединять файлы после окончания работы скриптов
Исключено: файл должен заполняться реалтайм.

Цитата
Владимир написал:
использовать один скрипт вместо двух
На самом деле их не два. Объединять скрипты не планирую.
Колбек при отправке транзакции в торговую систему, Контроль количества отправляемых транзакций
 
Цитата
Roman Azarov написал:
Текущая реализация данных флагов именно такова. Опишите, пожалуйста, подробнее, в каком виде Вы бы хотели ее видеть?

Дать нормальное описание и/или привести в соответствие значения флагов:
https://forum.quik.ru/messages/forum10/message53237/topic6249/#message53237
Вы не можете заменить заявку XXX. Повторите попытку позже.
 
Daniil Pozdnyakov, сам скрипт прислать не могу. Но вы можете воспользоваться, например, этим:
Код
local run = true
function OnStop()
  run = false
end

local trans_id, order_num
function OnTransReply(trans_reply)
  if trans_reply.trans_id == trans_id then
    if trans_reply.status == 3 and trans_reply.order_num > 0 then
      order_num = trans_reply.order_num
    end
  end
end

function main()
  trans_id = getUniqTransID()
  local err = sendTransaction{
    TRANS_ID = tostring(trans_id),
    ACTION = "NEW_ORDER",
    ACCOUNT = account,
    CLASSCODE = class_code,
    SECCODE = sec_code,
    OPERATION = "B",
    TYPE = "L",
    PRICE = price,
    QUANTITY = "1"
  }
  if err ~= "" then
    message(err, 3)
    return
  end
  local n = 0
  while run and n < 100 do
    if order_num then
      trans_id = getUniqTransID()
      if sendTransaction{
        TRANS_ID = tostring(trans_id),
        ACTION = "MOVE_ORDERS",
        CLASSCODE = class_code,
        SECCODE = sec_code,
        MODE = "0",
        FIRST_ORDER_NUMBER = tostring(order_num),
        FIRST_ORDER_NEW_PRICE = price,
        FIRST_ORDER_NEW_QUANTITY = "1"
      } == "" then
        order_num = nil
        n = n + 1
      else trans_id = nil end
    end
    sleep(1)
  end
end
Обратите внимание, что статус транзакции и номер заявки, выставленной в торговую систему, проверяются.

Цитата
Daniil Pozdnyakov написал:
данная ошибка появляется постоянно при попытке заменить заявку или какие-то заявки меняются (то есть транзакция срабатывает), а какие-то нет ?
Наверное, второе.
Запись в один файл из разных скриптов.
 
Возможна ли корректная запись из разных скриптов в один файл?
Запускаю два скрипта:
Код
function main()
    local f = io.open(file, "a+")
    for i = 1, 100 do
      f:write(s..i.."\n")
      f:flush()
      sleep(1)
    end
    f:close()
end
В первом: s = ".."
во втором: s = "+"

В файле
Скрытый текст
часть строк теряются.

Есть идеи как исправить?
Вы не можете заменить заявку XXX. Повторите попытку позже.
 
Цитата
Daniil Pozdnyakov написал:
OnTransReply, помимо номера заявки, возвращает ещё и поле status, которое может показывать, что, например, транзакция была отвергнута ТС.
Цитата
Daniil Pozdnyakov написал:
добавить логику проверки в скрипт, чтобы поле status было равно "3"

Во-первых, проверка поля status давно есть.
Во-вторых, если транзакция была отвергнута ТС, то order_num = 0.

Цитата
Daniil Pozdnyakov написал:
Чтобы решить возникшую проблему
Так это не у меня проблема, а у вас с сервером какая-то шляпа.
Заявка выставлена в торговую систему биржи. Сервер прислал номер заявки в OnTransReply, но утверждает "Вы не можете заменить заявку". С чего вдруг?
Вы не можете заменить заявку XXX. Повторите попытку позже.
 
Цитата
Daniil Pozdnyakov написал:
пока не вызовется функция onOrder , транзакция MOVE_ORDERS не сработает
Что за дичь? На каком основании?
Вы не можете заменить заявку XXX. Повторите попытку позже.
 
Цитата
Daniil Pozdnyakov написал:
обновить версию терминала до актуальной версии (9.2.2)
У меня 9.2.2.11
Вы не можете заменить заявку XXX. Повторите попытку позже.
 
Часто при MOVE_ORDERS заявки от сервера прилетает такое сообщение. Это происходит, если изменять заявку по номеру, полученному из OnTransReply, не дожидаясь OnOrder.
С чего вдруг я не могу заменить заявку?!! Ведь заявка существует в ТС, я получил номер заявки.
MOVE_ORDERS
 
Цитата
Roman Azarov написал:
Обе заявки успешно изменены, либо не изменена ни одна, либо ошибка. Это уже можно понять по реплаю.

Не совсем так:
Цитата
Если при сдвиге пары заявок одна из них наткнулась на кросс-сделку (сведение с заявкой от того же ИНН, либо клиентского регистра), она откатывается, а другая заявка сдвигается.


Цитата
Roman Azarov написал:
Цитата
Андрей написал:
На момент onTransReply нет еще onOrder и записи в заявках
Если в OnTransReply вернулся номер заявки(ок), это значит, что новая заявка была зарегистрирована, что приведет к срабатыванию OnOrder и появлению соответствующей записи в таблице заявок.
OnOrder сработает потом когда-нибудь, а информация по новой заявке нужна уже сейчас в OnTransReply.

Цитата
Roman Azarov написал:
Зарегистрировали пожелание на добавление полей price, quantity и order_num для второй заявки.
Присоединяюсь.
Колбек при отправке транзакции в торговую систему, Контроль количества отправляемых транзакций
 
Цитата
Roman Azarov написал:
В OnTransReply подобный флаг не может быть реализован
О чём же это тогда?
https://forum.quik.ru/messages/forum10/message35476/topic4156/#message35476

Он, как бы есть в OnTransReply, но дает противоречивые значения:
https://forum.quik.ru/messages/forum10/message53237/topic6249/#message53237
Выскакивает ворнинг "Compare string with number", А его не должно быть, по идее!
 
Цитата
Незнайка написал:
Существует ли вероятность того, что значение Time сбросится сразу же после проверки его существования в main
Проверил: вероятность существует.
Выскакивает ворнинг "Compare string with number", А его не должно быть, по идее!
 
Код
local Time = X
function OnCallback()  -- любой колбек
  Time = nil
end

function main()
  if Time and os.time() > Time then
    ...
  end
end

Существует ли вероятность того, что значение Time сбросится сразу же после проверки его существования в main и os.time() > Time вернет ошибку?
Как объявить Двумерный массив с последующим заполнением уже в скрипте?
 
Цитата
Alex написал:
как только переходим на i =2 сразу идет ошибка
Потому что надо сначала создать массив save[2]

Код
save = {}
for i = 1, 20 do
  save[i] = {}
  for j = 1, 20 do
    save[i][j] = "hello"
  end
end
рыночные заявки становятся лимитными
 
Цитата
BlaZed написал:
в документации написано что условия исполнения заявок отсутствуют на срочном рынке
Где именно?

Цитата
BlaZed написал:
Лично не проверял
Лично проверял:
на демке - рыночную заявку
на бою - лимитированную с условием "Снять остаток". О чем пришел ответ по транзакции с сообщением "Заявка XXX успешно зарегистрирована." и ордером со статусом "Снята" и withdraw_datetime = datetime
Колбек при отправке транзакции в торговую систему, Контроль количества отправляемых транзакций
 
Цитата
QApplication написал:
добавить срабатывание OnTransReply callback для все отправляемых транзакций любым способом: вручную, скриптом, из файла, по API.
А также флаг, указывающий источник транзакции. И для OnOrder и OnTrade тоже.
рыночные заявки становятся лимитными
 
Цитата
Незнайка написал:
QUIK подставляет не лучшую, а худшую цену
Ещё заявка выставляется с условием "Снять остаток", поэтому нереализованная заявка сразу снимается.

Цитата
Алексей написал:
Почему
Чтобы ответить на этот вопрос, нужны подробности: какой рынок, как выставлялась заявка.
рыночные заявки становятся лимитными
 
Цитата
Алексей написал:
Насколько это верно?

QUIK подставляет не лучшую, а худшую цену:
Цитата
При включении признака «Рыночная» в пустое поле «Цена» подставляется значение «Максимально возможная цена», а при подаче заявки на продажу – «Минимально возможная цена» для данного инструмента (значение берется из Таблицы текущих торгов)
При таком раскладе в стакане не должно быть встречных заявок, чтобы ваша заявка осталась висеть.

Возможно, вы используете какой-то привод, который формирует цену заявки: текущая цена + отступ или в квике есть какая-то настройка для рыночных цен, о которой мне не известно.
рыночные заявки становятся лимитными
 
Цитата
Roman Azarov написал:
по лучшему встречному предложению
По лучшему для кого, для вашего контрагента?

Цитата
Roman Azarov написал:
если речь идет о выставлении рыночных заявок на срочном рынке, то в таблице заявок они будут выглядеть как лимитные
Это надо, чтобы весь стакан "съели", чтобы заявка, выставленная по min/max возможной цене (на уровне планки) не исполнилась, а встала в стакан.
Колбек при отправке транзакции в торговую систему, Контроль количества отправляемых транзакций
 
Добавить колбек OnSendTransaction(number trans_id), вызываемый, когда из терминала отправляется транзакция любым способом: вручную, скриптом, из файла, по API.
Чтобы любой скрипт, подписавшись на этот колбек мог знать, сколько транзакций отправлено на сервер.
Цель: контроль общего количества отправляемых транзакций в единицу времени, чтобы не натыкаться на ограничения брокера:
https://forum.quik.ru/forum14/topic6093/
https://forum.quik.ru/messages/forum1/message45728/topic2916/#message45728

Факультативно решается вопрос контроля уникальности id транзакций.

Также не лишним было бы иметь доступ к таблице транзакций через getNumberOf, getItem, чтобы знать общее количество транзакций за торговую сессию.
Функция с переменным числом аргументов, Как узнать количество переданных в функцию аргументов?
 
В Lua 5.4 есть table.pack

Код
local function f(...)
  local arg = table.pack(...)
  return arg.n
end

print(f(1, nil, nil))
Индикатор Lua
 
Цитата
nikolz написал:
при выводе просто перечисляете их
Спасибо, Кэп, для 8 значений задача решена во втором сообщении.

Я немного усложнил задачу: написать вывод для бОльшего числа значений, какого угодно количества.
Индикатор Lua
 
Цитата
Незнайка написал:
упаковать значения в две таблицы, а потом объединить их

Но есть косяк: если функции могут возвращать nil, то unpack работает криво.
Когда таблица сразу заполняется при создании, то распаковывается нормально:
Код
  local G = {1, 2, nil, 4, nil, 6}
  return print(unpack(G))  -->  1       2       nil     4       nil     6

А когда значения дописываются после, то работает криво
Код
local G = {1, 2, nil}
G[4] = 4
G[5] = nil
G[6] = 6
print(unpack(G))   -->   1       2       nil     4
Функция с переменным числом аргументов, Как узнать количество переданных в функцию аргументов?
 
Цитата
Незнайка написал:
в Lua 5.4

Нашел:
Код
local function f(...)
  local arg = {...}
  arg.n = select('#', ...)
  return arg.n
end

print(f(1, nil, nil))
Функция с переменным числом аргументов, Как узнать количество переданных в функцию аргументов?
 
В Lua 5.1 количество переданных значений в функцию содержалось в arg.n

Код
local function f(...)
  return arg.n
end
print(f(1, nil, nil))  --> 3

А в Lua 5.4 как?
Индикатор Lua
 
Цитата
Nikolay написал:
Когда число линий действительно больше, то тогда уже лучше хранить значения в таблице, а возвращать через unpack(table).

Не придумал ничего лучше, чем упаковать значения в две таблицы, а потом объединить их
Код
function OnCalculate(index)
  local G = {glo1(index)}
  local n = #G
  local G_ = {glo2(index)}
  for i = 1, #G_ do
    n = n + 1
    G[n] = G_[i]
  end
  return table.unpack(G)
end

Может, есть более красивое решение
Страницы: 1 2 3 4 След.
Наверх