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

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

Страницы: Пред. 1 ... 18 19 20 21 22 23 24 25 26 27 28 ... 46 След.
Как получить Биржевой сбор по фьючерсам и по акциям?
 
Цитата
Sergey Gorokhov написал:
Полного списка к сожалению не существует, так как биржевых площадок много и для каждой свои параметры.

Предлагаю из Lua дать доступ к чтению списка параметров, что то вроде таблицы:
Код
parameters = {
  OPEN = "Цена открытия",
  HIGH = "Максимальная цена сделки",
  LOW = "Минимальная цена сделки",
  LAST = "Цена последней сделки",
  QTY = "Количество бумаг в последней сделке",
  ...
}
возвращаемой при запросе таблицы параметров с указанием класса:
Код
parameters = getParametersList( class_code )
Надо делать так, как надо. А как не надо - делать не надо.
Баг - стоимость шага цены
 
Цитата
Egor Zaytsev написал:
Мы зарегистрировали пожелание, чтобы в дальнейшем было одно поле.
Давайте уже сейчас определимся, какой параметр использовать в скриптах.
А то так втихаря уберёте один параметр, и скрипты перестанут работать.
Надо делать так, как надо. А как не надо - делать не надо.
ParamRequest и CreateDataSource не заказывают получение параметров Таблицы текущих торгов
 
Не то название настройки скопировал... Ну почему нельзя отредактировать сообщение?
Правильно так:

Если в настройках получения данных стоит галка "С учетом настроек, выбранных пользователем вручную через пункт меню Система/Заказ данных/Поток котировок...", то ни ParamRequest ни CreateDataSource не могут заказать получение параметров Таблицы текущих торгов с сервера. При этом они радостно сигнализируют об успехе.
Нужно изменить такое поведение.
Надо делать так, как надо. А как не надо - делать не надо.
ParamRequest и CreateDataSource не заказывают получение параметров Таблицы текущих торгов
 
Если в настройках получения данных стоит галка "Исходя из настроек открытых пользователем таблиц", то ни ParamRequest ни CreateDataSource не могут заказать получение параметров Таблицы текущих торгов с сервера. При этом они радостно сигнализируют об успехе.
Нужно изменить такое поведение.
Надо делать так, как надо. А как не надо - делать не надо.
Экспорт по DDE в LibreOffice Calc, Как настроить экспорт?
 
Цитата
s_mike@rambler.ru написал:
из региональных настроек, очевидно.
Это и так понятно. Настройку вы из Lua прочитали?
Надо делать так, как надо. А как не надо - делать не надо.
Экспорт по DDE в LibreOffice Calc, Как настроить экспорт?
 
Цитата
s_mike@rambler.ru написал:
Скрипт
Цитата
1.3 Разделитель CSV формата теперь можно не указывать. Будет использоваться системная настройка Windows
Как вы определили системную настройку Windows?
Надо делать так, как надо. А как не надо - делать не надо.
Опять массив :)
 
Код
function table.transform(tab)
  local ntab = {}
  for k, v in pairs(tab) do ntab[v] = k end
  return ntab
end

ticker = {}
ticker["SBER"]= 3
ticker["LKOH"]= 2
ticker["GAZP"]= 1

for k, v in ipairs(table.transform(ticker)) do
  print(v, k)
end
Надо делать так, как надо. А как не надо - делать не надо.
неужели OnParam самый быстрый?
 
Цитата
Николай Камынин написал:
Вообще-то я серьезно.
OnParam даёт время события с точностью до секунд. Поэтому можете хоть песочными часами время синхронизировать ))
Надо делать так, как надо. А как не надо - делать не надо.
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Цитата
Алексей написал:
Не прослеживается единообразия в логике вызовов Init() со стороны Quik: при исходном добавлении индикатора на график, Init() вызывается до привязки к источнику данных, а при замене инструмента Init(), почему-то, вызывается уже после привязки к новому инструменту.
При добавлении индикатора сразу указывается Источник данных. Поэтому описанное поведение больше похоже на ошибку в логике.
Надо делать так, как надо. А как не надо - делать не надо.
неужели OnParam самый быстрый?
 
