Игорь М (Все сообщения пользователя)

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

Страницы: 1 2 3 След.
Бесконечный цикл функции с заданным интервалом времени
 
Цитата
shtur2005 написал:
Добрый день, уважаемые языковеды! Прошу не кидать в меня тапками, я только начал изучать язык.
Помогите пожалуйста с созданием бесконечного цикла функции. Двое суток читал и пробовал, ничего не вышло.
Я вам пример набросал: скрипт  в цикле выводит сообщения со значениями даты/времени и high/low последних 5 свечей (CNT_CANDLES = 5). Работает.
Код
local CHART_TAG_PRICE = "SRH15MIN"                         -- идентификатор графика цены
local CNT_CANDLES = 5                                      -- значение количества свечей для обработки

local is_run = true
local processed                                            -- количество обработанных свечей графика

local function timeCandle (hour, min)                      -- функция формирования времени свечи (number)
   return 10000 * hour + 100 * min
end

local function dateCandle (year, month, day)               -- функция формирования даты свечи (number)
   return 10000 * year + 100 * month + day
end

local function singleCandleProcessing (t)                  -- функция обработки одиночной свечи
   local time = timeCandle(t.datetime.hour, t.datetime.min)                        -- вызов функции формирования времени свечи
   local date = dateCandle(t.datetime.year, t.datetime.month, t.datetime.day)      -- вызов функции формирования даты свечи
   message(tostring(date) .. "  " .. tostring(time) .. ". High: " .. tostring(t.high) .. ", low: " .. tostring(t.low))
end

local function candlesProcessing ()                        -- функция обработки последней свечи/свечей
   local number = getNumCandles(CHART_TAG_PRICE)               -- количество свечей графика
   if number > processed then
       local t = getCandlesByIndex(CHART_TAG_PRICE, 0, processed, number - processed)          -- получение таблицы последней свечи/свечей
       if t then
           for i = 0, number - processed - 1 do
               if t[i] then
                   singleCandleProcessing(t[i])                        -- вызов функции обработки одиночной свечи
               end
           end
           processed = number
       end
   end
end

function main ()
   processed = getNumCandles(CHART_TAG_PRICE) - CNT_CANDLES
   while is_run do
       candlesProcessing ()                                        -- вызов функции обработки последней свечи/свечей
       sleep (30000)
   end
end

function OnStop ()
   is_run = false
   return 2000
end
Как получить значение Лимита открытых позиций по фьючерсам или как получить элемент из таблицы?
 
Цитата
Денис написал:
Код
  Мне приходится решать эту задачку так:
Table_ getFuturesLimit   =  {}  -- создается переменная таблица для получения значения, возвращаемого функцией getFuturesLimit 

Table_ getFuturesLimit   =   getFuturesLimit  (  "SPBFUT"  ,  "SPBFUT *  *  *  *  * " ,   0  ,  "SUR" )  -- результат работы функции getFuturesLimit помещается в созданную таблицу  


 if  Table_ getFuturesLimit   and  next(Table_ getFuturesLimit )  then   -- если результат работы функции не nil и не пустая таблица, то можно обратиться к соответствующему полю. 

    FutLimit  =   Table_ getFuturesLimit .cbplimit  -- получается значение интересующего поля 

 end   -- end if   
Прокомментирую: Первая строка не нужна, Table_getFuturesLimit лучше залокалить, а next(Table_getFuturesLimit) заменить на проверку Table_getFuturesLimit.cbplimit. Если таблица пустая, то Table_getFuturesLimit.cbplimit будет nil без ошибки и условие не выполнится, но может быть так: Table_getFuturesLimit.cbplimit = nil, а next(Table_getFuturesLimit) будет true (другие поля существуют) - условие выполнится и вы присвоите переменной FutLimit этот nil.
Как считать данные из таблицы текущих торгов?
 
Цитата
Вася написал:
Владимир, потому что я, начинающий программист, выполняю заказ клиента. Таково его желание. Ему нужно выводить в эксель те данные, которые он сам выберет в ТТТ. И он, естественно, не сможет залезть в код и добавить новую колонку когда решит это сделать. Он сможет только добавить новую колонку в ТТТ и она должна быть выведена. Сложность в том, что выводить данные нужно не только из ТТТ, а еще из одной самодельной таблицы. Вот я и хотел объединить их сперва как-то, а потом сборную таблицу вывести.
Пусть ваш клиент работает с вашей пользовательской таблицей напрямую, а не с ТТТ. Сделайте в этой таблице возможность добавлять новые колонки, а все данные будете получать через getParamEx.
Агрегировать объемы по ценам
 
