Индикатор ликвидности. Квик - Таблица сделок - Индикатор ликвидности. Для фондовой секции данный параметр работает и это круто! Для срочной секции этот параметр не работает и это очень не круто! Желаю чтобы работал!
Nikolay написал: - не ставить стоп физически, а отслеживать цену алгоритмом и закрывать "по рынку" исходя из текущей ситуации, если алгоритм решил, что стоп сработал.
Alex написал: Я тоже являюсь их клиентом, версия квика аналогичная. Значит как-то с брокером может быть связано, само пройдёт? Вы обновляли что-нибудь?
Я ни чего не делал с утра, само пройдет)))
"там же вчера и сегодня перестраивают системы под квал/не квал у людей срочка пропала))"
Вот такое вот сообщение видел сегодня в чате в скайпе
Alex написал: Здравствуйте. Возникла следующая проблема: при создании новой таблицы текущих торгов исчезли из доступных параметров "мин/макс. возможная цена". В старых таблицах, которые были созданы раньше, эти столбцы остались, но они пустые!
Котировка последнего клиринга - отсутствовала вчера, и ряд других параметров, сегодня - норм. квик 8.13.1.16 Открытие брокер
Хороший программист - хорошо свое время оценивает - за недорого навряд ли будет делать. Могу подсказать, но не дорого и не дешево - по нормальной цене)
function OnTransReply(reply) -- Функция вызывается терминалом QUIK при получении ответа на транзакцию пользователя
***
if reply.status == 3 then -- Транзакция выполнена
--------------------------------------------------------------------------------------------
OpCl[n] = rts(n, reply.price)
Num[n] = reply.order_num
--------------------------------------------------------------------------------------------
elseif reply.status == 2 or reply.status > 3 then -- Произошла ошибка
***
Вот так получаю цену и номер заявки - вопросов не возникало
Maksimus написал: Именно так я учился писать на mql4-5. Сначала смотрел видео уроки и пробовал по ним,потом начинал разбираться в каждой строчке кода и в итоге без проблем получается на этом языке. Но qlua для меня пока темный лес-куча дров.
Знакомо. Первые роботы на мкл4 были. Потом перешел на квик и lua - матерился долго. После метатрейдера на квик - это прыжок назад. Но что делать на метатрейдере опционов нет.
самостоятельное изучение - очень много времени уйдет и все равно вопросы останутся (я шел этим путем) возможно есть смысл поучится у кого то, по крайней мере будет первоначальная база
s_mike@rambler.ru написал: Настройте в диаграмме порядок отображения слоёв
Это я первым делом проверил, сейчас еще раз проверил. Суть вопроса остается прежней - цепляется заявка, метка не цепляется. Порядок слоев роли не играет. Заявка поверх метки - цепляется - заявка, метка поверх заявки - цепляется - заявка.
Ставим лимитную заявку роботом, поверх этой заявки (по той же цене) робот ставит метку в виде линии (можно сначала метку поставить потом заявку), в результате имеем на графике две линии одна из них это заявка, другая - метка, т.к. цены заявки и метки равны, на графике видим только метку, а заявка казалось бы лежит под меткой, но при наведении курсора на линию и попытке перетащить метку - цепляется не метка, а заявка. Есть ли какой то способ зацепить именно метку, а не заявку.
BlaZed написал: Да не бывает простейшего робота, такой работать не будет ибо слишком много моментов надо учесть, чтобы косяки квика обойти. Своего робота даже без стратеги показывать жалко, слишком много трудов вложено. Не думаю, что хоть кто-нибудь тут вам своего покажет, сильно удивлюсь если ошибся.
Так что вам лучше писать самостоятельно и спрашивать уже конкретно то, что у вас не получается.
Робот отправляет рыночную заявку по опциону (рыночная по опциону - так надо) - сделка прошла - все ровно, но иногда без видимых причин выскакивает ОШИБКА - Ошибка создания заявки. [GW][32] "Цена сделки вне лимита". С чем это может быть связано - куда копать?
Причем стакан плотный не пустой, да если и пустой, то выставится и сняться должна и все, а не писать про ошибку.
Суть вопроса в том что "10:00:05" это серверное время и торги по времени уже начались, а функция status == false не дает торговать каое-то время. В принципе меня этот вопрос не особо волнует т.к. для опционов время в боте стоит - старт торгов в "10:01:00", финиш в "18:44:00" (вечерняя сессия по аналогии), но все же хотелось бы понять почему status живет своей жизнью. Был еще такой момент у одного из товарищей (писал об этом в другой ветке), бот торгует - у фьюча status == true в течение всей торговой сессии, а вот у опционов с утра все норм, а ближе к вечеру (точное время уже не помню) - status == false - и понятное дело бот не торгует опционы, а торговля то идет.
Да и сама эта функция как то странно себя ведет: время "10:00:05", а status == false, (на 3-5 сек. на старте торгов задерживается), время "18:45:33", а status == true. Прокомментируете?
Рекомендуем проверить статусы инструментов/классов, в момент создания транзакции. Это касается таких параметров, как "Состояние сессии" и "Статус торговли инструментом" в таблице текущих торгов. Если "Сессия" покажет "закрыта" и/или "Статус" будет "не торгуется", то транзакция не выполнится. Можете прописать в коде скрипта условие на проверку этих двух статусов перед отправкой.
Код
if round(getParamEx(statusClass, statusCode, "status").param_value) == 1 then status = true else status = false end -- Торговля разрешена/не разрешена
Во всех скриптах вот такая проверка стоит, если status == false, то транзакция не уйдет и тем не менее однажды вылезла ошибка описанная здесь.
Да я так и не понял в чем подвох был, а здесь то написал с целью привлечения внимания общественности - глядишь может кто и откликнется - подскажет в чем дело и как с этим быть.
Поддержу вопрос. В Открытии статус фьючерсов и опционов - проблем нет - все работает, а в БКС например фьючи - работает, а опционы к вечеру статус = 0, хотя все торгуется.
nikolz написал: (как правило за символическую плату)
От себя добавлю - бесплатно - там же всего то надо чтобы было вот так и так, а сейчас просто на просто как то оно не так работает. Там все просто - "пару строк поправить" - делов то)))
function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
--------------------------------------------------------------------------------------------------------------------------
for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*_*%P*),") do
for sec in string_gmatch(getClassSecurities(class), "(%P*%.*%P*-*%P*),") do
if sec == code then return class end
end
end
--------------------------------------------------------------------------------------------------------------------------
end
function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
--------------------------------------------------------------------------------------------------------------------------
for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*),") do
for sec in string_gmatch(getClassSecurities(class), "(%P*_*%P*_*%P*),") do
if sec == code then return class end
end
end
--------------------------------------------------------------------------------------------------------------------------
end
Здравствуйте. Функция не возвращает код класса: "STOCK_USA" и "FQBR" ("SPBXM" - не проверял). В чем подвох?
Вероятно таблица создается function OnInit(script_path) -- Функция вызывается терминалом QUIK перед вызовом функции main() здесь end Создайте ее вот function main() -- Функция, реализующая основной поток выполнения в скрипте здесь end
А может ответы на ваши вопросы внимательнее изучать?)))
Цитата
В какой лимитной заявке? Когда выставляется стоп, ни какой лимитной заявки нет. Лимитная заявка выставляется только после того, как условия выполнились согласно указанным условиям в стоп заявке или в тейке.
Все верно. Теперь нам нужно
Цитата
Всё бы хорошо, но я не могу отловить сам результат выполнения стоп заявки, когда стоп исполнился. В моём понимании когда срабатывает стоп, создаётся новая заявка с новым номером заявки которая не равна номеру стопа. Хотелось бы увидеть схему OnStopOrder -> ... -> ... -> здесь признак того что стоп сработал.
Сработала стоп-заявка - нужно это действие отследить, так? В таблице стоп-заявок есть поля: Номер и Номер заявки. Поле Номер - это номер нашей стоп-заявки, поле Номер заявки - это номер лимитной заявки - данное поле при выставлении стоп-заявки пустое, как только наша стоп-заявка превратится в лимитную - это поле заполнится - номер лимитной заявки - все.
Демидков Юрий написал: Дальше где-то откопать номер выставленной лимитированной заявки.
Пример для таблицы заявок. linkedorder - в таблице стоп-заявок и есть номер лимитки.
Код
function CheckOrders() -- Функция проверяет таблицу заявок
local gNOf = getNumberOf("orders")-1 -- Номер последней строки в таблице заявок
for i = NumLineTO+1, gNOf, 1 do -- Перебирает строки в таблице заявок начиная от NumLineTO+1
local orders = getItem("orders",i) -- Параметры заявки
...
local num = 0 -- Номер заявки
if bit.test(orders.flags, 0) then -- Заявка активна
num = orders.order_num -- Контроль заявки
end
local stopNum = orders.linkedorder -- Номер стоп-заявки
...
end
end
Для id = 3 333 333 333 - транзакция уходит - и в таблице транзакций видим не 3 333 333 333, а присваивается № 2 147 483 647. Для id = 4 444 444 444 - ошибка - Неправильно указан идентификатор транзакции: "4444444444". По этому и возник вопрос. Ладно формат ххх ххх ххх - будет достаточно. Всем спасибо.
Из описания QLUA.chm: TRANS_ID -- Уникальный идентификационный номер заявки, значение от «1» до «2 147 483 647» Реальное максимально допустимое значение на сегодня?
Дмитрий написал: Не знаю, может что делаю не правильно, но код выдает ошибку
Код
function Round(num, n) -- Функция округляет до указанного количества знаков
local n = (n or 0)
return tonumber(string_format("%."..n.."f", num))
end
Эту функцию еще добавить надо. В принципе то можно без нее. Но тогда вот так
Код
Status = tonumber(getParamEx(CLASS_CODE, SEC_CODE , "status").param_value)
но опять результат будет = 1.0 например (8.5 квик). А функция Round - .0 уберет, это у меня бзик - по "феншую" должно быть и все))). А так эта функция в основном то нужна сейчас для объема и цены - приходит объем 3.0, цена по РТС например 100 000.0 - не порядок.