Цитата
Николай Камынин написал:
Вас не смущает задержка в 160 мс?
Здесь нет задержки. По оси y отложена цена инструмента из пришедшего колбэка.
Что касается задержки, то вы никакими супер-атомными часами не получите время задержки для OnParam в QUIK. Вы ведь не серьёзно про часы-то?  :wink:
Цитата
Николай Камынин написал:
Как Вы узнали что в OnParam нет лучшей цены?
На график в OnParam выведены только изменения по LAST.
Надо делать так, как надо. А как не надо - делать не надо.
Таблица с помощью Qlua, Таблица с помощью Qlua
 
К сожалению, я не знаю как вам помочь.  :?:
Ваш код с исправленным p_classcode_94:
Надо делать так, как надо. А как не надо - делать не надо.
Таблица с помощью Qlua, Таблица с помощью Qlua
 
Скрытый текст

Optimus1 Optimus1,
ну так и приводите полный рабочий код того скрипта, на котором у вас возникает проблема, в удобочитаемом виде,
Скрытый текст
а не состряпаную из кусков разных программ портянку, где пустых строк больше, чем полезного кода. Вам самому-то удобно это читать?
Но я думаю, что вы уже поняли, что инкремент работает, как надо.
Надо делать так, как надо. А как не надо - делать не надо.
Таблица с помощью Qlua, Таблица с помощью Qlua
 
Sergey Gorokhov,
по-моему товарищ вас тролит, предлагая явно неработающий код (при этом утверждает, что чё-то там выводится) и отвлекая от РАБОТЫ.
У вас ведь есть чем заняться? Ошибок-то в терминале полно! Надо исправлять.


Цитата
Optimus1 Optimus1 написал:
p_seccode_94="SBER"
p_classcode_95="TQBR"
Цитата
Optimus1 Optimus1 написал:
function OnQuote(class_code, sec_code)
if class_code==p_classcode_94 and sec_code==p_seccode_94 then      --94)SBER
Тут не может ничего выводиться по определению. Авто явно ммм... говорит неправду.
Надо делать так, как надо. А как не надо - делать не надо.
Таблица с помощью Qlua, Таблица с помощью Qlua
 
На форуме есть тэг [CODE], чтобы никто не ломал глаза, читая ваш код.
Надо делать так, как надо. А как не надо - делать не надо.
Ошибка при автоматическом масштабировании графиков по вертикали
 
Цитата
Alexey Ivannikov написал:
Если у Вас есть что посоветовать - пожалуйста.

1. Самый простой вариант:
Цитата
quikscalp написал:
Значения индикаторов следует исключить из учёта при автоматическом масштабировании графиков, как это сделано для цен заявок и позиций.

2. Вариант посложнее:
Масштабировать график таким образом, чтобы в видимую область попадало последнее значение индикатора. Т.е., автомасштабировать с учётом последней точки индикатора.
Надо делать так, как надо. А как не надо - делать не надо.
Ошибка при автоматическом масштабировании графиков по вертикали
 
Alexey Ivannikov,
вы сами-то пробовали то, что советуете? Зачем нужен, например, Bollinger Bands без привязки к оси цен?
Надо делать так, как надо. А как не надо - делать не надо.
Таблица с помощью Qlua, Таблица с помощью Qlua
 
Здесь OnQuote выполняется только для одного инструмента:
Цитата
Optimus1 Optimus1 написал:
if class_code==tqbr and sec_code==sber
Надо делать так, как надо. А как не надо - делать не надо.
неужели OnParam самый быстрый?
 
Чтобы узнать, кто пришёл раньше, атомные часы не нужны. Есть такое понятие, как точка отсчёта.
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Ядра процессора
 
*Хотя, если все вычисления производятся в колбэках, а в main - пустой цикл, то для каждого Квика достаточно двух ядер.
Надо делать так, как надо. А как не надо - делать не надо.
Ядра процессора
 
Цитата
Старатель написал:
Для максимальной производительности количество ядер должно быть не менее, <количества запущенных роботов + 1> (если QUIK один).
Хотя, если все вычисления производятся в колбэках, то для каждого Квика достаточно двух ядер. Здесь большую роль играет частота процессора.
Надо делать так, как надо. А как не надо - делать не надо.
Ядра процессора
 
Для максимальной производительности количество ядер должно быть не менее, <количества запущенных роботов + 1> (если QUIK один).
Если это условие соблюдено и частоты процессоров в обоих случаях одинаковы, то потери в производительности быть не должно.
Но есть технология Turbo Boost, которая может изменить расклад. Не знаю работает ли она на виртуалках.

