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

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

Страницы: Пред. 1 2 3 4 5 6 7 След.
подключение к Криптобирже Bitmex
 
Bitmex должен будет купить лицензию QUIK, установить сервер и транслировать данные - тогда можно будет через терминал к нему подключиться.
Что бы это значило?
 
Опять писатели инструкций говна в дупу залили, ну что-ж такое-то, сколько можно?!
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
TGB, я ассерт на копии значений поставил в функцию инвертирования таблицы, но не упомянул. Так как нужно это только для дебага ручных операций, то не стал заморачиваться с такими вещами как вторичная инвертированная таблица для проверки уникальности по месту.

Генерировать сериализированные файлы в формате исполняемого кода это что называется все фломастеры на вкус разные. Вывод всё равно получается кашеобразный и нечитаемый.
Что бы это значило?
 
Два последних можно делать такими же как два предыдущих, а не использовать QTABLE_DEFAULT_COLOR.
Код
SetColor ( tab, y, x, bgcol, txtcol, bgcol, txtcol )
Зато понятно почему мой генератор такой ошибки не встретил - там не использовалось ни QTABLE_NO_INDEX ни QTABLE_DEFAULT_COLOR, все значения были указаны явно.
Что бы это значило?
 
Источник проблемы найден - не прошло и полгода, но потребовался сторонний эксперт т.к. ТС сам разбираться отказывается. Теперь можно с одной стороны передать багрепорт, а с другой стороны не вызывать функцию SetColor если первые три аргумента равны -1.
Что бы это значило?
 
Сгенерировал большой объем табличных данных методом Перлина, никаких ошибок не заметил. Значения ячеек устанавливаются нормально, никакого шаманства не требуется. При вызове слишком высокого количества SetCell и т.п. в секунду, прорисовка таблицы начинает лагать, что в целом и ожидается - можно обновления засовывать в очередь и постепенно данные кормить в таблицу. На моей машине 40х40 ячеек с периодичностью обновления 100 мсек немного лагает но в целом справляется. Если периодичность увеличить до 10 мсек то таблица так лагает что даже сама не прорисовывается и надо кликать, но данные никуда не пропадают и ошибок не возникает.






У вас код так скажем "не без помарок" и "ошибка" совпадает с получением новых данных и соответственно отрисовкой таблицы, с учётом этого самый вероятный вариант это что просто у вас где-то в коде происходит потеря данных, вот они и из таблицы исчезают.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
По поводу метаметодов еще. Метаметод __pairs может препятсвовать правильной выгрузке, так что "pairs ( t )" надо заменить на "next, t". Метаметод __metatable может скрывать истиную метатаблицу так что getmetatable and setmetatable надо заменить на debug.getmetatable и debug.setmetatable.


Также rawset не принимает невалидные ключи, так что надо добавить барьер.
Код
if kcurr ~= nil and kcurr == kcurr then rawset ( tcurr, kcurr, v ) end
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
TGB, в Lua имеется встроенный компилятор который производит бинарный байткод, который может выполняться в виртуальной машине Lua. В него можно отправлять целые файлы или отдельные фукнции. Байткод потом можно загрузить в виде исполняемого кода. Никаких преимуществ по сравнению с использованием обычных текстовых исходников не даёт - Lua и так перед началом работы внутренне производит этот байткод и его потом исполняет.


Так что технически есть возможность сбрасывать и загружать чистые Lua-функици. Но поскольку нужно будет еще и сбрасывать C-функции, что невозможно, то лучше и Lua-функции не поддерживать. Перед вызовом сериализаторов просто затолкайте нужные функции в таблицу алиасов, и они подцепятся. Классы кстати тоже туда нужно заталкивать, иначе при загрузке будут воспроизводиться копии объектов-классов а не использоваться созданные в программе.
Отладка QUIK 8.12
 