Цитата
Nikolay написал:
Да, но округление не нужно в данной операции.
Да это понятно, я так написал для информации, без применения к описанной задаче.
Агрегировать объемы по ценам
 
Еще решил написать, мало ли кто не в курсе, что работает целочисленное деление "//": "Целочисленное деление ('//') всегда преобразует свои операнды в integer и дает в результате integer. Преобразование происходит посредством округления операндов в меньшую сторону, как это делает функция math.floor".
Агрегировать объемы по ценам
 
math.tointeger (x) - если значение x можно преобразовать в целое, возвращает целое. Иначе, возвращает nil.
Работа с метками, ошибки при закрытии/открытии программы Quik., Свои уровни на графике из файла.
 
Кто-то из поддержки вроде писал, что удалить метки не получится, так как графика уже нет, то есть при завершении работы терминала вы их не удалите, поэтому удаляйте старые метки при запуске.
Объясните, пожалуйста, один момент в коде.
 
Цитата
Владимир написал:
Да, она пока что "охватывает далеко не все случаи" - новая версия должна охватить всё недостающее.
Не охватит. Вы забываете, что народ занимается не только реализацией роботов, но и разработкой разных полуавтоматов с риск- мани-менеджментом, решений для проп-трейдинга, поддержкой групп клиентов и т.д. Вы же не собираетесь все это в свой скрипт запихивать.
Стоп лосс с задержкой
 
Цитата
NoneB написал:
Цитата
Игорь М написал:
Тут я вас не понял
Первая производная графика цены = скорость изменения цены, а ее единицей измерения могут  быть   USD/сек, Руб/сек или др.
Например, средние скользящие линии являются первыми производными  Производная (математическое понятие)
Я не про производные не понял, я не понял к чему они у вас там в ответе на мой посыл про порочность самой идеи использования описанного стопа с задержкой без постоянного контроля на конкретном примере. Там никакие функции уже не помогут, хоть лапласиан считайте.
Объясните, пожалуйста, один момент в коде.
 
Цитата
Владимир написал:
Игорь М, То и имею в виду: статус заявки практически однозначно определяется информацией от сделки. Если я заказал 10 лотов, и у меня сделка на 10, то заявка исполнена. А если там, допустим, 8, то она активна, и будет исполнена, если уже в следующей сделке придут остальные 2 или две сделки по единичке. Или вообще больше ничего не придёт, заявка останется частично исполненной.
Я так и понял, но решил уточнить. Вы просто сквозь призму своей задачи смотрите, которая охватывает далеко не все случаи. Не всегда известен первоначальный объем выставленной заявки, её же и руками могут выставить, поэтому x-8=? Для этого случая я и писал.
Стоп лосс с задержкой
 
Цитата
NoneB написал: "бенефициаром" будет техподдержка брокера с ошпаренными вопросами о работе функции
Отвечать на вопросы - это их работа, они за это деньги получают. Какие  вы там "ошпаренные вопросы" собираетесь задавать - не важно, они  попытаются вам всё объяснить. Я повторюсь: кому надо, тот пользуется,  кому не надо - не пользуется.
Цитата
Игорь М написал: А если она на 20% уедет резко и не вернется, то что?
NoneB написал: то  добавлять в заявку другие функции, пока пользователи не запутаются в  них для "упрощения" работы можно добавить ограничения первой  и второй  производных (скорости и ускорения) цены  
Тут я вас не понял, я про бессмысленность размещения подобной стоп-заявки на сервере писал.
Объясните, пожалуйста, один момент в коде.
 
Цитата
Владимир написал: Никак. А зачем они нужны?
Для определения статуса заявки. Эти флаги для этого и сделаны.
Цитата
Владимир написал: Если число лотов обнулилось
Что вы имеете в виду?
Ошибки в документации (руководстве пользователя)
 
Не нашел поиском тему про ошибки, опечатки, неточности и недочеты в документации.
4.4 Сделки. Описание параметров Таблицы сделок: qty NUMBER Количество инструментов в лотах

Стоп лосс с задержкой
 