Что касается памяти, то тут немного сложнее. Дело в том, что Windows часть данных выгружает в swap-файл на HDD или SSD (даже если памяти полно). Чем меньше ОЗУ, тем больше данных будет выгружено в swap, а операции чтения/записи на HDD во много раз более затратны, чем с ОЗУ. Поэтому оперативной памяти в Windows много не бывает ))
Если же комп будет часто "свопиться", то потеря в производительности может быть очень существенной.
Надо делать так, как надо. А как не надо - делать не надо.
измерить скорость выставления заявки
 
Не все брокеры обновили сервер, поддерживающий версию 7.6
Надо делать так, как надо. А как не надо - делать не надо.
Кто как решил вопрос уведомления о сделках?
 
Как изменить timeout?
Пробовал и так:
Код
TIMEOUT = 100
и так:
Код
local sock = socket.tcp()
sock:settimeout(100)
Изменений никаких.
Надо делать так, как надо. А как не надо - делать не надо.
неужели OnParam самый быстрый?
 
https://forum.quik.ru/messages/forum10/message5260/topic559/#message5260
Надо делать так, как надо. А как не надо - делать не надо.
два робота в одном квике
 
Космонавт,
Никто не сможет дать вам точный ответ, какой вариант будет достаточным и необходимым конкретно в вашем случае. Поскольку вы и сами то толком не знаете, была ли необходимость что-то усложнять. А мы и подавно этого не знаем. Тов. swerg задаёт вам правильные вопросы, прислушайтесь к ним.

Цитата
Космонавт написал:
3 решение самое сложное (я сейчас им пользуюсь). Две виртуалки, в каждой из которой сидит свой КВИК со своим роботом. Но и тут Старатель опровергает преимущества, но толком не объясняет почему.
Старатель не опровергает, по той же причине: вы и сами не можете ответить, что вы хотите этим улучшить и за счёт чего. А я не могу знать, может, в вашем случае этот вариант даст какие-то преимущества.
Надо делать так, как надо. А как не надо - делать не надо.
два робота в одном квике
 
Космонавт,
Как я полагаю параллельного получения колбэков с одного сервера QUIK не добиться (разработчики меня поправят, если ошибаюсь) даже на нескольких терминалах.
Значит, то что вы можете ускорить - это исполнение кода самого колбэка, если он у вас действительно медленно работает.
Добиться этого можно либо увеличением частоты процессора либо распараллеливанием исполнения по разным потокам (при наличии ресурсов). Но не внутри одного квика, а в разных терминалах.
Надо делать так, как надо. А как не надо - делать не надо.
два робота в одном квике
 
Космонавт,
Свою глубокую мысль я уже высказывал:
Цитата
Старатель написал:
Ведь информация через сетевой интерфейс будет поступать не параллельно.
Но вы бы действительно двигались дальше, если бы сделали мониторинг, выяснили, что вас не устраивает и какую именно скорость хотите увеличить.
Надо делать так, как надо. А как не надо - делать не надо.
два робота в одном квике
 
Цитата
Николай Камынин написал:
Чтобы колбеки исполнялись параллельно надо внутри колбеков открывать потоки.
А луче (я делал именно так) колбеки выносить в отдельные скрипты. В резлутате будет вообще-то, для каждого колбека будет свой поток.

Только выполняться каждый из параллельных потоков будет дольше, чем при последовательном исполнении. Отсюда - выигрыш в скорости от параллельного исполнения колбэков под вопросом.
Надо делать так, как надо. А как не надо - делать не надо.
два робота в одном квике
 
Цитата
Космонавт написал:
Не понял последний вопрос. Что вас смутило?
Обе виртуалки арендую у UltraVDS,
Брокер один, сервер у него один.
Чем две виртуалки, по вашему, лучше двух терминалов внутри одной виртуалки (с равным суммарным количеством ядер и ОЗУ)?
Надо делать так, как надо. А как не надо - делать не надо.
два робота в одном квике
 
Цитата
Космонавт написал:
Уже арендовал вторую, теперь ммвб-шный робот на одной виртуалке, фортс-робот на второй. Процессора хватает, памяти хватает, скорость интернета немыслимо хороша. Как оценить скорость срабатывания колбеков и понять выиграл я в скорости или равнозначно?
Обе виртуалки стоят на одном физическом сервере с одним сетевым интерфейсом? Оба квика подключены к одному серверу QUIK?
За счёт чего предполагается получить "выигрыш я в скорости"?
Надо делать так, как надо. А как не надо - делать не надо.
два робота в одном квике
 