Цитата
Андрей написал:
Цитата
Артем написал:
Не надо объяснять злым умыслом то что можно объяснить некомпетентностью.
В предыдущих версиях этого не было.
Это называется "регрессия". Где-то что-то исправили, в итоге в другом месте где-то что-то сломалось. В больших проектах это нормальная ситуация - зависимостей в коде много и часть из них весьма неочевидны. Варианта действий тут всего три: откатить все изменения и выбросить на помойку всю проделанную работу и делать заново, либо сидеть дебажить пока не починится (не факт что что-то еще не сломается в процессе ремонта) и откладывать обновления, либо выпустить как есть и заниматься исправлением багов в обычном режиме - по мере фиксации. Шизики не принимающие таблетки берут первый пункт, мамкины перфекционисты комнатные берут второй, бизнесмены берут третий.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Я понял в чём проблема с метатаблицами: возможны ситуации, когда метатаблица загружается до того, как исползующий ей стол, тогда метаметоды будут активны сразу. Метаметоды можно обойти через rawset.
Код
if     vt == 'table' then tlist[ v ] = tlist[ v ] or alias[ v ] or { }; v = tlist[ v ]
elseif vt == 'number' then v = alias[ v ] or tonumber ( v ) or 0/0
elseif vt == 'string' then v = alias[ v ] or unescape ( v )
else v = alias[ v ]
end
rawset ( tcurr, kcurr, v )
Не уверен стоит ли добавлять строку для обработки булевых значений явно вместо простого добавления алиасов. Это освободит имена "true" и "false" но их по-хорошему нельзя ни для чего другого использовать в любом случае. Плюс сериалайзеры всё равно смотрят в таблицу алиасов первым шагом. Для читабельности кода разве что?
Код
elseif kt == 'boolean' then kcurr = alias[ k ] or k == 'true'
elseif kv == 'boolean' then v = alias[ v ] or v == 'true'
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
TGB, у вас тут кстати ошибка:
Код
elseif kt == 'boolean' then kcurr = alias[ k ] or k        
elseif vt == 'boolean' then tcurr [ kcurr ] = alias[ v ] or v
переменные k и v здесь строкового типа со значениями "true" или "false" текстом, таблицы с булевыми значениями загрузятся неправильно.

С алиасингом булевых значений в глубоких таблицах действительно была ошибка которую надо исправить, хотя в целом некритичная - булы они и в африке булы, под каким именно алиасом они сидели это неважно.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
TGB, не знаю в чём у вас проблема с charpattern:
Код
local s = dumpstr ( { charpattern = utf8.charpattern } )
local t = loadstr ( s )
print ( t.charpattern == utf8.charpattern )
> true
for i = 1, math.max ( string.length ( t.charpattern ), string.length ( utf8.charpattern ) ) do
  print ( string.byte ( t.charpattern, i ), string.byte ( utf8.charpattern, i ) )
end
> 91 91 / 0 0 / 45 45 / 127 127 / 194 149 ...
Может в терминале вывод тестировали и он на нулевых байтах обрывал вывод?

С метатейблами тоже мне не понятно в чём затруднение - тут и так сначала заполняется исходная таблица а потом её содержимое влючая метатаблицу, просто за счёт того в каком порядке данные сбрасываются: никакой дополнительной программной обработки не требуется. Метаметоды конечно должны быть в таблице алиасов - программный код не может быть сброшен и загружен. При желании можно с байткодом конечно шаманить но с функциями на С это всё равно не работает, так что ради единообразности и Lua функции тоже не поддерживаются.

С булевыми значениями действительно просчёт, но решается он так же как с математическими константами: добавлением алиасов.
Код
addalias ( math.huge, "math.huge" )
addalias ( -math.huge, "-math.huge" )
addalias ( true, "true" )
addalias ( false, "false" )
Отладка QUIK 8.12
 
Не надо объяснять злым умыслом то что можно объяснить некомпетентностью.
Добавить в вывод GetParamEx() поле с указанием времени последнего обновления
 
