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

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

Страницы: Пред. 1 ... 9 10 11 12 13 14 15 16 17 18 19
Динамическое количество линий индикатора
 
Добрый день.

Т.к. в индикаторе необходимо при инициализации указывать количество возвращаемых линий, то написана такая конструкция в функции init:
Код
for i = 1, lines do
        Settings.line[i] = {}
        Settings.line[i] = {Color = RGB(185, 185, 185), Type = TYPE_LINE, Width = 2}
    end
Алгоритм вводит линии по мере наполнения массива линий. Сначала их может быть 20, потом уже 100 и т.д. Для оптимизации линии выводятся только с не пустым значением.

Все бы хорошо, но заметил такую особенность (версия 7.19), если не вывести хотя бы один раз все линиий с не пустым значением, то потом они не отображаются на графике, хотя функция GetValue возвращает значение. Я долго не мог понять почему у меня линии не показываются с течением времени, а если заново инициализировать индикатор (через параметры графика), то все на месте.

Пришлось сделать такой странный костыль:
Код
if index == 1 then
    tmpOutlines = {}
    for i=1,lines do --необходимо вывести все линии хотя бы один раз, чтобы потом они отображались без проблем                  
       tmpOutlines[i] = O(Size())
    end
    return unpack(tmpOutlines)
end
if index == 2 then
    for i=1,lines do                  
        SetValue(1,i,nil)
    end
    return nil
end
Индекс бара
 
Цитата
Виктория написал:
Перезвоните мне пожалуйста     8(904)628-97-40 Виктория
Добрый день.

Не очень понятно кому адресовано данное сообщение.
Индекс бара
 
Цитата
s_mike@rambler.ru написал:
Можно написать простейший индикатор:

function OnCalculate(indx)
return indx
end

наводите мышку на этот индикатор в нужной свете и получаете ее номер.
Это уже написано. Иначе никак. Поэтому и просьба. Доработки здесь на пару строк, вопрос в согласовниия этой доработки.
Индекс бара
 
Добрый день.

Есть пожелание по вводу индекса бара (свечи) в контекстной подсказке при наведении на бар.
Сейчас выводится только дата, время и торговые параметры бара, но при отладе скриптов, да и просто для удобства задания диапазона,
хотелось бы видеть индекс без костылей в виде доп. индикаторов.
Высота метки в шагах цены
 
Точнее, если в контекстном меню графика выбрать подменю удалить, то активна команда удалить метки. Но они не виды.
Метки выводятся текстовые, с такими параметрами:
         
Код
FONT_FACE_NAME = "Arial",
            FONT_HEIGHT = 4,
            R = 64,
            G = 200,
            B = 64,
            TRANSPARENT_BACKGROUND = 1,
            ALIGNMENT = "RIGHT",
            YVALUE = 0,
            DATE = (tt.year*10000+tt.month*100+tt.day),
            TIME = ((tt.hour)*10000+(tt.min-2)*100)
Высота метки в шагах цены
 
А еще вопрос - у меня почему-то метки, установленные из кода lua, исчезают при перезапуске Квика.
Мне казалось, что они должны сохраняться. Это же метка.
Обновление пользовательской таблицы/окна
 
Цитата
Александр написал:
хотя если sleep добавить в цикл побольше - перерисовывает..
интересно, какой sleep в цикле main оптимален, чтобы таблица успевала перерисовываться..
Возможно, но тормозить основной поток скрипта, только чтобы вывод был как-то не очень.
У меня установлено 100 - все равно не хватает. А выше ставить уже слишком.

Явно есть проблема, а разработчики молчат.
Высота метки в шагах цены
 
Добрый день.

Возникла проблема. Выводятся текстовые метки друг над другом. Задется высота шрифта 10.
А как перевести эту высоту в шаг цены? Сейчас приходится подбирать дельту цены, чтобы метки не накладывались.

Собственно очень не хватает процедур пересчета абсолютных координат окна (идеально еще бы иметь событие - "изменение масштаба") в ценовую и временную шкалы. Сразу бы решились многие проблемы. Сейчас просто невозможно рассчитать линию под определенным углом, или, наоборот, рассчитать угол линии.
Обновление пользовательской таблицы/окна
 
Добрый день.

Подниму тему.

Все же есть особенность обновления данных пользовательской таблицы.

Я заметил особенность, что если обновлять данные через SetCell в main, или в фунции вызванной из main, то обновляется таблица только если произвести действия с ней. Скажем, нажать правой клавишей мышки по полю таблицы или подвигать мышкой по шапке таблицы. Иначе данные обновляются с очень большим лагом - до минуты и более. А может и зависнуть совсем - даже остается цвет подсветки цвета от Highlight.