Цитата
swerg написал:
Потому что колбеки будут работать параллельно.
Точно? Ведь информация через сетевой интерфейс будет поступать не параллельно.
Надо делать так, как надо. А как не надо - делать не надо.
три таймфрейма
 
Я изначальный вопрос не понял. Функция mycallbackforallstocks может быть одна. Но CreateDataSource(class,sec,interval):SetUpdateCallback нужно задавать для каждого таймфрейма.
Надо делать так, как надо. А как не надо - делать не надо.
три таймфрейма
 
Цитата
Космонавт написал:
Будет ли один колбек обновлять три DataSource?
А как вы сами думаете? Будет обновляться DataSource с заданным тайм-фреймом:
CreateDataSource(class,sec,interval)
Надо делать так, как надо. А как не надо - делать не надо.
Тэйк-профит: старые песни о защитном спрэде, Возможные сюрпризы при совершении сделки по тэйк-профиту
 
Stanislav Tvorogov,
Раньше был другой алгоритм. Теперь поменялся?
Надо делать так, как надо. А как не надо - делать не надо.
Кто как решил вопрос уведомления о сделках?
 
Цитата
SDL написал:
Качаем модуль LuaSec:
Проект: https://github.com/brunoos/luasec
Бинарники можно взять тут: http://love2d.org/forums/viewtopic.php?f=5&t=76728. Нужны 2 файла - ssl.dll и ssl.lua.
Использует библиотеки OpenSSL libeay32.dll и ssleay32.dll. Скачать, если нет, и не забыть обеспечить к ним доступ - через окружение (PATH) или можно кинуть в папку с QUIK.
Цитата
vgi написал:
Есть хорошая обёртка для отправки писем lua-sendmail: https://github.com/moteus/lua-sendmail
Ей потребуется luasec, который в уже собранном виде можно взять из ссылки из третьего поста вот такого топика: http://lua.2524044.n2.nabble.com/Luasec-for-Windows-td7671151.html
При отправке первого письма из скрипта с gmail.com приходит ответ "closed".
Второе и последующие письма отправленные, из того же скрипта (причём, первым может быть и mail.ru) уходят нормально.
Кто-нибудь сталкивался с таким? Как лечить?
Надо делать так, как надо. А как не надо - делать не надо.
получение параметров индикатора, обращение к line
 
Цитата
Борис Гудылин написал:
Затем пошел второй перерасчет индикатора (сейчас это, как бы, норма)
Когда два, а когда и три раза индикаторы пересчитываются.
Вот код:
Скрытый текст
Чтобы задать сразу параметры индикатора, дабы избежать лишних пересчётов, делаю следующее: открываю "Редактирование настроек графика" -> Добавить -> Выбираю индикатор -> Добавить
Далее в свойствах индикатора меняю значение параметра -> OK
Не тут-то было. Вот результат:
Скрытый текст
Как видно, индикатор рассчитывается три раза (!), причём первый расчёт идёт со старым значением, но уже после нажатия на кнопку OK.

Предложения:

1. Исправьте ошибку с лишними пересчётами индикаторов при их добавлении или изменении.

2. Дайте доступ к чтению свойств линий из OnCalculate
Надо делать так, как надо. А как не надо - делать не надо.
подсветка свечей на графика
 
Цитата
Sergey Gorokhov написал:
Цитата
Imersio Arrigo   написал:
Цитата
    s_mike@rambler.ru   написал:
Вот именно линиями не получится, только точками или гистограммами.
Да вроде все получается. Если не забуду поищу в загашниках.
Там весь секрет в настройке "показывать пустые интервалы"

Цитата
s_mike@rambler.ru написал:
Сергей, вы пробовали это делать?

Вполне резонный вопрос.
Эта настройка влияет не на конкретный индикатор, а на всю область диаграммы.
Надо делать так, как надо. А как не надо - делать не надо.
автоматизация стопа
 
Можно написать скрипт на Lua для этих целей.
Надо делать так, как надо. А как не надо - делать не надо.
Временный интервал в виде кнопок, как сделать?
 
Цитата
Stanislav Tvorogov написал:
реализация пожелания признана потенциально целесообразной
Как бы хуже не стало...
Не знаю, что там признано целесообразным, но если вместо одного выпадающего списка на панели появятся 17 кнопок, то не вижу ничего хорошего.
Надо делать так, как надо. А как не надо - делать не надо.
Функция CreateDataSource никогда не возвращает ошибку, И это создаёт большие проблемы при разработке. В неё можно запихнуть любой мусор, и она скажет: "Всё отлично".
 
