Скажите, а где-то есть тема или подписка на рассылку новостей о выходе новых версий квика? Если нет, то просьба к разработчикам - можно создать одну тему (например в этом разделе форума) и в нее постить сообщения о выходах новых версий. А желающие могут подписаться на эту тему и получать сообщения на почту. А тему можно сделать закрытую, чтобы посторонние не могли в ней ничего обсуждать.
На определенном этапе понадобилось разносить отчеты из ЛУА в разные поддиректории. Но не смог найти функцию, для создания папки Так же нужна функция проверки, есть ли уже папка.
Каждый раз запускать os.execute("md foldername")
совсем не хочется, это ведь досовское окошко будет моргать постоянно.
Поделитесь пожалуйста какой-нибудь библиотекой для работы с файлами и директориями. Заранее спасибо!
Замучал меня этот WinRos.exe и начал искать способ решения проблемы! ) Нашел эту тему, почитал, понял что разработчики не торопятся сделать одну галочку в настройках, чтобы WinRos.exe не запускался. Но и удалить файл нельзя, т.к. при обновлении будет постоянно будет про него напоминать.
Нашел решение достаточно простое, хотя и извращенно.
В файле info.exe идет вызов iwr.dll, кторая в свою очередь запускает WinRos.exe Но его тоже нельзя удалить, иначе будет постоянно предлагать его скачать. )
Так вот придумал - открываем файл info.exe на редактирование в любом редакторе, который не нарушает бинарную структуру Я использовал обычный редактор в FAR Manager (сейчас попробовал, подойдет даже обычный штатынйы блокнот в винде)
Находите в тексте текст "iwr.dll" - и изменяете его, но только так, чтобы количество символом не поменялось. Я например поставил "iwr.dl_" Сохраняете. ВУАЛЯ )))))
Теперь info.exe не может найти файл iwr.dl_, а значит не запускает и WinRos.exe
Да смени ты брокера, да и все. В том же финаме комиссии теже самые, но можно два компьютера подключить одновременно. У них два сервера, и можно под одним логином зайти на два разных сервера и управлять одним счетом.
В дополнение к моему пожеланию о возможности "копировать" прямоугольники из окна одного графика в окно другого графика могу предложить несколько достаточно удобных для пользователя вариантов: 1) не самый удобный вариант - при нажатии на саму фигуру правой мышкой, чтобы появлялся пункт - скопировать на другой график. И затем предложить все графики, которым присвоены идентификаторы 2) НАИБОЛЕЕ УДОБНЫЙ ДЛЯ ПОЛЬЗОВАТЕЛЯ - сделать постоянную привязку одного и того же прямоугольника на нескольких графиках. Как уже описывал выше - в свойствах фигуры сделать возможность выбрать сразу несколько окон с графиками (ставить галочки у них) в которых она будет рисоваться. Правда тогда придется пересчитывать временные интервалы, т.к. допустим на часовом таймфрейме начало фигуры в 10:00 может быть интервал 3111, а на 5и минутном таймфрейме это же время будет соответствовать совсем другому интервалу. В связи с этим, мне кажется, было бы логичнее в свойствах фигуры указывать не номера интервалов левого и правого края, а временные интервалы. 3) на крайний случай (как я уже писал) сделать возможность управлять свойствами фигур (в частности прямоугольник, да и всех остальных) из LUA, тогда люди сами смогут дописать функцию копирования этих фигур из одного окна в другое.
Zoya Skvorcova написал: Речь про режим связанных окон? Если нет, просьба пояснить.
Когда я рисую прямоугольник на графике, то в его параметрах потом есть вкладка "Координаты" и в нем есть поле "Привязка к графику". Так вот не понятно, что значит привязка к какому-нибудь графику? Я же его рисую непосредственно на пространстве всех графиков, где их много - и свечи цены, и разные индикаторы. В этом поле мне предлагается выбрать любой из них. Что это будет означать? Он же не будет двигаться вместе с графиком. Или будет? Если не будет, то зачем этот параметр?
Цитата
Zoya Skvorcova написал: Возникли некоторые вопросы одному из Ваших пожеланий. Уточните, пожалуйста, как и к чему должны быть привязаны фигуры. И что такое зоны спроса и предложений. Заранее спасибо!.
На мой взгляд, фигуры как не должны быть ни к чему привязаны, как их нарисовали на каком-то месте, так они там и должны находиться. Поэтому как раз и возник вопрос, что значит привязка, и как она влияет на данную фигуру. Зоны спроса и предложения чертятся обычными прямоугольниками, которые недавно добавили в функционал квика. Так что для разработчиков это речь о фигурах "прямоугольник"
Читаю переписку, и удивляюсь - что непонятного в просьбе sav 312?
Человек внятно и понятно объяснил, что просит создать в программе некие ограничения по торговле: 1) ограничить расписание торгов 2) ограничить максимальную просадку за день
Сделать так, чтобы пользователь мог задать эти ограничения, и система не давала торговать вне указанных интервалов, и после превышения допустимых потерь. Сделать так, чтобы пользователь мог установить эти параметры, и чтобы потом не мог их отключить до окончания текущего торгового дня.
Технически это можно реализовать достаточно легко. Вот два способа: 1) при задании параметров ставится время, в которой данные настройки анулируются. В установленное пользователем время (например 23.49) система контроля убытков отключится. 2) при задании параметров ставится галочка "создать пароль неизвестный пользователю". Система его генерит сама. И пользователь его не знает. В установленное пользователем время (например 23.49) система отправляет пароль на e-mail. Но это уже слишком извращенно. Первый вариант мне кажется вполне удовлетворяет потребностям.
sav 312 - к тебе есть предложение, как это можно сделать самому - понадобится вторая машина, которая может сделать второе подключение к торговой сессии. На этой машине будет крутиться робот, который в запрещенные интервалы времени и после превышения допустимых убытков будет тупо закрывать все открытые тобой позиции. Подойдет любая виртуальная машина. Чтобы ты его не мог отключить, я думаю не сложно найти друга, который с одной стороны всегда на связи, в случае незапланированных действий данного сервера, а с другой стороны не поддастся на твои уговоры дать тебе пароль. Этот сервер даже можно не выключать. Он будет просто постоянно запущен, но ты не можешь до него добраться.
Еще как вариант - запоролить какую-нибудь удаленную машину случайным образом можно какой нибудь программой, которая эмулирует движения клавиш и мышки. Она сгенерит пароль, потом поменяет в настройках удаленного сервера. А тебе она его вышлет только в 23.49 на почту. Хотя это конечно очень рисковано. Но если это допутсим виртуальный хостинг, то в крайнем случае можно будет связаться с тех.поддержкой и удалить сервер. Но это опять же лазейка для слабонервных ) В общем, "друг" мне кажется более чем подходящий вариант.
В процессе работы с файлами настроек wnd и скриптами lua постоянно сталкиваю с таким неудобством, что квик запоминает последнюю открытую папку для тех и других случаев одинаково. Т.е. если ты сохранил конфигурацию окон в какую-то одну папку, а потом хочешь добавить луа скрипт, то по умолчанию он предлагает папку, в которую ты только что сохранил wnd файл. А потом когда ты откроешь луа скрипт, при сохранении конфигурации окон он теперь уже будет предлагать последнюю папку с луа скриптами.
Аналогичная история происходит, если я например делаю экспорт настроек какой-то вкладки. И аналогино происходит, если я делаю сохранение содержимого какой-нибудь таблицы в txt файл, а потом начинаешь открывать файл конфигурации окон.
Большая просьба - разделите пожалуйста эти три переменные, в которых хранятся последние открытые директории 1) для луа скрпитов 2) для файлов конфигураций wnd и для сохранения параметров вкладок 3) для экспорта данных из таблиц.
Как вы понимаете, никто не будет хранить все эти файлы в одном месте, и бегать между папками очень неудобно. Заранее спасибо!
sav 312 написал: Лично для меня сервер идеальный вариант, если бы не двухфакторная аутентификация Сбербанка.
Мне кажется вам проще сменить брокера. Кстати какие комиссии на операции с фючерсами в сбере? подумывал на него перейти, как на запасной, но теперь понял, что с такими холопотами по авторизации - нафик нафик. Но комиссии интересны. Лично я сижу на финаме. И там есть два сервера, к которым вы независимо можете подключиться с двух разных терминалов. Как раз под вашу задачу подойдет. Но интересно понять, что делает ваш робот рискменеджемента? Как он блокирует ваши торги?
sav 312 написал: В заключении хочу сказать, что проще отписаться, что все это бред, чем решить вопрос, ну или предложить что-то дельное.
Идея с внешним рискменеджементом звучит конечно интересно, для тех, кто не может совладать со своими эмоциями. А опишите принцип работы этого робота? Он блокирует торги в случае возникновения большой просадки по счету за один день? или как?
swerg написал: Может в этом окне вообще есть смысл сделать этакий лог скриптов? скрипт такой-то - started скрипт такой-то - завершился с таким-то результатом и потому-то
SDL написал: При возникновении программных ошибок в теле обработчика, заданного вызовом SetUpdateCallback(), в поле сообщений окна скриптов не выводится никакой информации, функция просто тихо прекращает свое выполнение. Это не есть правильно. В случае ошибок в других коллбэках, например OnInit(), сообщение выводится.
Кстати я тоже такое замечал! Очень долго в этом случае разыскивал через расстановку сообщений message, прежде чем находил место ошибки. И очень удивлялся, почему такое происходит.
тот самый написал: Вас уже просили предоставить ВЕСЬ скрипт, а не разводить демагогию
Скрипт содержит 7000 строк. что от него толку? Суть проста - в OnInit идет загрузка данных из графиков в массив данных. Это занимает время. Вам как программисту понятно, что нет разницы, чем именно занят в этот момент процедура? ДА хоть там цикл от 1 до 100000000000000 будет крутиться. В общем если вам по существу ответить нечего, то лучше дайте сделать это тем, кто в теме
swerg написал: Есть большие сомнения в корректности ваших выводов.
я это вижу в протоколах вывода message я умею наблюдать последовательность вывода на экран строк ) (да и ошибки из функции onquote, когда в ней какая-то переменная не определена)
Цитата
тот самый написал: Всё уже давно и детально расписано в самой документации:
Из этого только не совсем понятно, что такое поток?! Можете проще объяснить? Может OnQoute сработать до того, как закончится OnInit?
На сколько я мог наблюдать то все функции колбеки срабатывают именно в тот момент, когда произошло событие, иначе в них бы не было особого смысла, если бы они дожидались завершения работы какой-то другой процедуры. Для сомневающихся могу в понедельник сделать эксперимент, когда стакан заработает.
тот самый написал: именно так - она и считается в данный момент. И именно поэтому нельзя настраивать высоту строк и шрифт для каждой ячейки. А стОит предоставить пользователю право изменять шрифт да ещё и высоту столбцов - пиши пропало
Повторяю: я просил сделать возможность задавать размер шрифта для каждой таблицы отдельно, но никак не для каждой ячейки
Как уже писал выше, OnInit действительно запускается самый первый. Но еще до конца его работы уже инициируется функция OnQuote и пока OnInit не делает свою работу (а он у меня загружает значения некоторых графиков в массив данных), OnQuote уже начинает свою работу, что приводит к ошибкам в результате отсутствия некоторых данных. Я конечно решил проблему введением некоей переменной, которая принимает значение только в конце OnInit , но это лишние проверки в OnQuote , что в теории создает лишнее торможение
Вопрос к тому, что как и было обсуждение в одной из соседних веток, в чем тогда разница, прописывать инициацию переменных прямо в теле макроса до описания всех функций, типа OnQuote, или внутри OnInit? для чего тогда OnInit нужен?
В роботе описаны функции OnInit и OnQuote (коллбек по событию стакан).
Так вот получается, что при запуске скрипта OnQuote начинает срабатывать раньше, чем отработает OnInit Дело в том, что в OnInit описаны переменные, которые нужны потом для работы со стаканом.
Разве это логично, что OnInit не обрабатывается первично?
Опишите тогда пожалуйста логику выполнения скрипта, чтобы понимать всю последовательность. Заранее спасибо.
тот самый написал: Разный размер шрифтов в таблице - неизбежно отразится и на разной высоте строк в таблице, что в свою очередь - больно ударит по быстродействию QUIK-а - т.к., чтоб определить какую именно ячейку выбрал пользователь - потребуется сканировать ВСЕ ячейки и их RECT-ы. Это ничего страшного, если это какая-то пользовательская таблица 10х10, а что если это Таблица Обезличенных Сделок или Текущих Торгов???.
Мое пожелание подразумевало, чтобы разные таблицы могли иметь разные шрифты, а не в одной таблице можно было разные строки писать разными шрифтами. Если вы программист, то должны понимать, что высота строки в конкретной таблице будет считаться только один раз при создании таблицы, и после этого значение данной переменной будет браться как константа для каждого окна.
И еще одно пожелание: 3) вам был бы огромный респект и уважение, если бы один и тот же прямоугольник можно было "привязать" к нескольким графикам. Ведь зоны спроса и предложений часто ищут на разных теймфреймах. И было бы просто мегаудобно, если можно было отметить зону спроса на часовом графике, и потом поставить у нее признак "рисовать на всех графика", или была возможность поставить галочки только на нужных графиках. Ведь список всех окон с графиками известен. И соответственно чтобы эта зона стала отображаться на выбранных графиках.
Спасибо большое за возможность рисовать пряямоугольник!
Однако есть сразу несколько пожеланий, касающиеся в принципе любых фигур и объектов на графике:
1) сделать возможность писать к ним комментарии! Причем которые будут показываться как и уметок при наведении на них. Странно что этого не сделано сразу, это мне кажется очевидно, что такие пометки для себя очень важны. Данные комментарии нужны у любых объектов, ведь горизонтальные объекты могут быть многодневными, и нужно помечать, в результати чего они были нарисованы
2) Каждому объекту дать возможность присвоить "идентификатор", как это сделано к любому графику. И дать возможность из LUA брать и менять параметры этих объектов, т.е. определять их границы и т.д. Это создало бы огромную возможность использовать эти объекты для роботов, что в разы повысило бы эффективность системы.
Сейчас это приходится делать через достаточно неудобные метки, которые обладают всеми этими свойствами.
А что мешает хранить старые значения постоянно в глобальных переменных? собственно они и так у вас описаны как глобальные. Вы можете например запоминать значение RSI_n, в переменную RSI_n_prev и затем загружать значения всех свечей, кроме последней, только если RSI_n не равен RSI_n_prev
Egor Zaytsev написал: 1. Для Lua пожелание зарегистрировали. Стандартными средствами уже можно рисовать фигуры (обновитесь до версии 7.4 и выше)
Спасибо! Я ведь правильно понимаю, что я не могу сам поставить обновление, если я подключен через Финам?
Цитата
Egor Zaytsev написал: 2. Здесь хотелось бы узнать более подробно, как должен работать предложенный Вами вариант. Например: "Если объем =>5, то выделять красным". Т.е нужно понимать, что конкретно доработать.
В настройках окна стакана хотелось бы иметь несколько условий, для разных объемов и цветов. Думаю 4-5 критерия будет достаточно. Это должно быть что-то типа условного форматирования в экселе. Т.е. примерно так: параметр сравнения (чтобы можно было указать больше меньше или равно какого-то значения), число, с которым сравнивать, и цвет, которым отображать в случае выполнения условия. и таких параметров штуки 4-5, чтобы можно было выделить цветом средние и большие объемы.
При написании торгового робота сталкиваешься с ограничением функционала QUIK и LUa.
Просьба рассмотреть возможность добавить следующие возможности в КВИК и ЛУА:
1) возможность рисовать на графике прямоугольные объекты. Собственно это нужно не только из ЛУА, но и мышкой. В частности нужно иметь возможность рисовать зоны спроса и предложений. Можно конечно коридоры использовать, если не будет заполнения прямоугольника, и нарисуешь несколько зон то границы перемешаются, и не поймешь где верхняя граница одной зоны, а где нижняя другой.
2) Очень бы хотелось иметь возможность раскрасить стакан разными цветами, в зависимости от объема заявок. Для нормальных торгов это важно.
3) Хотелось бы иметь возможность создавать из LUA таблицы, с разными размерами шрифтов при отображении. Вообще в квике было бы неплохо иметь не один шрифт для всех текстов, а чтобы каждую таблицу можно было настроить под свои нужды. Места на экране мало, и не все таблицы одинаково важны.
4) Дать возможность из LUA управлять окном графика - размеры окна, верхние и нижние значения шкалы цены, начальный и конечный интервал отображения, позиция текущего положения (нижний скролинг имеется ввиду). Не думаю что это очень сложно, но при работе из скрипта, часто нужно перемотать позицию куда-нибудь, чтобы увидеть где он там что-то поставил на графике.
Подскажите пожалуйста, что означают цифры в столбике "Объем" в таблице обезличенных сделок?
Пояснения: В таблице обезличенных сделок по индексу РТС берем любую строку
164933
15:34:58
99710
1
124508.48
Продажа
Как видим, одна сделка, а объем при этом 124508.48. Что это за цифра? при этом ГО на данный момент 14092. Или это объем в рублях? Кажется догадался, но хотелось бы убедиться.
-- проверяте статус файла -- возвращает true если файл открыт -- возвращает false если файл не открыт function if_fileopend (param_file_status) if param_file_status == nil then return false else local file_string = tostring(param_file_status) -- message("file_string="..file_string) if string.find(file_string,"(closed)") ~= nil then return false end if string.find(file_string,"file ".."%(") ~= nil then return true else message(param.client..": функция if_fileopend не смогла понять статус файла "..file_string) return false end end end --if_fileopend
у меня сейчас проверка на существование файла производится вот так:
file_sdelki_name = "c:\\filesdelki" file_sdelki = io.open(file_sdelki_name,"r+"); -- Пытается открыть файл в режиме "чтения/записи" -- Если файл не существует то создает if file_sdelki == nil then file_sdelki = io.open(file_sdelki_name,"w"); -- Создает файл в режиме "записи" FileCloseWithCheck(file_sdelki); -- Закрывает файл file_sdelki = io.open(file_sdelki_name,"r+"); -- Открывает уже существующий файл в режиме "чтения/записи" end;
-- закрывает файл, только если он был ранее открыт function FileCloseWithCheck (param_file) if if_fileopend(param_file) then param_file:close() end end --FileCloseWithCheck
олег написал: Конечно можно расширить место для стаканов, но какой смысл, если в самих стаканах полно свободного места и поэтому хочется их сделать поуже.
Присоединюсь к этому вопросу. Сейчас версия 7.2.2.3 и стакан невозможно сузить меньше определенного минимума. Но в чем проблема сделать возможность менять размер до любого размера? в конце концов я могу в настройках стакана оставить допустим только 2 столбика, а размер при этом уменьшить не смогу.
Просьба к разработчикам: добавить в LUA функции для определения вкладок в QUIK Это нужно для того, чтобы одного и того же робота можно было запускать для разных инструментах, в разных вкладках. Тогда в названии вкладки можно было бы писать код инструмента.
Еще вторая просьба, дать возможность при создании окна указать название вкладки. Потому что-то если ты после запуска робота, переключился на другую вкладку, а робот при этом пересоздал окно, то оно выводится на текущую вкладку, а это не очень удобно.
вы можете в его расчете поставить проверку на номер свечи, на которой он вызывается. Общее количество свечей в графике можно определить функцией Size() а номер текущей свечи передается в качестве параметра при вызове OnCalculate простым условием:
if index > Size() -100 then ..... end
вы заставите индикатор выводиться только для 100 последних свечей
Я вас понял. Вопрос был именно о том, есть ли возможность найти сами метки на графике. Впрочем проанализировав номера меток, я понял, что они присваиваются последовательно от 1 и по возрастанию, так что при необходимости можно просто цикл сделать и удалить только те, которые нужно
В любом случае не надо мне больше предлагать сохранять их в массив. Это решение и так очевидно. Я ищу решение поиска меток именно в средствах квика и LUA, а не в ручном сохранении меток.