Вот простейший код скрипта. Вывод данных выведен в коллбэк. Все работает "на лету".
Код
CLASS_CODE        = 'SPBFUT'
SEC_CODE          = 'SiU8'
INTERVAL          = INTERVAL_M1

t_id = nil
isRun = true

SeaGreen=12713921       --  RGB(193, 255, 193) нежно-зеленый
RosyBrown=12698111  --  RGB(255, 193, 193) нежно-розовый

function dsCallback()
    local last_price = tonumber(getParamEx(CLASS_CODE,SEC_CODE,"last").param_value)
    local lp = GetCell(t_id, 1, 0).value or last_price
    if lp < last_price then
        Highlight(t_id, 1, 0, SeaGreen, QTABLE_DEFAULT_COLOR,1000)
    elseif lp > last_price then
        Highlight(t_id, 1, 0, RosyBrown, QTABLE_DEFAULT_COLOR,1000)
    end   
    SetCell(t_id, 1, 0, tostring(last_price), last_price) 
end

function OnInit()
  
     local Error = ''
     DS,Error = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL)
     -- Проверка
     if DS == nil then
         message('ОШИБКА получения доступа к свечам! '..Error)
         isRun = false
         return
     end
            
     CreateTable()
 
     local last_price = tonumber(getParamEx(CLASS_CODE,SEC_CODE,"last").param_value)
     SetCell(t_id, 1, 0, tostring(last_price), last_price) 
        
     DS:SetUpdateCallback(function(...) dsCallback(...) end)
    
 end

function main()
    
    SetTableNotificationCallback(t_id, event_callback)

    while isRun do 
        sleep(10)           
    end
end

function CreateTable() -- Функция создает таблицу
    
    t_id = AllocTable()
    
    AddColumn(t_id, 0, "price", true, QTABLE_DOUBLE_TYPE, 15)

    tbl = CreateWindow(t_id) 
    SetWindowPos(t_id, 90, 120, 170, 100)
    
    InsertRow(t_id, 1)
    
end

function event_callback(t_id, msg, par1, par2)
    if (msg==QTABLE_CLOSE) then
        isRun = false
    end
end

function OnStop()
    isRun = false
    if t_id~= nil then
        DestroyTable(t_id)
    end
end
Но стоит изменить код на такой (обновление данных помещено внутрь цикла main), то все замирает, пока не "дернешь" окно.
Код
CLASS_CODE        = 'SPBFUT'
SEC_CODE          = 'SiU8'
INTERVAL          = INTERVAL_M1

t_id = nil
isRun = true

SeaGreen=12713921       --  RGB(193, 255, 193) нежно-зеленый
RosyBrown=12698111  --  RGB(255, 193, 193) нежно-розовый

function dsCallback()
   --[[
    local last_price = tonumber(getParamEx(CLASS_CODE,SEC_CODE,"last").param_value)
    local lp = GetCell(t_id, 1, 0).value or last_price
    if lp < last_price then
        Highlight(t_id, 1, 0, SeaGreen, QTABLE_DEFAULT_COLOR,1000)
    elseif lp > last_price then
        Highlight(t_id, 1, 0, RosyBrown, QTABLE_DEFAULT_COLOR,1000)
    end   
    SetCell(t_id, 1, 0, tostring(last_price), last_price) 
    ]]--
end

function OnInit()
  
     local Error = ''
     DS,Error = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL)
     -- Проверка
     if DS == nil then
         message('ОШИБКА получения доступа к свечам! '..Error)
         isRun = false
         return
     end
            
     CreateTable()
 
     local last_price = tonumber(getParamEx(CLASS_CODE,SEC_CODE,"last").param_value)
     SetCell(t_id, 1, 0, tostring(last_price), last_price) 
        
     DS:SetUpdateCallback(function(...) dsCallback(...) end)
    
 end

function main()
    
    SetTableNotificationCallback(t_id, event_callback)

    while isRun do 
        local last_price = tonumber(getParamEx(CLASS_CODE,SEC_CODE,"last").param_value)
        local lp = GetCell(t_id, 1, 0).value or last_price
        if lp < last_price then
            Highlight(t_id, 1, 0, SeaGreen, QTABLE_DEFAULT_COLOR,1000)
        elseif lp > last_price then
            Highlight(t_id, 1, 0, RosyBrown, QTABLE_DEFAULT_COLOR,1000)
        end   
        SetCell(t_id, 1, 0, tostring(last_price), last_price) 
        sleep(10)           
    end
end