Цитата
NoneB написал:
Статья видимо частично "копипаст не глядя", но продуктивнее обсуждать по-существу  "пользу"  новой функции,
А почему слово польза в кавычках? Пусть будет такая возможность: кому надо, тот пользуется, кому не надо - не пользуется. Понятно, что для большинства она не нужна, но  расширение функционала никому не вредит.

пс. О, посмотрел, что там люди понаписали: "отсчитывает 30 секунд", "цена может пойти на 3-5-7% вниз, при этом после такого пролива через 20-40 секунд цена возвращается". А если она на 20% уедет резко и не вернется, то что? Пусть график от 03.03.2014 глянут, например. Они такую стоп-заявку собираются поставить и гулять пойти? Хм... А зачем тогда её, вообще, ставить? Проще уведомление в смартфон получить и самому руками закрывать, если поедет в одну сторону без отката. А если комп включен, то напишите/закажите скрипт на Lua и он вам, что угодно с какой угодно задержкой и без неё выставлять будет.
Стоп лосс с задержкой
 
Цитата
NoneB написал:
Казалось бы, замышляется полезная функция.
Но выбранное в ней время  и все параметры заявки  будут известны маркетмейкеру и для малых задержек времени  он так же легко собьет стоп-лосс
https://vk.com/@trader.logvinenko-rol-i-vozmozhnosti-marketmeikera
Откуда вот это всё? Из этих нетленок? Первое предложение по ссылке: "Маркетмейкер является авторизованным участником рынка, которому  разрешено выставлять двухсторонние заявки, как на покупку, так и на  продажу (в то время как все остальные участники рынка могут открываться  только в одну сторону - однонаправленно)". Чё?
Объясните, пожалуйста, один момент в коде.
 
Цитата
Владимир написал:
Игорь М, Нет, я тоже именно из OnTrade получаю информацию и о сделке, и о заявке, и о транзакции, никаких дополнительных телодвижений для этого не требуется.
Как вы получаете флаги для заявки из OnTrade?
Объясните, пожалуйста, один момент в коде.
 
Цитата
Айдар написал:
Из функции OnTrade() я хочу узнать, активна ли заявка, для этого использую эту пользовательскую функцию:
if bit_set(TABLE_trade.flags, 0)==true then
--то есть, если в бите 0 флаг установлен, значит заявка активна
end
Мне кажется, что вы путаете сделку и заявку. Из OnTrade(trade) вы получаете информацию о сделке. Если вы хотите узнать что-то о заявке, которая эту сделку породила, то в общем как-то так можно:  
Код
 local order = getOrderByNumber (CLASS_CODE, trade.order_num)    -- получение таблицы данных из строки таблицы заявок с указанным номером заявки из таблицы сделок
   if order then
       if order.flags & 1 == 1 then                                    -- соответствующая заявка активна (исполнена частично)

         elseif order.flags & 2 == 0 then                              -- соответствующая заявка исполнена полностью

         else                                                          -- соответствующая заявка исполнена частично и снята

       end
   end
Трейлинг- стоп. Как протестировать на quik?
 
Цитата
Egor Denisov написал: * пример
Так какой тут пример, реализаций же много можно придумать. Если вам просто для короткого теста, сделайте так:
Код
local T_PRICE = {150210, 150230, 150240, 150230, 150250, 150280, 150350, 150570, 150850, 150980, 150320, 150580, 151020, 151640, 150680, 150450, 150270, 150260, 150280}
local cnt = -10

local function getMyLastPrice ()                      --  функция получения цены последней сделки
   cnt = cnt + 1
   if cnt < 1 or cnt > #T_PRICE then
       return getParamEx (CLASS_CODE, SEC_CODE, "LAST").param_value       -- получение таблицы из ТТТ (цена последней сделки)
     else
       return T_PRICE[cnt]
   end
end
Таблица T_PRICE - это ваш рукописный вынос вверх примерно на 1% . Функция getMyLastPrice возвращает первые 10 циклов основной программы реальную цену, затем цену этого выноса, потом снова реальную цену (цену для sendTransaction преобразовать не забудьте). Забивайте в таблицу T_PRICE любые значения, которые нужны для теста. В вашей основной программе циклически идет определение последней цены, согласно которой и двигается стоп-заявка, например:
Код
   while is_run do
       if isConnected () == 1  then
           last_price = getMyLastPrice ()
           -- здесь будет реализация вашего алгоритма манипулирования стоп-заявкой с использованием смоделированной цены (last_price)
       end
       sleep (200)
   end