Незнайка, на усмотрение разработчиков. Нужно только чтобы был часовой ориентир, относительно чего он установлен это неважно.
Добавить в вывод GetParamEx() поле с указанием времени последнего обновления
 
https://forum.quik.ru/messages/forum10/message54015/topic6339/#message54015

Наличие такого поля позволит оценить актуальность значения параметра. Параметры работающие в реальном времени (такие как статус торговли) стали бы "обновляться" в момент вызова функции а не в момент фактического изменения.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Nikolay,это уже реализовано - OnParam и т.п. При ответе сервера приходит колбек. Нет ответа - нет и колбека.
как вставить системное время в ячейку таблицы
 
Ячейка может быть пустой если в поле value были переданы битые данные, если вы адресуете несуществующую ячейку.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Незнайка, есть определённый список таблиц, без данных из которых невозможно начать автоматическую торговлю. Вот их и ждём.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Незнайка, тут подразумевается что пользователь имеет достаточно высокий урвень айсикью, чтобы не ждать заполнения таблиц которые однозначно будут пустыми.
недокументированные события QTABLE при нажатии мышки
 
Забыл добавить что про форматы даты/числа это только к фильтрам и автоформатированию. Сортировка работает при использовании любого формата чисел, главное чтобы число текущего момента было выше чем число предыдущего.
недокументированные события QTABLE при нажатии мышки
 
Тут судя по всему в инструкции неверный термин использован - если "ключ" использовать как "порядковый номер в таблице" то работает без нареканий - удаление, добавление, сортировка, всё остальное. Сортировка работает по просто числовому полю value, у QTABLE_DATE_TYPE число должно быть восьмизначное формата YYYYMMDD, у QTABLE_TIME_TYPE шестизначное формата HHMMSS. С типом QTABLE_DATETIME_TYPE не разобрался, но вариации и комбинации двух предыдущих типов не работают.
Снимать активные заявки одной понятной клавишей, в таблице заявок, В талице заявок
 
A.T., в терминале QUIK имеется редактор горячих клавиш. Можете там поставить любую клавишу на любое действие.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Незнайка,когда таблицы заполнятся, очевидно же. Да и как вы торговать собрались не имея никаких данных, в любом случае?
QUIK не отправляет заявку, в которой цена представлена переменной
 
swerg, тут видимо суть в том, чтобы работало по принципу "пропущена запятая - отказ", чтобы надёжно - с реальными деньгами таки дело идёт, так что мало ли. Благо дело при создании формы программным путём, сделать её идальной это невелика проблема.

Код
function TradePriceFormat ( value, accuracy ) 
  return string.format ( string.format ( "%%.%df", accuracy ), value )
end
Тут конечно с неявным округлением последнего знака, но кашу после него всё равно надо как-то округлять в любом случае.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир,  Lua работает с ошибками но такой же результат кода на С это другое. То С лучший язык то С++ на самом деле получше. С меня достаточно этого маразма. Жаль тут функции игнора нет, придётся силу воли задействовать.
Перехват событий формы и отмена заявки
 
swerg, не знаю. Что спрашивали, то и ответили.
Перехват событий формы и отмена заявки
 
Алексей, бинарный плагин для Lua можно сделать и его подцепить. Только используйте С, меньше геморроя будет. У Lua есть специальный API для работы из С и для запуска бинарных библиотек. Еще можно просто обычную библиотеку на С написать и загрузить её в Lua с помощью alien (установить через luarocks).
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, использовать в тысячу раз более тяжеловесный и в целом несовместимый язык ради однострочных комментариев - ну-ну. Это при том что в изначальном собственно языке они тоже доступны, надо только инструкцию прочитать.

На пенсию, товарищ.
недокументированные события QTABLE при нажатии мышки
 
Старатель, os.time ( ) или просто числовой.


