Докладываю, 911 не помог, при повторном запуске с сервера опять пришел отрицательный план чистой позиции. С брокером связь поддерживаю, но их инструкции пока не помогают.
несколько недель при отсутствии торговли по счету на срочном рынке наблюдаю в периоды клиринга отрицательную сумму плана чистой позиции. Задал вопрос брокеру ПСБ, посоветовали почистить данные запуском 911.bat Действительно такой показатель мог зависнуть в справочниках? В каком именно файле? Не хочется удалять все справочники. Спасибо.
написал на почту. Давайте сперва разберемся со стоп-заявками по кросс-паре EURUSD_TOM. Ставим стоп, отменяем - блокировка средств не только не снимается, но и удваивается. В итоге упираемся в лимиты. Работать невозможно.
Поправки Если стоит стоп-заявка сроком "до отмены", то на утро лимиты не рекалькулируются с её учетом. "По-крайней мере в случае со стоп-ордерами на валютной секции на кросспаре евро/юсд"
Добрый день. Это проблема точно не брокеров, а Ваших серверов. - Если стоит стоп-заявка, то на утро лимиты не рекалькулируются с её учетом. - Не снимаются блокировки средств при отмене ордеров. По-крайней мере в случае со стоп-ордерами на валютной секции. Ставим ордер - блокировка Х руб. Снимаем ордер - Х руб остались висеть. Ставим взамен другую на ту же сумму - блокировка удвоилась. Как один из вариантов брокер сказал что ордера повисли на разных серверах. Не верится, сервер был подключен один и тот же. Еще проблема - каким-то зловещим образом валютой учета стала GBP, хотя я это не настраивал и в настройках этого не было видно. В результате я увидел свои средства совсем в ином виде. Чуть инфаркт не хватил.
Неделю последняя версия поработала стабильно, но, увы... Сегодня терминал гавкнулся после сна ноутбука, как обычно обнулив файл настроек. Перестаю ждать решения проблемы от разработчиков, ухожу от брокера ВТБ24. Отписываюсь от темы, больше не интересно.
Взял последнюю версию терминала с сайта, приладил её к ВТБ24 с тем же файлом настроек, пока что терминал ни разу не падал после сна. Продолжаю наблюдать.
vgi написал: green_X5 , В случае работы нескольких терминалов Квика получилось победить описанную Вами проблему только таким способом:
1. Создаём отдельный каталог. Например, D:\wnd 2. Для каждого Квика прописываем в настройках уникальное название файла настроек и сохраняем в D:\wnd. В Вашем случае, например, так: D:\wnd\info_SMS.wnd D:\wnd\info_VTB24.wnd D:\wnd\info_PSB.wnd
1ым пунктом решаем пробему глобальности текущего каталога в Квиках, 2ой пункт - чтобы не перепутать настройки. С учётом того, что у Вас включена опция "Сохранять настройки при выходе", можно предположить, что Квики перезатирали чужие настройки из-за проблемы глобальности. Эту опцию вообще лучше отключать, имхо, и сохраняться только вручную.
Не помогло, сегодня терминал от ВТБ24 снова повесился, точно так же, вместе с проводником Windows.
да я вышлю, но как бы это правильнее сделать? Судя по bat фалу Вы хотите видеть серию дампов в процессе падения, но получаются одни и те же. Процесс проистекает так: 1. стабильная работа. 2. закрываем крышку ноутбука - компьютер засыпает 3. открываем крышку - ноутбук просыпается, терминал висит, заодно повесив проводник Windows. Если запустить срез серии дампов после пробуждения ноутбука - Вы увидите одно и то же, т.к. ось и терминал уже висят. Если запустить запись дампов и отправить ноутбук в сон, запись прерывается и после пробуждения не возобновляется.
оба файла выслал, пожалуйста сообщите потом нашли ли Вы источник проблемы в сравнении файлов и возможна ли модификация терминала для предупреждения таких проблем в будущем. Пожалуйста обратите ещё раз внимание на моё желание в этой теме, https://forum.quik.ru/forum1/topic2622/ возможно это короткий путь к решению проблемы. Спасибо.
собрал новый файл сохранения настроек с нуля, Квик перестал падать после сна компьютера. Высылать обе версии .wnd на почту, вам это интересно для изучения проблемы?
Господа разработчики, я не слишком навязчив? Дампы вам давно уже выслал, и не один раз. От вас в ответ - звенящая тишина. Вот опять рухнул ваш чахлый Квики, утащив в очередной раз с собой на "тот свет" файл настроек. И так каждый день... каждый день...
Ответ "Да отвяжись, нам не до этих проблем!!!" я приму, вы просто не молчите! Заранее благодарен.
green_X5 написал: Ноутбук уснул, проснулся, КВИК не отвечает.
У вас какая версия? Наблюдалось такое до 7.5-7.6, но это явно не из-за чтения настроек: настройки читаются при запуске QUIK.
7.10.0.76 И до обновления до этой версии было то же самое. После падения терминала, при последующем запуске с пустым рабочим столом видим файл настроек уже ноль килобайт. Резервный файл настроек при этом нормальный, какой был до падения.
Уважаемые разработчики, Вы собираетесь выпрямлять свой КВИК в плане путей сохранения и чтения настроек или нет?!!!! Ну задолбало же!!! Квик от ВТБ24 падает по нескольку раз на дню, и точно каждый раз если ноутбук отправить в сон, после пробуждения!!! Ноутбук уснул, проснулся, КВИК не отвечает. Завершаем работу через диспетчер задач, КВИК запускается без рабочего стола, потому что, вероятно, пытается читать файл настроек из папки соседнего КВИКА от ПСБ старой версии! НЕВОЗМОЖНО РАБОТАТЬ!!!!!
green_X5 написал: А можно попросить зарегистрировать пожелание? В возвращаемую таблицу t функции TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count) добавить возвращаемые данные - тайфрейм графика (индикатора). Должен приходить в синтаксисе как interval CreateDataSource, в виде зарегистрированных имен (INTERVAL_H1) или их значений (60). Ещё было бы неплохо возвращать ещё одни данные - класс и секцию бумаги этих данных. Правда я не знаю что может вернуться при запросе индикатора. Спасибо.
Цитата
Sergey Gorokhov написал: green_X5 , Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Сергей, дополню пожелания. Также возвращать параметры индикатора. Например для МА это вот эти
Это может пригодиться например для уточнения цикла перебора
Код
q = getNumCandles(tagMA)
t, n, l = getCandlesByIndex(tagMA, 0, 0, q);
mov = t[q-1].close
for i = math.max(0,q-100), q-1, 1 do --здесь вместо 100 укажем вернувшийся период MA
temp = t[i].close
if temp and temp ~= 0 then last = temp end
end
Ну и собственно целостность данных индикатора по номерам последних свечек. Вероятно, там где нет торговых свечей, индикатор возвращает ноль. Это предположение.
Добавить флаг на первый запуск функции Run. Перед вызовом SetUpdateCallback делаем его true, а в конце функции Run делаем false. В функции Run проверяем, если флаг true, значит это первое срабатывание. Если срабатывание первое, и пришедший индекс не первый, то делаем getCandlesByIndex от 1 до getNumCandles свечей. Полученные свечки обрабатываем в цикле. Таким образом, если первой пришла не первая свечка, то случится обработка пропущенных свечек.
Бинго, Сергей, сработал Ваш метод при пробуксовке )
Буксует на низколиквидных инструментах, на которых последние свечи или отсутствуют или там какая-н. каша с нулями в данных или ещё что-н. Но перебор свечек вытаскивает последнее корректное значение. )
Осталось заставить запускаться подписку CreateDataSource не из main.
Мы уже попрощались. Кто "хочет помочь" на этом форуме, тот читает вопросы и отвечает на них, приводя если нужно необходимые отрезки кода, а не строит из себя мудрого аксакала бубня старческими губами не имеющую отношения к теме хренотень. Попробуйте по Павлову, увидите мою тему - откройте её и тут же тресните себя ложкой по лбу. Каждый последующий раз - всё сильнее. Так рефлекторно Вы начнете обходить мои темы стороной. И я действительно буду Вам безмерно за это благодарен. Ещё раз - ДОСВИДАНИЯ.
Николай Камынин, если Вас устраивают "безобразно простые" скрипты работающие с одним колбэком, я не буду Вас отговаривать их писать. Мои изделия посложнее, требуют в основе классический двухпоточный скелет, подключенных визуальных и win API библиотек, соотв. с четко определенным стартом скрипта и завершением, рационально-ресурсной эксплуатацией колбэков и т.д. Рад за Ваш клуб миллионеров, 99% торгующих индикаторами. Но лично Ваши абстрактные нравоучения в снисходительном тоне мне малоинтересны. Удачи, досвиданья.
А можно попросить зарегистрировать пожелание? В возвращаемую таблицу t функции TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER first_candle, NUMBER count) добавить возвращаемые данные - тайфрейм графика (индикатора). Должен приходить в синтаксисе как interval CreateDataSource, в виде зарегистрированных имен (INTERVAL_H1) или их значений (60). Ещё было бы неплохо возвращать ещё одни данные - класс и секцию бумаги этих данных. Правда я не знаю что может вернуться при запросе индикатора. Спасибо.
Сергей, спасибо, идею понял, сегодня в вечернюю сессию, когда код споткнется об нулевое значение МА, прогоню вот эту простую конструкцию. Без подписки, т.к. график открыт.
Код
tagMA = "111" --идентификатор наложенного MA
q = getNumCandles(tagMA)
t, n, l = getCandlesByIndex(tagMA, 0, 0, q);
mov = t[q-1].close
for i = 0, q-1, 1 do
local temp = t[i].close
if temp and temp ~= 0 then last = temp end
end
message("свечек="..q.." в таблице="..#t.." MA="..mov.." last="..last)
Если нужны пропущенные свечки, пройдитесь циклом от 1 до ds:Size()
Сергей, я сегодня туго соображаю ), подскажите пожалуйста куда этот цикл пристроить и нужно ли что-то исполнять в его итерациях? Если Вам не сложно, напишите этот кусок кода и куда его вставить.
Надо разбираться почему не работает и что именно не работает. Приведите пример кода и последовательность действий.
Вот так подписываюсь на индикатор.
Код
is_run=true;
class, sec = "SPBFUT", "SiM7"
tagMA = "futRTSI" --идентификатор наложенного MA
tf = 30 --таймфрейм графика
function main()
Start()
while is_run do
sleep(50)
end
end
function Start()
step = 0 + (getParamEx(class, sec,"SEC_PRICE_STEP").param_value or 0)
if step == 0 then message("Инструмент не найден") return end
ds, Error = CreateDataSource(class, sec, tf)
sleep(100)
if ds then
while (Error == "" or Error == nil) and ds:Size() == 0
do sleep(1)
end
ds:SetUpdateCallback(Run)
if tonumber(ds:Size() or 0) > 0 and not Error
then Run()
else message("Не подключились к данным, "..(Error or "нет ошибки"))
end
else message("Подписка не удалась")
end
end
function Run()
if not ds or not is_run then return end
local q = getNumCandles(tagMA)
if not q then ms("Индикатор не считан") return end
local t, n, l = getCandlesByIndex (tagMA, 0, q-1, 1);
if type(t) ~= "table" then message("Средняя не считана") return end
local mov = t[0].close
mov = math.ceil(mov/step + 0.5) * step
if not mov then message("Средняя не рассчитана") return else message("MA "..tostring(mov)) end
end
Оно работает. Но первый вызов Run() из Start() может не считать
И понял то, что основной скрипт запускать из папки индикаторов вообще не вариант, иначе останешься только с одним рабочим колбэком - OnCalculate, который ещё и строчит как пулемет по поводу и без повода. Плохая идея.
Надо разбираться почему не работает и что именно не работает. Приведите пример кода и последовательность действий.
Сергей, спасибо за желание помочь, готовлю код
Цитата
К слову, есть еще один вариант - вообще всю логику перенести в скрипт индикатора, если это допустимо.
А вот это интересно. Вчера попробовал в свой код добавил необходимы атрибуты индикатора, запустил его из папки LuaIndicators, терминал упал ). Я сделал вывод что так не можно. ) Прошу Вас вкратце описать как терминал опрашивает файл индикатора. Вот сейчас накладываю MA на минутный график, в коде индикатора добавляю message, жду минут 5 (5 новых свечей), а скрипт код судя по всему исполнен терминалом только один раз?
Сергей, попробую проще изложить задачу. Нужно в скрипте работать с МА фьючерса и видеть её (МА) на графике. Меняем значение МА - видим эти изменения на графике и теперь скрипт работает с МА с новыми настройками. Где менять параметры МА - в скрипте или в наложенном индикаторе на график - мне всё равно, будет одинаково удобно.
чтобы синхронизировать изменения параметров МА - на графике и в скрипте. Тут вариантов мне видится три: 1. Накладываем на график индикатор из папки LuaIndicators, подписываемся на свечки этого графика, и создаем в своем скрипте колбэк на изменение свечек, по колбэку читаем значение наложенного MA .
Код
t, n, l = getCandlesByIndex (tagMA, 0, q-1, 1);
lastMA = t[0].close
Это я пробовал, работает. Но есть проблема, при старте скрипта указанная выше строчка не срабатывает, а вот на последующих вызовах колбэка уже нормально.
2. то же что п.1, но создаем колбэк на изменения непосредственно MA. Собственно о возможной реализации этого я и спросил, но ведь здесь нужно подписываться по тегу? Не нашел такой функции.
3. Ваш вариант - подписаться на свечки, по колбэку их читать, рассчитывать по ним МА. Но мне нужна визуализация индикатора на графике, чтобы когда я изменю параметры МА в скрипте, тут же увидел измененную МА на графике. Как я понял, это невозможно?
Для решения задачи, Вы можете добавить функцию расчета EMA на данных из CreateDataSource. Будет тоже самое. Функции уже выкладывались тут https://forum.quik.ru/forum17/topic1157/
Ок, EMA я рассчитаю в своем скрипте, значения упакую в переменную-таблицу скажем за последние 50 свечек, а как её потом визуально выложить на график?
И второй вопрос, попроще. Для подписки (с целью затем запустить колбэк на изменения) на котировки инструмента по классу и коду есть функция CreateDataSource. А можно создать колбэк на изменение индикатора, например EMA, наложенного на тот же график? Понятно, что выход есть - подписываемся на свечки, и по колбэку считываем EMA. А вот колбэк на непосредственно EMA возможен? Ведь он будет срабатывать гораздо реже, только раз в таймфрейм графика, если например EMA по Open.
Добрый день. Захотелось вдруг подписаться на данные, раз уж есть такая возможность. ) И уже сутки борюсь с CreateDataSource будь он (или всё-таки я ?) не ладен! ))) Научите пожалуйста пользоваться CreateDataSource. Проблема: - вот так, из main, запускается подписка
Код
class = "SPBFUT"
sec = "SiM7"
function Run()
message("размер "..ds:Size())
end
is_run=true;
function main()
ds, Error = CreateDataSource(class, sec, INTERVAL_H1)
ds:SetEmptyCallback()
sleep(100)
message(type(ds).." "..(Error or "успешно"))
while is_run do
sleep(50)
end
end
а вот так, вне main - нет...
Код
class = "SPBFUT"
sec = "SiM7"
function Run()
message("размер "..ds:Size())
end
is_run=true;
function main()
while is_run do
sleep(50)
end
end
ds, Error = CreateDataSource(class, sec, INTERVAL_H1)
ds:SetEmptyCallback()
sleep(100)
message(type(ds).." "..(Error or "успешно"))
почему? Собственно задача - подписаться на данные, запустить колбэк на изменения, но в дальнейшем на лету менять интервал графика, инструмент подписки в ту же переменную ds. Можно конечно городить переключатель флагами в main. А вне main никак не подписаться, чтобы упаковать подписку в отдельную функцию с вызовом не из main? Спасибо.
нашел я сурка. ) Сперва, после экспирации были успешно с первого раза заменены все устаревшие деривативы на свежие, затем начались постоянные попытки замены SiH7. Я его нашел и удалил из списка "Экспорт в системы теханализа" и всё закончилось.
Брокер ВТБе24 обновил версию терминала до 7.9.0.41 Первое, что бросилось в глаза - терминал на старте теперь сам ищет инструменты с истекшими сроками жизни и сам предлагает их заменить их на действующие. Это действительно круто, спасибо. Но почему он это делает при КАЖДОМ старте, с одним и тем же инструментом. Склероз на собственные ноу-хау? )
Запускаем, видим
Нажимаем Да, в следующем окне соглашаемся - Заменить.
Закрываем терминал, настройки как я полагаю сами сохраняются. Запускаю терминал и нестерпимое дежавю, опять тот же вопрос и по тому же инструменту ) И так до бесконечности.
Нужные галки в настройках стоят.
При всём этом я не вижу у себя этого инструмента ни в одной таблице или графике. Может быть виноваты опционы?
Добрый день, Зинаида, проверять не буду, поверю на слово. ) А так ли тяжела и обратная совместимость? Описанный мною метод, например, не подойдет? Представьте, меняем брокера, получаем более старый терминал, подкладываем ему файл настроек от прежнего более нового, а он раз, и подхватил, ну ведь здОрово же! Посмотрите например какую версию терминала предлагает Сбербанк...
Добрый день. Каждая следующая версия QUIK не читает файл настроек предыдущей. Согласитесь, это неудобно, включить утром терминал, получить обновление, запустить терминал с пустым рабочим пространством, отложить торговлю и заняться настройкой рабочего пространства часа на два (у меня например столько времени это занимает). Терять время и деньги. Если это называть не "особенностью", а все-таки проблемой, давайте попробуем её решить? Кажется очевидным, что в новой версии появляются какие-то новые настройки, а некоторые старые упраздняются или заменяются. Здесь на форуме, думаю, многие пишут хотя бы на LUA, и в своих скриптах, как и я, довольно легко решили проблему совместимости настроек скрипта с новыми версиями своих творений. Ведь всё довольно просто: 1. В начале кода (старт софта) создаем дефолтные переменные настроек SetTab={set1="default", set2=0, set3="default", set4=0} 2. Считываем сохраненный файл настроек в таблицу SetTabTemp 3. Перебираем таблицы, подменяя значения в SetTab значениями из SetTempTab, если таковые нашлись. 4. Убиваем SetTempTab. Таким образом не измененные настройки мигрировали, новые в дефолтах, более не применяемые - не считаны. Если это легко описывается на LUA, думаю легко написать на любом языке ниже уровнем. --- Например этим способом можете попробовать решить эту, нет, не "особенность", а именно - проблему? Если да - добавьте в пожелания, пожалуйста.
На этом этапе разбора проблемы прошу зарегистрировать пожелания: --- Для ручного сохранения и загрузки настроек использовать путь, прописанный в настройках клиентского места и Добавить переключатель данной опции в настройки клиентского места ---- или Индивидуализировать запоминания последних использованных путей сохранения и загрузки настроек для каждого экземпляра терминала раздельно. Даже если эти пути обобщает ОС. --- Второе решение "красивее", но впрочем любое на Ваше усмотрение. Спасибо.
green_X5 написал: Во всех квиках в настройках путь к файлу сохранения настроек прописан явно, абсолютные пути. Все работает, пока периодически очередной запускаемый терминал не подхватывает файл настроек другого терминала, и самое гадкое - переписывает на него путь в настройках сохранения.
Т.е. складывалось ощущение, что у Вас терминал хватает не свои настройки, вопреки прописанному пути. Такого конечно же быть не должно. Что касается диалога сохранения настроек в файл - действительно, такая особенность существует.Мы ведь правильно понимаем, что при всём при этом путь для сохранения файла настроек запоминается не всегда?
Да, путь в настройках изменяется на неверный не всегда. Скорее всего только при ручном сохранении настроек не в свою директорию. Скажите, а можете исправить эту "особенность" диалога окна?
Ну и нетрудно представить один из случаев перезаписи настроек из соседнего терминала. Достаточно лишь нажать "Сохранить настройки в файл"->"Ок" не проверив к своему ли терминалу прописан путь (повторяюсь - в настройках прописано всё правильно!).
Видео пока не делал, т.к. не спровоцировал перезапись настроек. Но вижу откуда ноги растут. Попробуйте пожалуйста у себя, кому не лень. 1. Ставим два терминала на диск в соседние директории. (или уже стоят) 2. Запускаем оба не важно в какой очередности. 3. В одном терминале вызываем "Система"->"Сохранить настройки в файл", смотрим в свою ли директорию прописан путь в окне 4. То же самое (п.3) для второго терминала.
У меня подставляются пути из настроек одного терминала, который последним инсталлирован. Может быть в этом дело? Почему у меня ось подставляет путь из настроек не СВОЕГО терминала?
со 100% уверенностью заявляю, что такое поведение терминалов имеет место быть, т.к. замечено далеко не однократно и на протяжении не одного года работы с вашим софтом. Я пока что не представляю как это зафиксировать при помощи видео, т.к. вряд ли вы почерпнете что-то полезное из скрина окна настроек, где путь вдруг уже изменен на директорию соседнего терминала. Ведь момент когда это произошло - отловить не удается, терминал на старте ставит в известность о баге, подгрузив (удачно или нет, зависит от совместимости файла настроек) файл настроек из директории соседнего терминала, и путь в настройках уже переписан. Баг носит несистематический характер, зависимость его появления от каких-л. конкретных моих или системы действий я не заметил. Приблизительно, это 1 баг на каждый 10-ый - 20-ый запуск. Единственной попыткой отловить этот баг может стать ответ Вами себе же (у меня нет исходников софта) на такие вопросы, как - не использует ли терминал для сохранения путей к файлу настроек записи в реестр ОС или иные места вне директории терминала - не открыта ли данная запись к изменению со стороны ОС вследствие её некоего ментального исправления заполнения форм (после работы предыдущего терминала) в момент автосохранения настроек при закрытии терминала или в другие моменты работы софта. Кстати, создаваемая резервная копия прошлых настроек остается правильной, от этого терминала. - и другие возможные причины возникновения этого бага, о которых догадываться и найти может только разработчик Заранее благодарен.