Трейлинг- стоп. Как протестировать на quik?
 
Цитата
Egor Denisov написал: а дальше подменить реальные данные - искуственными?
Можно и без файла, а просто модуль дополнительный написать или функцию в основной программе.
Трейлинг- стоп. Как протестировать на quik?
 
Цитата
Egor Denisov написал:
Цитата
Игорь М написал:
 
Цитата
Egor Denisov  написал: Вот как ложный прокол этот получить непосредственно для теста.
 Создайте файл, в который будет записываться текущая цена. В основной программе на время теста вы будете читать текущую цену из файла. Затем напишите скрипт, который будет записывать в созданный файл текущую цену (реальную и не очень). В этом скрипте вы сможете создавать ситуацию с проколом в определенный момент времени: записали в файл текущую цену, затем цену на 2% выше, sleep (1000), затем опять текущую (реальную) цену записали.
а дальше подменить реальные данные - искуственными?
Вы напишите дополнительный скрипт, который будет записывать цену в файл. Основная программа будет читать эту цену из этого файла вместо реальной цены, которую она получает сейчас из функции getLastPrice, например (или откуда вы её получаете). Дополнительный скрипт тоже будет записывать в файл текущую цену из функции getLastPrice, но дополнительно вы сможете сделать так, чтобы в какое-то время или с какой-либо периодичностью вместо текущей цены из функции getLastPrice в файл записывалась цена функции getLastPrice * 1.02 в течение 1-2 секунд. Это и будет ваш запрограммированный пробой. Можете делать его с началом каждой минуты, одномоментно или быстро, но плавно. Как запрограммируете, так и будет. Можете в нерабочее время, подключившись к серверу, в реальном режиме реакцию основного скрипта тестировать с выставлением/перемещением/срабатыванием реальных стопов.
Трейлинг- стоп. Как протестировать на quik?
 
Цитата
Egor Denisov написал: Вот как ложный прокол этот получить непосредственно для теста.
Создайте файл, в который будет записываться текущая цена. В основной программе на время теста вы будете читать текущую цену из файла. Затем напишите скрипт, который будет записывать в созданный файл текущую цену (реальную и не очень). В этом скрипте вы сможете создавать ситуацию с проколом в определенный момент времени: записали в файл текущую цену, затем цену на 2% выше, sleep (1000), затем опять текущую (реальную) цену записали.
Таблица сделок, номер заявки превращается в число e+
 
Цитата
Иван написал:
Цитата
_sk_ написал:
tostring
 У меня это не дает результата - все равно на конце:  e+018
Вместо tostring используйте:
Код
local function toStringInt (value)
   return tostring (math.tointeger (value) or value)
end
Почему не работает математическая функция math.frexp?
 
Цитата
Вася написал:
Пишу в редакторе:

m, n = math.frexp(1.23456e24)
print(m)

Вроде как эта функция есть в Lua и она должна привести экспоненциальное число в нормальный вид. Но она почему то не работает, если я пишу это в редакторе кода. Кто-нибудь знает почему не работает?
Lua 5.3 Руководство.
8.2 – Изменения в библиотеках: Следующие функции стали нежелательными в математической библиотеке: atan2, cosh, sinh, tanh, pow, frexp и ldexp. Вы можете заменить math.pow(x,y) на x^y; вы можете заменить math.atan2 на math.atan, который теперь принимает один или два параметра; вы можете заменить math.ldexp(x,exp) на x * 2.0^exp. Для других операций вы можете также использовать внешнюю библиотеку или реализовать их в Lua.
как за AddLabel() отметку цены
 
Цитата
Daniil Pozdnyakov написал:
Добрый день,

К сожалению, на данный момент функции добавления "Отметки цены" при помощи QLUA нет. Можем зарегистрировать пожелание на добавление данного функционала, регистрируем ?
Да, зарегистрируйте, пожалуйста.
Ошибка запуска скомпилированного файла
 
Цитата
nikolz написал:
 Роботы продаваемые в интернете  за смешные деньги - это полный развод буратин т.е. лохотрон.