function CreateTable() -- Функция создает таблицу
    
    t_id = AllocTable()
    
    AddColumn(t_id, 0, "price", true, QTABLE_DOUBLE_TYPE, 15)

    tbl = CreateWindow(t_id) 
    SetWindowPos(t_id, 90, 120, 170, 100)
    
    InsertRow(t_id, 1)
    
end

function event_callback(t_id, msg, par1, par2)
    if (msg==QTABLE_CLOSE) then
        isRun = false
    end
end

function OnStop()
    isRun = false
    if t_id~= nil then
        DestroyTable(t_id)
    end
end
Пришел OnTransReply с пустым brokerref
 
Добрый день.

Правильно ли я понимаю, что поле COMMENT при отправке заявки не сохраняется в таблице заявок. Я по крайней мере не вижу его.
Получается, что невозможно решить простую задачу поиска своих заявок без промежуточного хранилища.

Да, можно хранить отправленные номера и ID в временной таблице, но иногда происходят ситуации когда происходит перезапуск скрипта и надо перечитать заявки и отобрать нужные по параметрам. Поле BROKERREF не подходит совершенно, т.к. на фондовой секции брокер запрещает писать туда что либо отличное от кода клиента. Ка же так? Приходится сейчас городить внешнюю базу данных, чтобы понять, что эта заявка была выставлена роботом и у нее такие-то праметры.
Установка данных индикатора из скрипта
 
Цитата
Алексей Дуванов написал:
Цитата
Nikolay   написал:
Добрый день.

Получение данных индикатора из скрипта возможно. А обратно?

У меня скрипт считает даные, хранит в таблице. Я хотел бы вывести их как значения индикатора. Т.е. сам индикатор будет пустой, возвращающий nil. А вот скриптом хотелось поставить значения, по примеру функции SetValue.
попробуйте прикрутить  https://quik2dde.ru/viewtopic.php?id=61  может поможет?
Спасибо за ссылку. У меня уже была мысль самому написать key-value in memory чтобы в нее писать, а индикатор бы считывал. Этакий буфер обмена.
Но разработчикам Квика пора уже заняться поддержкой управления графическими инструментами из скриптов: Трендовые линии, объекты, управление графиками.  
Установка данных индикатора из скрипта
 
Цитата
Sergey Gorokhov написал:
Из обычного Lua скрипта нельзя ставить значения на индикаторах. Это возможно только в коде самого индикатора
Печально. Приходится городить огород - сохранять данные в файл, а считывать индикатором. При этом интерактивности уже никакой. Т.к. невозможно интерактивно, без переприменения индикатора, считать новые данные.

Напрашивается функция SetValue по индентификатору графика.
Установка данных индикатора из скрипта
 
Добрый день.

Получение данных индикатора из скрипта возможно. А обратно?

У меня скрипт считает даные, хранит в таблице. Я хотел бы вывести их как значения индикатора. Т.е. сам индикатор будет пустой, возвращающий nil. А вот скриптом хотелось поставить значения, по примеру функции SetValue.
Обращение к внешним сервисам
 
Добрый день.

Кто-нибудь пробовал обращаться к внешним сервисам типа Twitter из qlua?
Есть у меня желание добавить себе в скрипт чтение ленты по ключевым словам.
Я нашел библиотеки Lua для подключения к тому же Twitter, вопрос только - заработет ли из Квика?
Может проще написать того же бота на питоне.
Двойное OnDepoLimit, Два раза вызывается функция.
 
Добрый день.

Подниму совсем старое обсуждение.

Но вот на тестовом сервере (и на реальном) я получаю не просто один коллбэк.

Вот только что сегодня купил один лот Себрбанка и тут же продал.
Получил вот столько коллбэков.  Да лимиты разные, но они повторяются. 4 раза лимит 0, 4 раза лимит -3. Отличие в блокировке количества и средств.
Но вот во всем этом многообразии только последний будет нужен. Как это отлавливать?