Вообще, в таблице информация только строковая и задаётся через SetCell аргумент text, а аргумент value используется только для сортировки.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Цитата
Незнайка написал:
Цитата
Артем написал:
Можно проверять объём строк в таблицах и спать пока он равен нулевому.
Так во многих таблицах количество строк и будет нулевым, пока вы спите.
Откуда, например, взяться заявкам, сделкам, позициям по фьючерсам etc., если вы спите?
Дык в main-треде спать? Он отдельно от главного треда, асинхронно выполняется. Пока в нём спишь, данные с сервера приходят и обрабатываются.
Добавить аргумент param в колбек OnParam
 
Цитата
Roman Azarov написал:
Вызов OnParam происходит при изменении параметра(ов) и, в текущей реализации, функции действительно неизвестно, значение каких конкретно параметров было изменено.
1) с сервера приходят полные данные об обновлении
2) движок QUIK их обрабатывает и обновляет таблицы
3) движок Lua API вызывает глобальную функцию OnParam с двумя аргументами class_code и sec_code
Где-то между шагами 2 и 3 одна из функций забывает передать часть данных дальше по цепочке. Это не нереализованный функционал а просто ошибка программиста. Главное чтобы не по логике а-ля "я точно знаю что это никому не потребуется ведь я умнее всех и мне виднее" - знавал таких ведущих разработчиков, геморройно с такими общаться: даже если носом ткнуть то всё равно неправоту не признают месяцами и не то что не исправляют, а еще и подчинённым препятствуют исправлять.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, у вас этот код на С не компилируется что ли, что вы его С++ обзываете? Был бы С++ я бы писал void main ( ) и #include <cstdlib>.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, поясняю доходчиво на понятном языке:

Код
local i = -999
for i = 1, 100 do
  if math.random ( 0, 9 ) == 0 then 
    print ( i )
    break 
  end
end
print ( i )
Код
#include "stdio.h"
#include "stdlib.h"
int main ( int argc, char ** argv )
{
  int i = 0;
  for ( int i = 1; i < 100; i++ )
  {   
    if ( rand ( ) % 10 == 0 ) 
    {
      printf ( "%d\n", i );
      break;
    }
  }
  printf ( "%d", i );
  return 0;
}
Можете начинать аргументировать почему С это плохой язык.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, Я на иностранных форумах как-то байку слышал, что там программистов за 35 на работу не берут, особенно в таких местах как Сан-Франциско. Видимо по причине вот такого подхода к делу у ветеранов программирования.  :smile: Я программирую уже 15 лет, видимо мне осталось где-то еще 15-25 пока катушка не съехала.
getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
 
Владимир, тут по аналогии с предсказанием погоды - точность математических погодных моделей посредственная в лучшем случае, но при наличии миллионов точек данных с погодных зондов можно составить статистическую модель у которой довольно высокая точность. Данные со временем только накапливаются, точность улучшается.


getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
 
Владимир, если у алгоритма выше точность в 0.05 раз, то это хороший алгоритм. А то что затрата вычислительных ресурсов больше в 50 раз, то это издержки производства - можно потратить время/деньги а можно выбрать алгоритм похуже но "подешевле".
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, маразм это у вас в голове, если вы задокументированную функцию языка принимаете за ошибку. На пенсию пора.  :smile:  
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, про область видимости переменных в университете не проходили? Или вы уроки лекции прогуливали? Лекции о форматирование кода и именовании переменных тоже видимо мимо вас прошли.
getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
 
Владимир, все так делают, но свечки они и в африке свечки. Если по алгоритму окно требуется большое, то и свечек загрузить надо будет очень много.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Можно проверять объём строк в таблицах и спать пока он равен нулевому.
QUIK не отправляет заявку, в которой цена представлена переменной
 
А собственно: инструкция "Интерпретатор языка Lua", раздел 3.11 "Функции для работы с заявками", пункт 1 функция "sendTransaction", примечание жирным текстом:

Цитата
ВАЖНО!
Для корректной обработки данных числовые значения (цена, количество, идентификатор транзакции и т.д.) должны передаваться в виде строковых значений.