--------------------------------------
Все роботы, которые Вы  можете купить - это просто одноразовый  лотерейный билет,
но перебором коэффициентов можно занять пустую голову работой по угадыванию чисел.  
----------------------------
Поэтому покупайте билеты   Спортлото -   меньше проиграете.  
Это вы мне написали?
Ошибка запуска скомпилированного файла
 
Цитата
Nikolay написал: Но покупать алгоритм - то еще занятие.
Так в основном продают программы с возможностью менять параметры, которые пользователь и должен подобрать таким образом, чтобы выйти в плюс. Пользователь подобрал - молодец, нет - пусть подбирает дальше.
Ошибка запуска скомпилированного файла
 
Можно без скачиваний обойтись: запустите данный скрипт и появится скомпилированный файл
Код
local FILE = "MyScript"                                        -- название компилируемого файла без расширения
local PATH = "C:\\Quik-Robot\\"                                -- путь компилируемого файла
local STRIP = false                                            -- если STRIP = true, то бинарное представление может не включать всю отладочную информацию о функции, для уменьшения размера

local f = io.open (PATH .. FILE .. ".luac", "wb")
f:write (string.dump (loadfile (PATH .. FILE .. ".lua"), STRIP))
f:close ()
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Anton написал:
2) onMainInit как раз чтобы вынести бизнес-код из мейна, заодно весь мусор, созданный в процессе инициализации, попадет к коллектору сразу после нее, а не после того, как мейн закончится (т.е. никогда).
От себя добавлю: у меня очень часто в подобных конструкциях мусор к коллектору не попадал, поэтому в конце подобных функций инициализации ставил collectgarbage ().
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Цитата
Nikolay написал:
Раз уж эта тема стала такой абстрактной, могу сказать, что в российском сегменте общаться конструктивно сложно - практически всегда происходит переход на личности. Впрочем, это часто происходит и в реальности. Но на всяких интернет ресурсах - это просто данность. Лично мне это малопонятная данность.
Вполне понятная данность. Это следствие отсутствия нормальной модерации.
Цитата
Nikolay написал: Для меня как раз наоборот. dofile живет в глобальном контексте, что неудобно. По сути это предкомпилированная блок кода. При этом вместо require можно использовать конструкцию типа:
Код
   local  lib  =  load(file_path)()  
что, по сути, равносильно dofile, но имеет преимущества. Как минимум, можно получить код ошибки при загрузке модуля, если таковая есть.
Например, переопределив dofile так
Код
   function  dofile (filename)     local  f  =  assert(loadfile(filename))     return  f() end    
От себя добавлю, если интересно: Согласен с Антоном, сам всегда использую dofile для загрузки кусков кода или модулей на луа. require также использует
loadfile, но сложнее. Зачем вам все эти пути и искатели в простой задаче, когда вы знаете где и что у вас лежит?
Код
inSecList = dofile(inFileName)        
inSecList = assert(loadfile(inFileName)) ()   -- или так, если нужно
Баги QUIK 8.13
 
Цитата
Roffild написал:
10. isConnected() == nil возможно! Тут явно "гонка потоков". Этот баг отловить непросто. Чтоб 100% избежать бага нужно стартовать скрипты когда все загрузилось. "Окно подключения" появляется после отрисовки графиков на старых данных - вот на этом этапе нужно стартовать скрипты, но не раньше.
А может причина проще: забыли переменную в isConnected() инициализировать 0 и она периодически попадает на "грязную память".
У меня много скриптов, где есть isConnected(). Ни разу подобной проблемы не было. Если вы таки сталкивались с подобным, то порекомендую условие в цикле модифицировать так или наоборот и всё:
Код
(isConnected () or 0) == 1
Объем свечей (график vs ТОС)
 
Цитата
Daniil Pozdnyakov написал:
Добрый день,

проблема была нами проверена - она не воспроизвелась. Поэтому просьба открыть график инструмента и таблицу обезличенных сделок и после этого закрыть терминал. Потом нужно создать архив директории терминала без *txk ключей, выложить его на какой-либо файлообменный сервер и на почту  quiksupport@arqatech.com  прислать письмо с ссылкой для скачивания.

Дополнительная просьба, в письме укажите, пожалуйста, ссылку на данную ветвь форума.
Видимо, это только на старых версиях бывает. Смысла что-то отсылать поэтому нет, обновлюсь как-нибудь и проверю. Спасибо.
Объем свечей (график vs ТОС)
 
Скрин для поддержки за 06-10-21 23-45
Объем свечей (график vs ТОС)
 