02/21/18 10:45:19; M Transaction BUY 0;   --- это купил
02/21/18 10:45:19; OnTransReply 1519199113 (161) Заявка N 3616235401 зарегистрирована. Удовлетворено 1;
02/21/18 10:45:19; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:19; Счет депо NL0011100043;
02/21/18 10:45:19; Код клиента 10118;
02/21/18 10:45:19; Входящий остаток по бумагам 0;
02/21/18 10:45:19; Входящий лимит по бумагам 0;
02/21/18 10:45:19; Текущий остаток по бумагам 0;
02/21/18 10:45:19; Текущий лимит по бумагам 0;
02/21/18 10:45:19; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:19; Заблокированного на покупку количества лотов 1;
02/21/18 10:45:19; Стоимость ценных бумаг, заблокированных под покупку 2900.3;
02/21/18 10:45:19; Стоимость ценных бумаг, заблокированных под продажу 0;
02/21/18 10:45:19; Цена приобретения 0;
02/21/18 10:45:19; Тип лимита 0;
02/21/18 10:45:19; __________;
02/21/18 10:45:19; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:19; Счет депо NL0011100043;
02/21/18 10:45:19; Код клиента 10118;
02/21/18 10:45:19; Входящий остаток по бумагам 0;
02/21/18 10:45:19; Входящий лимит по бумагам 0;
02/21/18 10:45:19; Текущий остаток по бумагам 0;
02/21/18 10:45:19; Текущий лимит по бумагам 0;
02/21/18 10:45:19; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:19; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:19; Стоимость ценных бумаг, заблокированных под покупку 290.03;
02/21/18 10:45:19; Стоимость ценных бумаг, заблокированных под продажу -1e+048;
02/21/18 10:45:19; Цена приобретения 0;
02/21/18 10:45:19; Тип лимита -3;
02/21/18 10:45:19; __________;
02/21/18 10:45:20; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:20; Счет депо NL0011100043;
02/21/18 10:45:20; Код клиента 10118;
02/21/18 10:45:20; Входящий остаток по бумагам 0;
02/21/18 10:45:20; Входящий лимит по бумагам 0;
02/21/18 10:45:20; Текущий остаток по бумагам 0;
02/21/18 10:45:20; Текущий лимит по бумагам 0;
02/21/18 10:45:20; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:20; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под покупку 0;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под продажу 0;
02/21/18 10:45:20; Цена приобретения 0;
02/21/18 10:45:20; Тип лимита 0;
02/21/18 10:45:20; __________;
02/21/18 10:45:20; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:20; Счет депо NL0011100043;
02/21/18 10:45:20; Код клиента 10118;
02/21/18 10:45:20; Входящий остаток по бумагам 0;
02/21/18 10:45:20; Входящий лимит по бумагам 0;
02/21/18 10:45:20; Текущий остаток по бумагам 0;
02/21/18 10:45:20; Текущий лимит по бумагам 0;
02/21/18 10:45:20; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:20; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под покупку 1e+048;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под продажу -1e+048;
02/21/18 10:45:20; Цена приобретения 0;
02/21/18 10:45:20; Тип лимита -3;
02/21/18 10:45:20; __________;
02/21/18 10:45:20; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:20; Счет депо NL0011100043;
02/21/18 10:45:20; Код клиента 10118;
02/21/18 10:45:20; Входящий остаток по бумагам 0;
02/21/18 10:45:20; Входящий лимит по бумагам 0;
02/21/18 10:45:20; Текущий остаток по бумагам 0;
02/21/18 10:45:20; Текущий лимит по бумагам 0;
02/21/18 10:45:20; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:20; Заблокированного на покупку количества лотов 1;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под покупку 2900.3;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под продажу 0;
02/21/18 10:45:20; Цена приобретения 0;
02/21/18 10:45:20; Тип лимита 0;
02/21/18 10:45:20; __________;
02/21/18 10:45:20; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:20; Счет депо NL0011100043;
02/21/18 10:45:20; Код клиента 10118;
02/21/18 10:45:20; Входящий остаток по бумагам 0;
02/21/18 10:45:20; Входящий лимит по бумагам 0;
02/21/18 10:45:20; Текущий остаток по бумагам 0;
02/21/18 10:45:20; Текущий лимит по бумагам 0;
02/21/18 10:45:20; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:20; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под покупку 290.03;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под продажу -1e+048;
02/21/18 10:45:20; Цена приобретения 0;
02/21/18 10:45:20; Тип лимита -3;
02/21/18 10:45:20; __________;
02/21/18 10:45:20; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:20; Счет депо NL0011100043;
02/21/18 10:45:20; Код клиента 10118;
02/21/18 10:45:20; Входящий остаток по бумагам 0;
02/21/18 10:45:20; Входящий лимит по бумагам 0;
02/21/18 10:45:20; Текущий остаток по бумагам 1;
02/21/18 10:45:20; Текущий лимит по бумагам 0;
02/21/18 10:45:20; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:20; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под покупку 0;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под продажу 0;
02/21/18 10:45:20; Цена приобретения 2.6608;
02/21/18 10:45:20; Тип лимита 0;
02/21/18 10:45:20; __________;
02/21/18 10:45:20; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:20; Счет депо NL0011100043;
02/21/18 10:45:20; Код клиента 10118;
02/21/18 10:45:20; Входящий остаток по бумагам 0;
02/21/18 10:45:20; Входящий лимит по бумагам 0;
02/21/18 10:45:20; Текущий остаток по бумагам 0;
02/21/18 10:45:20; Текущий лимит по бумагам 0;
02/21/18 10:45:20; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:20; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под покупку 1e+048;
02/21/18 10:45:20; Стоимость ценных бумаг, заблокированных под продажу -1e+048;
02/21/18 10:45:20; Цена приобретения 0;
02/21/18 10:45:20; Тип лимита -3;
02/21/18 10:45:20; __________;

