Владимир написал: Да не забивайте Вы Квик всяким дерьмом - и так уже не продохнуть от дурацких "сервисов"!
Храните У СЕБЯ данные и обращайтесь к ним сколько душе угодно! САМИ "дергайте данные из файлов в папке Arhive"! Храните там ЛЮБЫЕ исторические данные по любому инструменту за любой период (в Интете этих данных просто ДО МАМЫ!), тестируйте там свои стратегии хоть до посинения - какое дело до этого разработчикам (и пользователям) Квика? НА КОЙ нам "такой функционал: в панель выбора инструмента добавить еще один раздел "Архив", в котором и появлялись бы те инструменты, срок обращения которых истек, но данные по которым для терминала доступны ? Мало глюков в софте, добавить надобно? И РАЗДЕЛИТЕ, блин, процессы доступа к данным и всю остальную херню вроде "склейки графиков!"!
Если вам кроме ТТТ от квика ничего не надо, то не надо думать что остальным этого достаточно.
Данное пожелание было реализовано как функционал склейки графиков при замене инструмента.
Сделайте лучше, чтобы к данным которые имеются у пользователя в архиве можно было бы обратиться. Ну вот лежит у меня в папке archive файлик SPBFUT_SiH1_60.dat в нем как я понимаю часовые свечки по SiH1 Реализуйте возможность обратиться к ним из скрипта через CreateDataSource
Вероятно, что CreateDataSource и так дергает данные из файлов в папке Arhive. Вот сейчас если я пытаюсь обратиться ds,error_desc=CreateDataSource("SPBFUT","SiH1",INTERVAL_H1) мне возвращается в ds=nil, а в error_desc="SiH1 - unknown sec code."
Но данные то имеются, так дайте возможность к ним обратиться и использовать. Это очень бы помогло для тестирования стратегий на исторических данных.
Как вариант решения вижу добавление в функцию CreateDataSource параметра отменяющего проверку на актуальность инструмента.
Ну восьмерка, конечно, не без косяков, но то что вы говорите, это явно не в квике, а у вас проблемы с настройками. Все летает на железе достаточно среднего уровня, QUIK 8.13.0.106
Почитайте про настройку и оптимизацию рабочего места QUIK, тут на форуме есть темы про это.
Да с этим окном еще и не работают горячие клавиши Alt+L - "Закрепить окно" и Alt+B - "Убрать заголовок". Вот со всеми остальными окнами горячие клавиши работает, а с этим нет. Тоже бы исправить.
Добрый день, Заметил, что для всех индикаторов которые я пишу, при добавлении индикатора на график приходится снимать галочку "Поместить график в новую область", а в настройках индикатора выставлять галку "Показывать последнее значение"
Можно ли как-то из кода индикатора ставить и снимать эти галочки?
Какой язык подойдет для написания торгового алгоритма?, Только изучаю данную тему и хотелось бы получить совет куда двигаться, и что осваивать .Относительно описанной в теме стратегии.
Любой алгоритм, это все лишь математика, так что практически любой язык справится. В QUIK встроенный язык LUA, так что не нем и пишем.
Объемы дергать можно из стакана, из графика, из таблицы обезличенных сделок. Значения индикаторов, вроде как не вытащить, только рассчитывать в скрипте.
Как интегрировать с MT5 и главное зачем ума не приложу.
swerg написал: Ровно это и приходит. Или требуются новые значения параметров?
Так хотелось бы чтоб в колбеке не надо было дергать нужные параметры через GetParamEx и сравнивать с предыдущими чтобы понять изменилось ли значение. Гораздо удобнее чтоб было как в первом сообщении Артем описал
Только думаю лучше не OnParam переделывать, а добавить новый коллбек
Знаю, сталкивался с этим. В переменной PRCStr у тебя строка типа "12345.0" А в транзакцию цену надо передавать строку с учетом шага цены "12345"
Короче, точку с нулем из строки похерь и будет счастье
Код
function cut_zero(str)
local num=tonumber(str)
local zero=string.byte("0",1)
local point=string.byte(".",1)
if(string.find(num,'%.')) then -- Имеется точка в числе
for n=string.len(num),1,-1 do -- Перебор справа налево
if(string.byte(num,n)==point) then return string.sub(num,1,n-1) end
if(string.byte(num,n)~=zero) then return string.sub(num,1,n) end
end
end
return num
end
Roman Azarov написал: В коллбек OnParam приходит набор измененных параметров, а не какой-то один конкретный параметр.
Сейчас OnParam просто сообщает что изменились параметры по инструменту и не более того. А пожелание как раз в том и было, чтобы в коллбек приходили измененные параметры.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
BlaZed написал: В результате чтобы нарушилась уникализация надо одним роботом более 100 раз в секунду транзакцию сделать, что практически невозможно.
Делать ставку на то что маловероятное событие НИКОГДА не произойдёт - плохая тактика. Владимир уже на своем опыте об этом знает.
Ну надо же соблюдать баланс между идеалом и разумностью. Если у кого-то хотя бы теоретически может быть более 100 транзакций в секунду, то предложенный мной способ, конечно, не подойдет.
Вот только есть ли такие люди? Даже на высокочастотном скальпинге столько не надо. Я вот даже представить не могу кому может не хватить такой уникализации. Вы можете?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
trans_time=dt.hour*10000+dt.min*100+dt.sec -- время отправки транзакции HHMMSS
trans_id_count=(trans_id_count+1)%100 -- счетчик транзакций, от 0 до 99 и по кругу
trans_id=1000*trans_time+100*robot_id+trans_id_count -- Уникальный идентификатор транзакций
Расчет на 10 одновременно работающих роботов, у каждого робота свой robot_id от 0 до 9 В результате чтобы нарушилась уникализация надо одним роботом более 100 раз в секунду транзакцию сделать, что практически невозможно.
Вы, вероятно, маржинальной торговлей занимаетесь и превысили риск-параметры. Брокер вам заблокировал сделку. Почитайте про маржинальные показатели, и в часности про "Норматив покрытия риска".
Владимир написал: Когда-то давно читал, как один умник в какой-то программе расчётов сделал так: расчёты велись с точностью до копейки (ну или там до цента). Так он остаток от округления (дробные части копеек) переводил на собственный счёт. Идея красивая, никому не мешает, деньги буквально из воздуха... а погорел на некачественной программной реализации: алгоритмист-то он был хороший, а программист - не очень.
Прошу помощи, как ограничить кол-во входов робота. Пока только могу ограничить одной сделкой - проверка таблицы сделок, если появилась сделка робота по комментарию, то больше робот не может входить в позицию сегодня.
Но мне нужно чтобы была возможность указать сколько раз робот может входить в сделку после закрытия позиции.
Сходу два способа. 1) Таблица сделок. Подсчитываем количество уникальных по полю "заявка" сделок с комментом робота 2) Таблица заявок. Подсчитываем количество заявок в статусе исполнена с комментом робота.
Ну и сравниваем полученное число с ограничениями робота. Если меньше торгуем роботом.
hts написал: ARK Genomic Revolution ETF (NYSE: ARKG ) Вот этот тоже не могу в квике найти
QUIK тут не причем, доступы к биржам предоставляет брокер. Вам надо обратиться к своему брокеру, и узнать как подключить выход на нужную вам биржу, в вашем случае NSYE
Владимир написал: Игорь М, Непохоже. Там у меня вообще стоит 10 секунд, а данные обновляются НАМНОГО чаще!
Именно вышеуказанная настройка мешала.
Вот простой код проверки частоты обновления параметров ТТТ по инструменту. Проверьте у себя при разных значениях.
Код
class_code="SPBFUT"
sec_code="SiH1"
function main()
clock1=0
is_run=true
while is_run do
sleep(100)
end
end
function OnStop()
is_run=false
return 100
end
function OnParam(c_code,s_code)
if(c_code==class_code)and(s_code==sec_code)then
clock2=os.clock()
message("delta="..clock2-clock1.."sec")
clock1=clock2
end
end
Что-то предыдущее сообщение криво отправилось, а правки нет...
Цитата
Владимир написал: BlaZed, Не проще. Оккам запрещает: ведь BID и OFFER по-любому нужны. К тому же, о тормозах здесь и речи быть не может - это же фактически две соседние цены в стакане. доступные даже без наличия самого стакана. Я в меню обновляю эти цены раз в 150 мс - куда уж чаще? Ну, теперь ещё буду читать перед отправкой заявки - по затратам ресурсов это не стоящие внимания копейки. Свечи же (у меня они минимум 15-секундные, у Вас, я полагаю, не меньше) намного тормознутее.
Основной мой посыл сообщения был о том, что таблица текущих торгов крайне тормозная, обновляется не чаще чем раз в 1 секунду. Что при высоколиквидных рынках весьма неприятно.
Владимир написал:
Я в меню обновляю эти цены раз в 150 мс - куда уж чаще?
Основной мой посыл сообщения был о том, что таблица текущих торгов крайне тормозная, обновляется не чаще чем раз в 1 секунду. Что при высоколиквидных рынках весьма неприятно.
Не проще ли пользоваться предназначенными для определения состояния сессии параметрами? STATUS STRING Статус инструмента
TRADINGSTATUS STRING Состояние сессии Но есть такая проблема, что таблица текущих торгов очень тормозная и могут быть задержки
Я лично для индикации сессии сравниваю время последней свечи инструмента с локальным временем скорректированным под нужный таймфрейм Для малых таймфреймов отлично подходит.
tom написал: так что делать чтоб тормоза пропали? потому что это не поприколу когда торгуешь интрадей и терминал притормаживает на нескалько секунд
Т.е. у вас со старым файлом настроек были тормоза, а как его удалили тормозов не стало? Если так, то значит какой-то косяк в этом файле. Файл info.wnd отвечает за всякие вкладки и окошки в квике.
Поэтому закрываете квик, удаляете (на всякий случай куда-нибудь скопируйте) файл info.wnd, запускаете заново квик. Открываете все нужные вам окна и графики вручную и сохраните настройки (Система->Сохранить настройки в файл)
Если у вас не 100500 вкладок, окошек и графиков, то должно помочь
Нужная доработка бы была. Хоть и на функционал не влияет, но удобство однозначно добавит. Тоже замучился в куче скриптов нужный выискивать.
И добавлю от себя пожелание, в списке скриптов очень было бы неплохо добавить поле "название", которое бы бралось из самого скрипта. Например, задали бы в скрипте переменную __NAME (ну или какую другую), чтобы она отображалась в списке скриптов.
hts написал: Как то сложно. Продал несуществующую акцию за 100 руб потом купил эту акцию за 90 руб и заработал 10 руб так что ли, Или это как то по другому работает. И если я продал акцию за 100 а на рынке она стоит 110 то что тогда.
Тут все предельно просто, главное принцип понять.
Вот смотрите. Например, вы из своих каких то размышлений решили что акции компании X пойдут вниз. И хотите на этом заработать. Как это можно сделать?
Берем у брокера ВЗАЙМЫ акцию, и тут же продаем эту акцию на рынке, допустим за 100 рублей.У вас появились деньги с продажи акции (100 рублей) и имеется обязательство вернуть брокеру взятую у него акцию. Вроде бы все хорошо, но брокеру то необходимо вернуть взятую взаймы акцию. А у вас ее нет, значит надо купит акцию.
Далее 2 варианта. 1) Если цена пошла вниз, до 90 рублей. Покупаем акцию и возвращаем брокеру. У вас есть 10рублей (100-90) и нет обязательств. Заработали 2) Если цена пошла вверх, до 110 рублей. Покупаем акцию и возвращаем брокеру. У вас есть -10рублей (100-110) и нет обязательств. Потеряли.
v={}
function OnCalculate(index)
if(v[index]==nil)then
if(T(index).hour==9)and(T(index).min==0)or(index==1)then v[index]=0
else
if O(index-1)<C(index-1) then v[index]=v[index-1]+V(index-1) end
if O(index-1)>C(index-1) then v[index]=v[index-1]-V(index-1) end
if O(index-1)==C(index-1)then v[index]=v[index-1] end
end
end
return v[index]
end
Раньше тоже определял время по параметру STATUS, вот только как уже писали выше, он "тормозит" с утра на 3-4 секунды (открытие брокер, если что). Хоть это и не очень критично, но иногда все же при утренних гэпах бывает нужно срочно закрыть сделку, и эти 3 секунды могут стоить 100-200 пунктов.
Решил вообще от проверки по статусу отказаться, решение то простое. Сравниваем время последней свечи с локальным, переведенным в московское, если совпадает, то торгуем.
Естественно, локальное время должно быть синхронизированно.
Антон написал: Мне нужно с помощью нажатия 1 кнопки активировать скрипт который введет 4 значения т.е. цифр Это нужно для быстрого заполнения паролей где копировать и вставить не возможно
Также это как то на уровне мышки настроить грубо говоря я жму 4 конпку мышки у меня вводится там допустим число 3333
Вы уверенны, что на нужном форуме вопрос задаете? Тут про QUIK форум.В квике пароли и копируются и вставляются, и вопрос автоввода пароля решается совсем по другому.
Nikolay написал: В голову приходит одно: взять w32 и поискать главное окно. Если найдено на английском, то english. Правда, если несколько терминалов, то уже может быть не вариант.
Я надеялся на более простой способ, Но ваш тоже подходит. Спасибо.
В общем, значение слипа надо ставить минимум 1, тогда ничего не виснет. А выбирать адекватное значение уже в зависимости от требований конкретно вашей стратегии.
BlaZed написал: Другими словами, конструкция без слипа, типа такой
Код
function main ()
a = 0
is_run = true
while is_run do
a = a + 1
end
end
может легко повешать квик.
Нет. Если процессор одноядерный - да, это будет заметно в скорости общей работы. Если процессор многоядерный (а это нынче стандарт де-факто) - то никто ничего даже не заметит, кроме термометра на процессоре.
Попробуйте, запустите Ryzen 5 3500x на 6 ядер, квик скопытился после запуска
КВИК на виртуалке не имеет постоянного доступа к ноутбуку. Я вышел с виртуалки, и связь с ноутбуком пропала. Но я рассчитываю, что считанные данные останутся в памяти.
Я правильно понимаю что...
Квик на виртуалке, вы закрыли вечером виртуалку, виртуальная машина задампилась, и вы надеятесь, что когда утром включите виртуальную машину, то скрипт продолжит работу с того момента на котором закрыли виртуалку?
Ладно, поиграем в Нострдамуса. Пока VM была выключена, связь с сервером, естественно, оборвалась по таймауту, а в скрипте стоит какая-нибудь проверка на наличие подключения типа onConnect() и при отсутствии подключения что-нибудь там сбрасывается в дефолтные значения и т.д и т.п.
PS: Есть еще вариант, что скрипты при таком "издевательстве" и правда перезапустятся. Эту теорию, думаю, сами можете без проблем проверить простеньким скриптом, который крутится в вечном цикле и при старте выводит какое-нибудь сообщение.
Добрый день. Постоянно в окно сообщений валятся ненужные сообщения от биржи. Например такие: "[FORTS] Уважаемые клиенты, если цена останется на текущем уровне в течение 3 минут, то торги фьючерсами SLV будут приостановлены для 1-ого расширения верхней границы диапазона оценки ценового коридора и рыночных рисков"
А мне вот на фьючерс SLV вообще плевать, не торгую им и не собираюсь.
Причем не одно-два сообщения приходят, а в определенные моменты по 30-40 за 10 минут вываливаются. Полностью отключить сообщения не предлагайте, ибо иногда и правда что-нибудь полезное приходит. Но вот этот "официальный спам" надоел.
Можно ли реализовать фильтрацию сообщений, по типу подписок? Чтобы можно было бы указать по каким инструментам меня интересуют сообщения, а по каким нет.
Другими словами, чтобы биржа/брокер при отправке сообщения соотносили бы ее к определенному типу/инструменту, а со стороны клиента можно бы было выбирать какие сообщения видеть, а какие нет.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB, вроде много пишите, а вот не цепляет и все. Просто вот читаю и понимаю, что вроде что-то может быть даже и нужное, но вот зачем оно мне и какие преимущества даст совершенно не понятно.
Вы хоть как-то заинтересуйте аудиторию то. Видео с обзором своей разработки снимите что ли, да на какой нибудь ютуб залейте. И покажите, мол с помощью данной разработки можно делать то-то и то-то чего на квике не реализовать, и чтобы это был не сферический конь в вакууме, а что-либо реально нужное людям.
Короче, грамотный рекламщик вам нужен, если хотите в массы свой софт пустить.
Евгений написал: Кнопки свернуть, закрыть, восстановить. Нажатие мышкой один раз и держать не отпуская. Если отпустить на кнопке клавишу то выполнится действие. Это так и должно быть, это стандартное поведение?