Цитата
Старатель написал:
Цитата
Игорь М написал:
Они поправили это в 9-х версиях терминала?
 Нет
И еще раз спасибо!
Объем свечей (график vs ТОС)
 
Цитата
Старатель написал:
https://forum.quik.ru/messages/forum1/message52203/topic6189/#message52203
Спасибо, я ведь ту ветку когда-то читал. Они поправили это в 9-х версиях терминала?
Объем свечей (график vs ТОС)
 
Сейчас проверил - все стало нормально, значения на свечах соответствуют ТОС. Не знаю, что это было, но у меня это дело скрипт определил, который сравнивает, а потом я руками все перепроверил. У двух брокеров, с перезаказом данных. Если ещё раз вылезет, отскриню свечю графика.
Объем свечей (график vs ТОС)
 
Цитата
Daniil Pozdnyakov написал:
Добрый день,

Могли бы Вы прислать скриншоты, на которых различия будут отчётливо видны. Также уточните, пожалуйста, версию Вашего терминала.
Терминалы: 8.8.0.55 и 8.7.1.3. Скриншоты чего? На графике на индикаторе объема и на самой свече значение: 3650. Через скрипт, который обрабатывает ТОС или если просто выгрузить сделки из ТОС в эксель и просуммировать: 1825.
Объем свечей (график vs ТОС)
 
Здравствуйте. Наблюдаю расхождение значений объема последней свечи вечерней сессии полученной из графика и из ТОС. На графике в 2 раза больше, чем в ТОС. На примере RIZ1, 2021-10-05, 5 мин: график - 3650, ТОС - 1825; 1 мин: график - 996, ТОС - 498. Другие инструменты не проверял. Позавчера тоже было расхождение в 2 раза, раньше не проверял. Данные перезаказывал вместе с архивом.
Перемещение заявки 2 транзакциями
 
Цитата
Незнайка написал:
Цитата
Игорь М написал:
вам нужен прямой доступ на биржу
А кто в этом случае контролирует лимиты?
Биржа, а брокер в режиме post-trade.
Перемещение заявки 2 транзакциями
 
Цитата
Андрей написал:
Сделать вторую версию ф-ции sendTransaction, которая пропускает "проверку достаточности средств на сервере", идет сразу на биржу. Таким образом отправленные 2 транзакции обработаются без проблем, если прийдут на биржу в таком же порядке. Это уже достаточный уровень функционала. В худшем случае биржа просто не обработает вторую транзакцию, Ведь ваша проверка на сервере Quik - это как пре(дварительный)фильтр. Без него ничего страшного тоже не произойдет - получим отказ от биржи в реплае.
С этим предложением, Андрей, вы погорячились.  :smile:  А, вообще, вам нужен прямой доступ на биржу без всякого этого, уж если вам скорость так критична.
Метки
 
Цитата
s_mike@rambler.ru написал:
Если вы хотите установить "невидимую" метку, просто не указывайте image_path. И потом посредством setlabel делайте с ней все что необходимо.

Если image_path указан, он должен быть обработан. Либо метка нарисована, либо должна возникнуть ошибка исполнения.
Проблем у меня ни в том, ни в другом случае не возникнет. Я писал истины ради. Если IMAGE_PATH указан некорректно, то его игнорирование - не ошибка. Метка добавляется как-будто его не указывали или указали IMAGE_PATH= "". Это просто неуказанный параметр или указанный неверно (его некорректность игнорируется). Также, как если вы укажете FONT_FACE_NAME = "нет такого", то будет добавлена метка со значением по умолчанию "Arial".
Метки
 
Я бы не стал это исправлять. Данный пример на мой взгляд работает корректно. Метка выставляется, её не видно, но она есть. Если её изменить с помощью SetLabelParams - всё нормально работает и возвращает true.
У меня в скриптах есть такое: невидимые метки добавляются (Add), а затем устанавливаются/меняются (Set) - все нормально работает. Если в вышеуказанном примере вместо IMAGE_PATH="нет такого файла", написать: IMAGE_PATH="", то метка не добавится, nil вернет, так что оставьте как есть.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Владимир написал:
А как "нормальные люди" задают ID транзакции? В принципе, можно бы присобачить системное время или просто нумеровать их у себя как 1, 2, 3, 4,... А "уникальность между скриптами" меня не волнует - у меня один скрипт - есть, был и будет. Точнее, две его копии на двух Квиках.
Так и используйте время, как многие делают, зачем этот огород с рандомом? При запуске скрипта задаете начальное значение, типа:
Код
local trans_id = os.time () - 1546290000               -- идентификатор транзакции (количество секунд с начала 2019 года для UTC+3) 
или просто os.time (), а дальше в скрипте: trans_id = trans_id+1
Ошибка флага сделки., Новый/старый терминал. Есть разница.
 