02/21/18 10:45:30; M Transaction SELL 0; --- это продал
02/21/18 10:45:30; OnTransReply 1519199114 (161) Заявка N 3616235602 зарегистрирована. Удовлетворено 1;
02/21/18 10:45:30; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:30; Счет депо NL0011100043;
02/21/18 10:45:30; Код клиента 10118;
02/21/18 10:45:30; Входящий остаток по бумагам 0;
02/21/18 10:45:30; Входящий лимит по бумагам 0;
02/21/18 10:45:30; Текущий остаток по бумагам 1;
02/21/18 10:45:30; Текущий лимит по бумагам 0;
02/21/18 10:45:30; Заблокировано на продажу количества лотов 1;
02/21/18 10:45:30; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:30; Стоимость ценных бумаг, заблокированных под покупку 0;
02/21/18 10:45:30; Стоимость ценных бумаг, заблокированных под продажу 2659;
02/21/18 10:45:30; Цена приобретения 2.6608;
02/21/18 10:45:30; Тип лимита 0;
02/21/18 10:45:30; __________;
02/21/18 10:45:30; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:30; Счет депо NL0011100043;
02/21/18 10:45:30; Код клиента 10118;
02/21/18 10:45:30; Входящий остаток по бумагам 0;
02/21/18 10:45:30; Входящий лимит по бумагам 0;
02/21/18 10:45:30; Текущий остаток по бумагам 0;
02/21/18 10:45:30; Текущий лимит по бумагам 0;
02/21/18 10:45:30; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:30; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:30; Стоимость ценных бумаг, заблокированных под покупку 1e+048;
02/21/18 10:45:30; Стоимость ценных бумаг, заблокированных под продажу 265.9;
02/21/18 10:45:30; Цена приобретения 0;
02/21/18 10:45:30; Тип лимита -3;
02/21/18 10:45:30; __________;
02/21/18 10:45:31; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:31; Счет депо NL0011100043;
02/21/18 10:45:31; Код клиента 10118;
02/21/18 10:45:31; Входящий остаток по бумагам 0;
02/21/18 10:45:31; Входящий лимит по бумагам 0;
02/21/18 10:45:31; Текущий остаток по бумагам 1;
02/21/18 10:45:31; Текущий лимит по бумагам 0;
02/21/18 10:45:31; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:31; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под покупку 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под продажу 0;
02/21/18 10:45:31; Цена приобретения 2.6608;
02/21/18 10:45:31; Тип лимита 0;
02/21/18 10:45:31; __________;
02/21/18 10:45:31; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:31; Счет депо NL0011100043;
02/21/18 10:45:31; Код клиента 10118;
02/21/18 10:45:31; Входящий остаток по бумагам 0;
02/21/18 10:45:31; Входящий лимит по бумагам 0;
02/21/18 10:45:31; Текущий остаток по бумагам 0;
02/21/18 10:45:31; Текущий лимит по бумагам 0;
02/21/18 10:45:31; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:31; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под покупку 1e+048;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под продажу -1e+048;
02/21/18 10:45:31; Цена приобретения 0;
02/21/18 10:45:31; Тип лимита -3;
02/21/18 10:45:31; __________;
02/21/18 10:45:31; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:31; Счет депо NL0011100043;
02/21/18 10:45:31; Код клиента 10118;
02/21/18 10:45:31; Входящий остаток по бумагам 0;
02/21/18 10:45:31; Входящий лимит по бумагам 0;
02/21/18 10:45:31; Текущий остаток по бумагам 1;
02/21/18 10:45:31; Текущий лимит по бумагам 0;
02/21/18 10:45:31; Заблокировано на продажу количества лотов 1;
02/21/18 10:45:31; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под покупку 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под продажу 2659;
02/21/18 10:45:31; Цена приобретения 2.6608;
02/21/18 10:45:31; Тип лимита 0;
02/21/18 10:45:31; __________;
02/21/18 10:45:31; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:31; Счет депо NL0011100043;
02/21/18 10:45:31; Код клиента 10118;
02/21/18 10:45:31; Входящий остаток по бумагам 0;
02/21/18 10:45:31; Входящий лимит по бумагам 0;
02/21/18 10:45:31; Текущий остаток по бумагам 0;
02/21/18 10:45:31; Текущий лимит по бумагам 0;
02/21/18 10:45:31; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:31; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под покупку 1e+048;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под продажу 265.9;
02/21/18 10:45:31; Цена приобретения 0;
02/21/18 10:45:31; Тип лимита -3;
02/21/18 10:45:31; __________;
02/21/18 10:45:31; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:31; Счет депо NL0011100043;
02/21/18 10:45:31; Код клиента 10118;
02/21/18 10:45:31; Входящий остаток по бумагам 0;
02/21/18 10:45:31; Входящий лимит по бумагам 0;
02/21/18 10:45:31; Текущий остаток по бумагам 0;
02/21/18 10:45:31; Текущий лимит по бумагам 0;
02/21/18 10:45:31; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:31; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под покупку 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под продажу 0;
02/21/18 10:45:31; Цена приобретения 0;
02/21/18 10:45:31; Тип лимита 0;
02/21/18 10:45:31; __________;
02/21/18 10:45:31; Изменения по счету: Код бумаги SBER;
02/21/18 10:45:31; Счет депо NL0011100043;
02/21/18 10:45:31; Код клиента 10118;
02/21/18 10:45:31; Входящий остаток по бумагам 0;
02/21/18 10:45:31; Входящий лимит по бумагам 0;
02/21/18 10:45:31; Текущий остаток по бумагам 0;
02/21/18 10:45:31; Текущий лимит по бумагам 0;
02/21/18 10:45:31; Заблокировано на продажу количества лотов 0;
02/21/18 10:45:31; Заблокированного на покупку количества лотов 0;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под покупку 1e+048;
02/21/18 10:45:31; Стоимость ценных бумаг, заблокированных под продажу -1e+048;
02/21/18 10:45:31; Цена приобретения 0;
02/21/18 10:45:31; Тип лимита -3;
02/21/18 10:45:31; __________;
Что приходит в OnTransReply ?
 