Тут собственно ваша ошибка/лень. Протокол - строковый, конвертируйте ваши значения в строки.
QUIK не отправляет заявку, в которой цена представлена переменной
 
Цитата
swerg написал:

Вопрос к разработчикам ровно один и простой: неужели до сих пор нельзя сделать так, чтобы параметр Transaction["PRICE"] можно было задавать числом, а не строкой?!
Вроде в инструкции указано что все параметры транзакции - строковые.
Добавить аргумент param в колбек OnParam
 
Цитата
Roman Azarov написал:
Артем, добрый день!

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

Если значений имеется несколько а не одно, то значит надо использовать массив вместо простой переменной. Отмазка не засчитана.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, знаете о нейросетях в районе ничерта, а заявления делаете громкие. Непрофессионально.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Владимир написал:
К нейросетям я всегда относился полунасмешливо
Зря. GPT-3 уже может писать книги, программировать на декларативных языках, и делать арифметику в уме (т.е. без использования программы-калькулятора)  до пятизначных слагаемых. GPT-4 не за горами, и он возможно сам сможет написать GPT-5.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, буду надеяться что нейросеть будет работать как описано - извлекать скрытые и неизвестные зависимости в голом потоке данных и воспроизводить их. На друих задачах итоговая точность обычно составляет от 85% до 99% - для фондового рынка я пологаю что величина будет значительно ниже. Однако базовый анализ авторегрессором показывает значительную корреляцию, так что резонно пологать что итоговая точность будет значительно выше 50%, чего будет достаточно для торговли в плюс. В такой ситуации вам не останется выбора, кроме как признать мою авторитетность в этом поле деятельности.  :smile:  
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, в поисках плохих языков далеко ходить не надо - C++, Java, Rust - мы все о них слышали. Lua это один из хороших языков, рядом с C и Python.


Легко наверное жить когда уровень ЧСВ еще выше чем уровень IQ. Когда нейронный робот запустится, я с вами поделюсь данными о монетарной производительности.
getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
 
Владимир, тут по аналогии с астрономией - в каталог занесены миллиарды звёзд, и при проверке новой гипотезы все их надо проверять на предмет корреляции. Обычно с этой целью арендуют время на суперкомпьютерах за государственные деньги, ну или за свои если толщина кошелька позволяет. Но это разовые исследования, проще оплатить аренду чем покупать свою аппаратуру - а обработка таких данных на торговой площадке должна происходить постоянно, выявлять новые корреляции графиков нужно на ежедневной основе. Так что тут выбор между тремя стульями: либо использовать неполный набор данных и получить низкокачественный результат, либо обрабатывать данные раз в неделю/месяц/квартал в фоне по мощностям компьютера, либо докупить аппаратуры чтобы можно было использовать весь набор данных и обработать его между закрытием вечерней сессии и открытием утренней.
getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
 
Старатель, ну тут кто хелловорлды пишет а кто гигабайтами данных ворочает - два ядра два гига с механической памятью кому-то хватит, а у кого-то программа с миллионами свечек в обработке начнет лезть в своп и без того скудная скорость скатывается в ноль. Все фломастеры на вкус разные.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Владимир, спасибо за торговую информацию. Я начинал писать робота без надежды на прибыль, считая что точность технического анализа будет приближаться к броску монетки в силу турбулентности рынка. Но видя что алгоритмический робот может надёжно торговать в плюс, мне теперь кажется что и мой нейронный робот тоже будет хорошо справляться.


По поводу экспертизы я уже сказал - кто не знает языка в полной мере тот не эксперт как ни крути. Это примерно как Вася-токарь с опытом 40 лет, который вручную точит хорошие детали, но так и не умеет пользоваться блоком ЧПУ и особо ядрёные чертежи ему не по зубам, хотя станок справился бы.
Страницы: Пред. 1 2 3 4 5 6 7 След.
Наверх