Цитата
Игорь М написал:
Ребята, проверяйте тикер.  
Не туда написал, пардон
Ошибка флага сделки., Новый/старый терминал. Есть разница.
 
Ребята, проверяйте тикер. :wink:  
Индикатор торговой сессии
 
Цитата
swerg написал:
Цитата
BlaZed написал:
У меня в квике, как оказалось, ограничения стояли на получение данных раз в 1 секунду.

Прикольно, это что за настройка такая?
Основные настройки/Программа/Получение данных/Запрашивать данные раз в ___ сек.
агрегировать значения из таблицы сделок по временному условию
 
Цитата
Nikolay написал:
Цитата
Игорь М написал:
Да, 2-ой. И у меня 2-ой. Можно с префиксом "0x" поставить для наглядности: bit.band(trade.flags, 0x4). И bit.band в отличие от bit.test число возвращает. Почему bit.test лучше, чем bit.band - готов узнать.
Кроме быстродействия и наглядности никаких.
Какого быстродействия? Что быстрее bit.test или bit.band?
агрегировать значения из таблицы сделок по временному условию
 
Цитата
Nikolay написал:
...
Николай, я предполагаю, что это вы мне написали, поэтому давайте объясню:

Цитата
А вот то, что функция аггрегирования вызывается несколько раз - это не очень.
Почему не произвести расчет разово, перебрав сделки в одном цикле.
Если вы про вызовы в message, то это просто для демонстрации, чтобы человеку нагляднее было. Задачи что-то несколько раз перебирать и не стояло. Ему, вообще, только для лонга нужно было и, возможно, он один раз в конце дня этот скрипт запускает. Понятно, что одно и тоже несколько раз не нужно пересчитывать. Я также надеюсь, что он догадается при частом подсчете не обсчитывать  строки таблицы каждый раз от 0 по новой при поступлении новой записи в таблицу.
Цитата
Что касается направления сделки, то если это обычная таблица trades (а  не обезличенные сделки), то направление это 2-ой бит флага.
И проверять его лучше логически через функцию bit.test, а не сравнивать с десятичным числом.
Да, 2-ой. И у меня 2-ой. Можно с префиксом "0x" поставить для наглядности: bit.band(trade.flags, 0x4). И bit.band в отличие от bit.test число возвращает. Почему bit.test лучше, чем bit.band - готов узнать.
агрегировать значения из таблицы сделок по временному условию
 

Чуть подкорректировал (после 12 часов это ">="):

Код
local SecCode = "RIH1"

function aggrF(direction)
    local value=0                                                                         -- здесь рассчитываю кумулятивное значение из столбца объем таблицы сделок
    for i = 0, getNumberOf("trades") - 1 do
       local trade = getItem ("trades", i)                                                                              -- получение таблицы данных из i-ой строки ТС
       if bit.band(trade.flags, 4) == direction and trade.sec_code == SecCode and trade.datetime.hour >= 12 then        -- сделка на продажу по конкр. инструменту
          value = trade.value+value
       end
    end
    return value
end

  message ("Buy: " .. tostring (aggrF(0)))
  message ("Sell: " .. tostring (aggrF(4)))
  message ("Total: " .. tostring (aggrF(0)+aggrF(4)))
Данный инструмент запрещен для операции шорт
 
 Владимир, пишите/звоните своему брокеру. Разработчики тут ни при чем.
Создание авто ввода текста в Lua, Как создать скрипт который при нажатии клавиши мышки вводил бы текст автоматически.
 
Цитата
Антон написал:
Есть такая приложуха GHUB для мышек фирмы логитеч и хотелось бы привязать к клавиши как то это
Там есть возможность без скрипта но тогда не будет работать клавиша как то иначе как кроме ввода значений
Антон, это форум про другую игру.  :smile:  
Страницы: 1 2 3 След.
Наверх