Проверил еще раз. На фондовой секции приходит OnTransReply. Вопрос снимается. Это уже вопрос организации алгоритма как обрабатывать событие.
Цитата
Sergey Gorokhov написал:
Больше интересует вопрос что именно "работает"? Т.е. заявка по факту ставится или нет?
В качестве примера, сообщите точное время (по МСК) когда была попытка выставить такую заявку.
Что приходит в OnTransReply ?
 
Сам же себе и отвечу.

Если пишем систему в реальном времени, то функция main должна просто что-то инициализировать и все.
Далее все должно выполняться в коллбэках. Если их нет, то и нечего анализировать получается.
Пришла свечка - отвечаем на событие, решили, что надо сделать транзакцию, отправили ее. Ждем ответа о ее завершении.

А вот в функции main, видимо, надо как раз анализировать ситуации когда ответа нет. Скажем, нет ответа на транзакцию, значит перебери ордера, чтобы понять, может она прошла. Видимо, так. Я пока не все еще продумал, т.к. не очень знаком с организацие вызовов в qlua, но, наверно, есть ситуации неуловимые коллбэками.

А вот если система не реального времени, а по расписанию, то, как я понимаю, все надо реализовывать в бесконечном цикле main.
Скажем, цикл, перебирающий список бумаг каждые 15 минут и рассчитывающий что-то. Правда в этом месте возникает вопрос, а нельзя ли при инициализации скрипта назначить один и тот же коллбэк на получение данных разных инструментов, разных интервалов? Тогда и здесь можно было бы все в этом одном коллбэке делать не утилизируя функцию main. Судя по описанию нельзя. Т.е. я вынужден каждые 15 минут заново перибирать список инструментов, получать данные, считать. А если бы в коллбэк приходил не только индекс, но признак чей это индекс, то можно было бы сохранив ранее DS каждого инструмента, отреагировать именно на него.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Цитата
Николай Камынин написал:
можно попробовать так.
=============================
в main ставите однократную подписку на данные:
if DS==nil then    DS = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL) end
==============================
там, где используете эти данные ставите условие:
if DS and DS:Size() ~= 0 then
-- обработка данных
end
------------------------
При этом нет надобности в каких-либо задержках, все будет работать без тормозов.

У меня при инициализации происходит проверка на количество. Если пусто, то идет заказ данных.

А у уже в main идет обработка данных. Там я тоже поставил на проверку, но уже без задержек, т.к. данные не приходят, сразу. Возможно перезаказывать бессмысленно, а надо просто ждать.
Что приходит в OnTransReply ?
 