Цитата
Антон Кыт. написал:
Чтобы это определить, всем пользователям QuikLUA был бы полезен метод датасорса ds:ServerSize()
Его смысл в том, чтобы сразу узнать сколько всего баров данного таймфрейма имеется на сервере истории?

Цитата
Sergey Gorokhov написал:
Цитата
Антон Кыт.   написал:
метод датасорса ds:ServerSize()
Он и сейчас есть ds:Size()
Так ли это?
Надо делать так, как надо. А как не надо - делать не надо.
Временный интервал в виде кнопок, как сделать?
 
Кнопки будут занимать много места. Выпадающий список экономит место на панели.
Надо делать так, как надо. А как не надо - делать не надо.
setmetatable
 
Понял, спасибо!

Код
s = setmetatable({}, {__index = function(t, i)
  local result = i * i
  t[i] = result 
  return result 
end})
Надо делать так, как надо. А как не надо - делать не надо.
setmetatable
 
А как это использовать? У меня не кэширует:
Код
s = setmetatable({}, { __index = function(t, i)
  local result = print('Считаем...') or i * i
  t = result 
  return result 
end})
print(tostring(s[3]))
print(tostring(s[3]))

Результат:
Цитата
Считаем...
9
Считаем...
9
Надо делать так, как надо. А как не надо - делать не надо.
setmetatable
 
Цитата
s_mike@rambler.ru написал:
s = setmetatable( {},   function(t,i)
                                  local result = (считаем что-то)
                                  t[i] = result
                                  return result
                                end)
Цитата
bad argument #2 to 'setmetatable' (nil or table expected)

Но я понял, что для моей задачи (кэширование только одного элемента таблицы) первый вариант будет лучше.
Надо делать так, как надо. А как не надо - делать не надо.
setmetatable
 
Код
function func(v)
  return v * v
end

s = {
  f = function(v)
    local r = s.r
    if not r then
      r = func(v)
      s.r = r
    end
    return r
  end
}

print(tostring(s.f(3)))
print(tostring(s.f(3)))

Функция s.f() запоминает вычисленное значение и при повторном обращении возвращает раннее вычисленное значение.
Можно ли описать её через setmetatable?
PS: возвращать она должна раннее сохранённое значение, независимо от переданного аргумента при повторном вызове.
Надо делать так, как надо. А как не надо - делать не надо.
Цена сделки вне лимита, Как избавиться от данной ошибки?
 
В Квике все получаемые параметры из терминала надо проверять не только на nil, но и на ноль:

Код
local last_price = getParamEx(classcode, seccode, "LAST").param_value
if last_price == nil then
  -- Ошибка получения цены последней сделки
elseif last_price == 0 then
  -- отправляем гневное сообщение в адрес разработчиков
else
  -- работаем дальше
end

Уверен, что такая же беда при вычислении
Код
exit_price = price + stop_level_2000 + sl
Надо делать так, как надо. А как не надо - делать не надо.
AddColumn
 
Цитата
width – ширина в условных единицах.
Что это за условные единицы такие? Они привязаны к шрифту? Если да, то каким образом?
Надо делать так, как надо. А как не надо - делать не надо.
Сделки с вечерней сессии FORTS
 
Здравствуйте.

Как в коде определить, относится ли вечерняя сделка к текущей торговой сессии?
Надо делать так, как надо. А как не надо - делать не надо.
Редактирование настроек при добавлении индикатора
 
Куда пропало окно с настройками при первичном добавлении индикатора?
Надо делать так, как надо. А как не надо - делать не надо.
Проблема с функцией SetSelectedRow()
 
Цитата
Andrei2016 написал:
почему срабатывание функции  SetSelectedRow() не приводит к каким-либо визуальным изменениям в указываемой таблице?
Возможно, потому, что при нажатии на левую клавишу мыши срабатывают сразу три события: QTABLE_LBUTTONDOWN, QTABLE_SELCHANGED, QTABLE_LBUTTONUP
Т.е., событие QTABLE_SELCHANGED возвращает выделение на нажатую строку после вашей функции funcCallback.
Попробуйте так:
Код
if (msg == QTABLE_LBUTTONUP) then 
  local r = SetSelectedRow(t_id, 12) 
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: Пред. 1 ... 18 19 20 21 22 23 24 25 26 27 28 ... 46 След.
Наверх