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

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

Страницы: 1
Что возвращает SearchItems
 
И еще одно уточнение - getItems по возвращенным индексам выдает правильные строки из таблицы, но если смотреть глазами в таблицу в терминале, то не бьется на 1. Загадка.
Что возвращает SearchItems
 
Может не учитывает заявки на открытии? У меня первая заявка с периодом "Открытие".
Что возвращает SearchItems
 
Доброго времени, отцы! Снова ламерский вопрос, прошу прощения.
Отбираю заявки с помощью SearchItems, получаю массив индексов и он не бьется с таблицей заявок на 1. Т.е., например, получаю индексы 22, 23, 25, а на самом деле это 23, 24, 26. В чем может быть проблема?

На всякий случай вот код, отбирает по этому условию верно, а индексы возвращает с ошибкой на 1
Код
t1 = SearchItems ("orders", 0, getNumberOf ("orders")-1, function(par1,par2) if par1 == "ROSN" and bit.band(tonumber(par2), 1) > 0 then 
return true else  return false  end  end , "sec_code,flags,price")
Дата и время позиции
 
nikolz, спасибо, отец!
Дата и время позиции
 
А есть где почитать и главное увидеть элементарный пример постановки коллбека в очередь, в интернете именно такого примера не нашел. Могу только предположить, что в коллбеке поступившие данные пишутся в массив, который обрабатывается в main.

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

Можно ли обойтись перебором таблиц если предположить, что в реальной ситуации более 1000 сделок в день не будет.

И самое главное по поводу таблиц,  запоминания и скорости. Пока я делаю так - в текстовый файл пишу номера ордеров сделок, затем когда перебираю таблицу сделок беру в рассмотрение те номера, которых нет в файле, но таблица сделок перебирается вся.
Дата и время позиции
 
nikolz, Nikolay спасибо отцы! Буду грызть.
Но как же не использовать sleep в main? Разве тогда квик не зависнет от постоянных действий? Какой sleep можно считать долгм? 200-300 не долгий? Т.е. если коллбек приходит во время sleep, то он может быть проигнорирован main и то, что должно быть сделано в этом коллбеке сделано не будет?

И еще простейший вопрос, который сложно проверить на практике. Если заявка исполняется частями, то у каждой сделки по этой заявке будет свой trade_num?

Что касается таблиц, то с одной стороны проще, но с другой надо запоминать какие сделки уже учтены в позиции, какие новые, хоть это и не сложно сделать. Допустим скрипт остановился и нужно восстановить позиции. У меня в файле записаны позиции, потом я их обновляю через разбор таблицы сделок. Но если в течении дня потребуется несколько раз их восстановить, то без отдельной записи сделок дня невозможно будет понять, какие из них уже учтены в позиции, а какие нет.  
Дата и время позиции
 
Да, но я спрашивал несколько другой аспект. Что лучше обрабатывать для ведения позиции коллбеки или таблицы, учитывая ненадежность коллбеков? Если и то и то, то нужно это все постоянно приводить к одному, а если исходить, что первоисточник это таблица и сверяемся с ней, то зачем обрабатывать коллбек. Разве что коллбек может придти раньше обновления таблицы, но эта нано разница не играет роли.
Дата и время позиции
 
onTransReply тоже можно в источнике посмотреть, но тут кажется дешевле коллбек обработать. Можно и с заявками и сделками тоже дешевле? Ведь по итогу дня может быть и 1000 заявок и сделок и каждый раз дергать таблицу это замедление работы? Но опять таки если все равно с таблицей нужно сверяться, не очень понятна логика.
Дата и время позиции
 
"Запустил скрипт - просканировал сделки и убедился, что запомненная позиция корректна с точки зрения количества. "
Если у нас эталон это источник данных, то тогда зачем нужны коллбеки, когда всегда можно посмотреть в таблицу сделок и снять состояние. Тем более, если мы доверяем источнику, то если запомненная позиция отличается, то что, мы ее приводим в соответствие источнику? Тогда зачем запоминать.
На поверхности разница только в том, что колбеки в идеале приходят по факту изменения позиции, а смотреть нужно руками в какое-то время, как минимум перед действием (входом/выходом из позиции) при завершении работы скрипта в конце дня, чтобы зафиксировать сделки и обновить позицию.
Но опять таки вопрос, зачем нагружать скрипт дерганием по коллбекам?
Допустим отправку транзакции нужно фиксировать, а onTransReply обрабатывать, если вдруг ошибка. А результаты onOrder и OnTrade по идее должны отражаться в таблицах, может чуть чуть позже, но не суть.
Так все же какой сакраментальный смысл в их обработке?
Дата и время позиции
 
Не совсем понял про работу с коллбэком заявок, я как раз хотел от них уйти и использовать коллбэки от денег и депо.
Дата и время позиции
 