Цитата
Полагаю, что у Вас  неправильное представление о работе с колбеками.
При использовании  колбеков нет надобности ждать.
Колбеки для этого и создаются.
Т е все события у нас асинхронные, поэтому их не надо ждать, а надо на них реагировать.
Если событий нет, то система бездельничает и ничего не ждет, так как нам заранее неизвесно когда и какое событие будет.
Подумайте над этим и смените логику скриптов.
--------------------------
В качестве совета.
Не надо делать кучу скриптов, пишите свои торговые стратегии в одном, так как все колбеки вызываются последовательно и им передается одно и тоже, то нет смысла множить копии колбеков в разных скриптах.
Добрый день. Списибо за ответ.

Как работет асинхронный коллбэк в других языках мне знакомо.
Я посмотрел примеры написания скриптов. Там я увидел такого рода ожидания. Что меня смутило, но они сплошь и рядом.

Да, конечно, предсказать когда придет ответ невозможно. Тем более, что сервер может быть загружен.

У меня в данном случае возникает вопрос по логике работы функции main.
Скажем я выставил заявку, далее я должен отреагировать на ее выполнение. Т.к. я ограничен потоком функции main, там у меня бесконечный цикл.
Если я его прерву, то прервется скрипт. Получается мне надо именно в функии main делать отдельную проверку прихода колбэка или некой переменной записанной в коллбэк. Не важно где написана обработка коллбэка. Именно из-за этого бесконечного потока логика скрипта становится несколько извращенной.

Если я правильно понимаю, более менее правильный вариант - это в функции main делать проверку, если она не пришла, направлять код на очередныю итерацию, пока не придет ответ. Правда придется все же ограничивать время такого ожидания, т.к. можно проверять бесконечно.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Если я уберу if, то у меня будет задержка на каждой бумге. У меня код перебирает бумаги в цикле.
Также и ожидание до 15 секунд несколько неприемлимо, т.к. все зависнет.

Хотелось бы при инициализации скрипта проверить на наличие данных, поставить заказ оных, если нет и уже идти по данным.
Что приходит в OnTransReply ?
 
Цитата
Sergey Gorokhov написал:
Nikolay  ,

Проверьте в таблице транзакций терминала QUIK нет ли ошибки при отправке транзакций.
Дело в том что рыночные заявки на покупку могут быть запрещены.
Если так то в таблице транзакций Вы увидите сообщение об этом.
Сообщите Ваш UID чтобы мы могли проверить права.
Добрый день.
ID U0120866

Не уверен, что есть ошибки, т.к. если убрать обработку ожидания  while trans_Status == nil do sleep(1) end, то все работает.
Получается, что если ждать когда придет OnTransReply - зависает скрипт, т.к. ответа нет.
Убираю ожидание все проходит без ошибок.

Как я и говорил выше, на срочной сеции этот же код работает нормально.
Что приходит в OnTransReply ?
 
Добрый день.

Подниму старую тему.

Есть тестовый сервере (подключал тестовый период через заявку на доступ к учебному серверу QUIK компании ARQA Technologies сроком на один месяц). Т.е. это не брокер, как я понимаю.

Проблема в том, что на фондовой секции, заявки типа BUY по рынку (price = 0) не вызывают OnTransReply. Те же заявки на SELLнормально возвращают колбек.

Еще проблема в очень долгом появлении отправленных заявок в таблице заявок и сделок.
Отлаживать алгоритм становится невозможным.

На срочной секции таких проблем не наблюдается.
CreateDataSource, не грузятся данные при формир. через CreateDataSource
 
Добрый день.

Подниму тему. Тоже столкнулся с пустым набром данных, если не открыт график.
Вызов SetEmptyCallback() и задержка не помогают.

Правда иногда запущу скрипт - данные появились. В другой раз нет. Закономерности нет.

Пробовал увеличить время ожидания sleep до 1000 - все одно не помогает.

Вызов данных типовой:
           
Код
DS = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL)
if DS:Size() == 0 then 
  DS:SetEmptyCallback()
  sleep(200)
end
Отметки на графике QUIK средствами QLUA
 
Цитата
Sergey Gorokhov написал:
Nikolay  ,

Падения не должно происходить.
приведите полный код скрипта индикатора и сообщите версию терминала QUIK
Версия 7.6.1.1 (Сбербанк выше не дает).

Собственно весь код работы с метками такой и есть
Код
function OnCalculate(index)

   if index == 1 and Settings.ChartId ~= '' then
      DelAllLabels(Settings.ChartId)
      AddedLabels = {}
   end
    
   if index == 1 then
      DSInfo = getDataSourceInfo()        
      min_price_step = getParamEx(DSInfo.class_code, DSInfo.sec_code, "SEC_PRICE_STEP").param_value
   end
   
   return myFunc(index, Settings, 37)
end
Внутри функции расчета данных выводится (обновляется) метка
Код
if AddedLabels[1] ~= nil then
   SetLabelParams(Settings.ChartId, AddedLabels[1], label)
else
   local LabelID = AddLabel(Settings.ChartId, label)
               
   if LabelID ~=nil and LabelID ~= -1 then
      AddedLabels[1] = LabelID
   end   
end
Код
if AddedLabels[2] ~= nil then
   SetLabelParams(Settings.ChartId, AddedLabels[2], label)
else
   local LabelID = AddLabel(Settings.ChartId, label)
               
   if LabelID ~=nil and LabelID ~= -1 then
      AddedLabels[2] = LabelID
   end   
end

Падение происходит не каждый раз. Иногда на третий раз применения параметров. Иногда на первый.
Отметки на графике QUIK средствами QLUA
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Вы можете выводить текст через механизм меток.
По другому возможности нет.

Хорошо. Вывел метки индикатором.

Но у меня падает Квик при изменении настроек индикатора. При смене инструмента в привязанном окне падения не происходит, а при нажатии ОК в окне редактрирования, да.


Возникает вопрос - какой метод удаления меток правильный.


У меня падение происходит после добавления такого кода в OnCalculate:

Код
if index == 1 and Settings.ChartId ~= '' then
      DelAllLabels(Settings.ChartId)
      AddedLabels = {}
   end
Также добавлена процедура:
Код
function OnDestroy()
   if Settings.ChartId ~= '' then
      DelAllLabels(Settings.ChartId)
      AddedLabels = {}
   end
end
Отметки на графике QUIK средствами QLUA
 
Подниму тему.

А такое банальное действо как вывод текста в рамках индикатора недоступно?
Простой пример - текущий ATR. Я не хочу выводить линию или что-то еще. Нужно вывести просто текст.

Добавление меткаи есть в скрипте, а в индикаторе? Так много информации надо выводить в рамках индикаора, где нет проблемы идентификации окна.
Я в WLab писал индиктор зиг-заг с выводом процентов каждого движения и поиска моделей. Пости все было текстом в виде меток над свечками. Линий минимум.

Неужели нет этого?  
Возвращаемые данные для отрисовки индикатора
 
Добрый день.

Пишется индикатор с динамическим количеством линий.
Можно ли вместо данных типа ruturn out1, out2, out3 вернуть массив {}. Соответственно, данные линий - это индексные данные массива.

Уж больно некрасиво приходится делать большое количество переменных с запасом.

Есть еще вариант динамического описания кода. Есть ли в интерпретаторе qlua execute("Текст выполняемого кода")?
Открытие заявки
 
Если уж пошла речь про заявки, то, как мне кажется, самая важная функция отсутствует - ввод стопа одновременно с самой заявкой.
В окне ввода заявки просто добавить раздел стопа. При торговле фьючерсами и другими высокорисковыми инструментами можно попасть на ситуации когда просто не успевашеь ввести стоп. Карман транзакций - это, конечно, хорошо, но почему же не сделать удобно. Как я понимаю, эту возможность просят столько людей и столько времени, что становится несколько неудобно за разработчиков. Я понимаю что монопольное положение на рынке позволяет, но все же...
Вилы Эндрюса, уровни Фибоначчи, веер Ганна.
 
Добрый день.

Очень бы хотелось иметь достаточной простой интрумент как вилы Эндрюса.
Также очень хочется существующие уровни Фибоначчи строить не только горизонтально, но и под любым углом. Тем самым получая наклонные уровни.
А уж для полноты картины - веер Ганна был бы очень кстати.

Спасибо.
INDICATORS.ZIP
 
Цитата
Николай Камынин написал:
Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки.
При отсутствии свечки брать сохраненный индекс.
Возможно, но не всегда надо именно прошлую свечку. Часто надо -3, -2. Так что просто запоминать будет та еще конструкция. А эта функция универсальна, получив индекс бери любое значение свечи.

Хотелось бы иметь "железную" функцию получения ближайшей существующей свечи к идексу вниз и вверх.
INDICATORS.ZIP
 
Ме помогли данные конструкции.

Нет свечки, тогда значению массива текущей даем предудыщее значение.
Код
if not CandleExist(index) then
CC[index] = CC[index-1] 
return nil
end

Если надо получить значение пршлой свечки, то сначала находим ближайшую существующую прошлую, через эту функцию
Код
function FindExistCandle(I)
   local out = I
   
   while not CandleExist(out) do
   out = out -1
   end   
   
   return out
 
end
Код
local previous = index-1
      
if not CandleExist(previous) then
   previous = FindExistCandle(previous)
end
      
if C(index) > C(previous) then
Страницы: Пред. 1 ... 9 10 11 12 13 14 15 16 17 18 19
Наверх