Спасибо за ответы, отец!
разбираюсь с обработкой коллбэков по заявкам, onTransReply, onOrder, onTrade. При этом есть коллбэки на изменение позиций по деньгам и инструментам. Т.е. если у нас выставилась заявка значит изменилась позиция по деньгам, т.к. заблокировался объем, если прошла сделка, значит изменилась позиция по депо.
А что если использовать эти коллбэки и смотреть в соответствующие таблицы для подбития баланса. В моих целях отслеживание коллбэков по заявкам нужно для понимания именно позиций по деньгам и инструментам, чтобы например не накупить лишнего, не превысить лимиты робота, не попасть на маржинальную позицию.
Что думаете и как обстоят дела в реальности с этими коллбэками?
Дата и время позиции
 
А на следующий день? Правильно ли понимаю, что единственный путь через свой лог в файле?
Дата и время позиции
 
Отцы, с праздниками!
Посоветуйте, пожалуйста, есть ли возможность в квике возможность связать сделку с позицией, а именно узнать время образования позиции? Т.е. у меня задача закрыть позицию не позднее 3 свечей от свечи, когда прошла сделка.  Можно ли в квике как-то понять, что имеющаяся позиция возникла тогда-то и во столько?
Использование индикаторов из терминала
 
Отцы, я разобрался, надо было считать слева направо, а не наоборот
Использование индикаторов из терминала
 
По ссылке написано
"учитывать, что при расчете индикаторов первые значения (1 .... Период расчета индикатора - 1)-- обычно nil"

Да, так и есть, после периода пошли значения. Но тогда вопрос зачем такой алгоритм, ведь нужно то значение если не на последней, то на предпоследней и близких свечах, а зачем нужно значение индикатора 20 или 50 свечей назад непонятно. Тем более, что все данные для расчета есть, терминал прекрасно индикатор строит. Непонятно.
Использование индикаторов из терминала
 
Добрый день!

Помогите, пожалуйста, разобраться, как пользоваться индикаторами, которые выложены тут.

Такой код выдает nil

dofile(getWorkingFolder().."\\LuaIndicators\\MA.lua")
ds = CreateDataSource("TQBR", "NLMK", INTERVAL_D1)
sleep(5000)
k = ds:Size()
message("==="..tostring(k))  -- для проверки получения данных
message("==="..tostring(ds:H(k)))
func = MA()
ema8 = func(k, {Period=8, Metod = "EMA", VType="Close"}, ds)
message("==="..tostring(ema8))

Последний message выдает nil, хотя данные в ds есть
И снова CreateDataSource
 
Также есть вопрос по параметру Interval в функции CreateDataSource. Его типа по документации  Number, т.е. числовой, при этом он передается через константы, например INTERVAL_H1.
А как его передать через переменную?  
И снова CreateDataSource
 
Отцы, помогите, пожалуйста, разобраться с еще одним ламерским вопросом.

В блоке MAIN у меня создается источник данных (ДС):
ds["NLMK"] = CreateDataSource("TQBR", "NLMK", INTERVAL_D1)

Далее мне нужно в функции обращаться к нему, но не напрямую, а присвоив его локальному дс:
local dsf = ds["NLMK"], т.е. чтобы можно обращаться через dsf:C(i).

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

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

Создан источник данных ds2 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1), данные получены, обновляются.
Через 10 минут происходит разрыв соединения.
Еще через 10 минут соединение восстанавливается.
Вопрос: данные в ds2 продолжат поступать или для этого нужно снова вызвать ds2 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1)?
И снова CreateDataSource
 
Забыл уточнить, 11 версия Quik
И снова CreateDataSource
 
Тогда все же вопрос разработчику с отсылкой к документации, которая размещена на сайте.
А именно речь про  SetUpdateCallback, SetEmptyCallback, эти функции работают? Не знаю правильно ли понимаю, но понимаю так, что   если эти функции работают, то однажды вызвав CreateDataSource он обновляется без его повторного вызова или это не так?

Пример: после вызова ds2 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1) будет ли через минуту в ds2 новая свеча, через 5 минут 5 новых свечей или нет? Или чтобы они там появились надо снова выполнить вызов CreateDataSource? Или же эти методы обновляют только последнюю незакрытую свечу, которая уже оказалась в наборе с первым вызовом или вообще ничего не обновляется?
И снова CreateDataSource
 
Заранее прошу прощения за вероятно избитую тему с CreateDataSource, но огромная просьба помочь разобраться новичку.

Нужно в течении всего дня постоянно получать данные по свечам. Где-то раньше читал, что не требуется при этом повторно вызывать CreateDataSource, а можно просто обращаться к его функциям (т.е., ds:C(index)).
Или же все таки требуется? Или для того, чтобы не обращаться должен быть настроен какой-то колбек. Но пишут SetEmptyCallback уже бесполезен, SetUpdateCallback не работает с 2021 года. Т.е. нужно каждый раз в бесконечном цикле вызывать CreateDataSource?
Или все таки не нужно? А если бумаг будет 200?
Страницы: 1
Наверх