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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 71 След.
Мой робот
 
Добрый день,
Решил замутить тему о том, как я строю робота.
-------------------
В данной теме, если не лень, буду описывать  основные блоки нового робота,
которого сейчас пишу.
--------------  
Данный робот обрабатывает информацию по всем инструментам, на которые мы подписываемся в терминале QUIK.
---------------------
В этом роботе, назовем его для определенности Петя (Вася у меня был 10 лет назад),
выделяю два основных блока(мозга)- спинной и головной.
-----------------
Спинной блок отвечает за обработку , которую необходимо выполнять для получения и отправки информации на биржу или брокеру. К этому блоку относится обработка информации о сделках и заявках.
Спинной блок занимается рутинной работой, без которой невозможно торговать.
---------------
Головной блок занимается управлением торговлей.
Он осуществляет прогноз движения рынка и формирование сигналов покупки/продажи.
Головной блок - это творческая часть робота, которая собственно либо сливает депозит, либо его увеличивает.  
==========
Спинной блок.
Здесь реализуется следующие блоки обработки:
1. OnTransReply  -  транзакций
2. OnStopOrder  -  информации о выставленных  стоп-заявках
3. OnOrder  -  информации о  выставленных заявок
4. OnTrade - информации о совершенных своих сделках
5. OnParam -информации об изменении состояния подписанных в терминале QUIK инструментов
--------------
OnParam
Пример реализации  функции:
Код
function OnParam(c,s)
if TLL and c~="SPBFUT" and c~="CETS"  then
     local Lev=tonumber(getParamEx(c,s,"LISTLEVEL").param_value); 
     if Lev>0 then
   local i=1; while #TLL>=i do if Lev==TLL[i] then break; end i=i+1 end
   if i>#TLL then  return; end
     end
end
   local t={14,c,s}; tprm[#tprm+1]=t;--if 2>#tprm then nkevent.Set(event);
end
Это основная функция, которая создает события event  при изменении параметров любого из инструментов.
Эти события обрабатываются в функции main, которая выполняется в отдельном потоке.
--------------------------
В данной реализации OnParam добавлено условие (оператор if) фильтрации инструментов по листингу.
--------------------
Можно добавить и другие фильтры. Например, можно задать список торгуемых инструментов из числа всех подписанных. В этом случае робот будет торговать и отслеживать лишь списочные инструменты.
-----------------
В роботе реализованы три механизма событий, которые вызывают функцию main.
событие №1  OnParam.
По этому событию выполняется регистрация параметров инструмента и подписка на свечи или тики для данного инструмента. Кроме того, по этому сигналу обрабатываются стоп-заявки и заявки.  
-----------------------------------
событие №2  таймер интервала свечей. Например, если головной блок использует свечи с интервалом 1 минута, то таймер выдает сигнал каждую минуту и по этому сигналу запускается для каждого торгуемого инструмента отдельный поток из пула потоков, в котором работает головной блок.  
----------------------------------
событие №3 . Так называемый Watchdog -"сторожевой пес".  Таймер, который выдает сигнал, если нет события №1 например в течении 30 секунд.   Это событие означает, что что-то не так и надо предпринимать соответствующие меры.
==================
Продолжение следует...
Разрыв соединения в фоновом режиме, Разрыв соединения в фоновом режиме
 
Цитата
major написал:
Коллеги, подскажите как бороться?
Если оставить работающего квика в фоновом режиме, не обращаясь к нему, но он разрывает соединение .
отключите на компе режим сна
Последние котировки
 
Цитата
AlxE написал:
Здравствуйте. Есть ли возможность получить последние котировки в терминале вне рабочие часы биржи? Иногда нужно посмотреть рано утром, а выпрыгивает окно "Соединение установить не удалось" и терминал открывается с неактуальными котировкам.
Если сервер брокера не работает, то можно у финама посмотреть.
Робот Сетка LUA для QUIK бесплатно, Обзоры и обновления робота
 
Цитата
Михаил Понамаренко написал:
Цитата
Serge123 написал:
>  Робот торгует на моём реальном счёте без вмешательств на удалённом сервере VPS. Результатом работы доволен.

Вот, смотрите   :
Михаил Понамаренко,
Результаты интересные, но просьба пояснить график на видео.
-------------------------
1) Самая последняя точка на графике.
Падение с 85 млн до 64 млн. Верно? А то плохо видно. Т е допустимая просадка до 30% или больше?
----------------------
2) Вы говорите о торговле за последний год, а на графике с 2017. Верно?
-----------------------
3) А что там написано что период с 2017 по 2018?
-----------------------------
4) Указана доходность 158% к среднему капиталу. Средний капитал указан 25 млн.
А на графике 65 млн. Как посчитана доходность ?
-------------
Можете пояснить на чем торгуете и какие в среднем результаты на сделку.
----------------
Если можно покажите графики по годам.
------------------
Спасибо.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Цитата
nikolz написал:
Вы опять ошибаетесь.
nikolz, Не знаю в чем я здесь ошибся,
это русский перевод текста с английского языка,
все что нужно здесь для понимания, это читать начиная с конца.
Например если на писали на ангельском "Все хорошо", то понимать нужно "Хорошо все".
Поясняю в чем Вы ошиблись.
-----------------------
Первое.
В луа корауны - это обычная функция у которой сделан отдельный стек.
Для этого используется функция API C lua_newthread,   Но все коорауны в одном потоке ОС.
Слово "поток"  в Lua - это просто не удачное название .
Например, есть мороженое 48 коп. Но 48 коп - это не цена, а название. Так и со словом поток в луа.
-------------------
Второе.
Понятие "задача" относится к скрипту - т е к коду и данным - т е к тому "что вычислить",
а понятие "поток" - относится к вычислителю, т е процессору(ядру, эмулятору АЛУ и регистрам процессора) - т.е.  к тому "чем вычислять".
------------------------
Т е задача и поток = это две совершенно разные сущности.
----------------------
Поэтому "многозадачность" и многопоточность" это как "красное" и "кислое" - две большие разности.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Одна задача может исполняться несколькими потоками параллельно.
А несколько задач одним потоком будут выполнятся всегда последовательно.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Nikolay,  Ну давайте сначала, вот от "метров":

"В многозадачном алгоритме исполнителей несколько и у каждого из них - свое состояние и свой путь в графе состояний.
Многопоточные алгоритмы - просто другое название для многозадачных."

"В Lua реализована "совместная многопоточность", когда потоки явно уступают выполнение друг другу и сохраняют состояние до следующего момента,
когда выполнение столь же явно будет передано им снова".

"Только явная передача управление и сохранение состояния.
Это логическая  многозадачность - на самом деле в любой момент времени выполняется только один поток.
Просто их несколько и они переключаются между собой".

Наверняка можно сделать, только зачем если уже есть, и сделано классно.

Вы очереди перебираете в цикле, цикл идет с какой то определенной задержкой на исполнение.

Мой пример это выделение какой то задачи в коде, которую нужно выполнять с максимальной скоростью.
Ну к примеру пронестись по тикам, и снова вернуться к аналитике на медленных скоростях
и здесь скорости имеют значения.

Я не утверждаю что это единственное использование каротин, но согласитесь видь классно!
А главное можно работать со скоростью исполнения скрипта! ::  
Вы опять ошибаетесь.
Многопоточная и многозадачная - это две большие разницы.
----------------
Потоки нужны для параллельного исполнения задач, что возможно лишь при наличии нескольких процессоров или ядер.
Многозадачность реализуется и на одном ядре и зависит от операционной системы.
Ошибка:Не хватило памяти под объекты...
 
Добрый день,
Вопрос к разработчикам
версия 11.0.1.3
После экспериментов с открытием множества потоков
На демо сервере при очередном запуске QUIK получаем это:

и после этого QUIK выгружается.
Есть ли способ исправить и запустить QUIK  без установки заново?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Цитата
nikolz написал:
Поэтому коруунды ничего  не ускоряют.
А никто не утверждает что они что ускоряют, речь идет о разделении скорости исполнения кода на две части.
Там где нужна максимальная - исполнения ордера, и где можно раз в секунду.
Не понял.
Что значит "разделении скорости исполнения кода на две части"?
И зачем Вы разделяете СКОРОСТЬ?
Как Вы разделяете скорость и в чем это выражается?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Цитата
nikolz написал:
Но корунды имеют накладные расходы. Поэтому вместо выигрыша может быть проигрыш.
Это совсем не понятно?
Я привожу конкретный пример реализации,  
Цитата
VPM написал:
В функции Robot получаем информацию от терминала обрабатываем ее формируем правило торговой системы,именно здесь  работает задержка основного цикла sleep()!При вызове функции Trade() прерывается код функции Pobot(), идет исполнение сопрограммы со всей той скорость на что способна lua и позволяет система!
Где тут проигрыш?
Попробую объяснить еще раз.
функция main работает в единственном потоке и в единственном стайке, который в этом потоке создан.
Поэтому, чтобы Вы не запустили на луа внутри main, это будет исполняться в потоке main.
Т е все коруунды исполняются в одном потоке ОС т.  е последовательно на одном ядре процессора.
-------------------
Потери будут на затратах времени на сохранение состояния коруунды и на возобновления ее работы.
Коруунды позволяют исключить простои потока если у Вас выполняется например ввод данных, которые ждет исполняемая функция. Вот во время этого ожидания можно запустить другую функцию.  Но в скриптах КВИК нет таких ааодов выводов. Поэтому коруунды ничего  не ускоряют. А затраты времени на сохранение состояний коруунды и вновь его восстановление - это и есть пустая трата времени потока.
--------------------  
О псевдо поточности коруундов можно почитать в учебниках по программированию и документации по Луа.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
и еще... одновременно с этим практически бесплатно (в смысле затрат времени процессора)  реализуется WatchDog  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
и еще...
Фактически весть механизм коррутин с большим быстродействием реализуется через один EVENT и оператор if.
При этом скорость переключения составляет микросекунды.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Если действительно хотите многопоточность без загрузки процессора пустыми циклами и пропуска данных по тикам,
то смотрите  Event OC.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Вы либо умолчали, либо заблуждаетесь.
---------------------
Корутина - это псевдо многопоточность. т е исполняются они на одной VMLua и в одном потоке OC.
--------------------
Они дают выигрыш если у вас в скрипте есть синхронный ввод/вывод с медленных устройств.
В скриптах КВИКА таких медленных синхронных вводов выводов нет.
Но корунды имеют накладные расходы.
Поэтому вместо выигрыша может быть проигрыш.
Помогите в написании скрипта, Помощь в написании скрипта
 
Пишу на любом языке программирования.
Помогите в написании скрипта, Помощь в написании скрипта
 
Цитата
МихаилСМ написал:
nikolz, изучать для этого незнакомый мне язык, с непонятной мне логикой, не совсем комфортно. Потрачу кучу времени и сил для получения результата, которого я могу добиться заплатив денежку. Не вижу смысла. Так же не вижу смысла в вашем ответе. Не нравится - проходим мимо.  
Это не вопрос, а мнение. Возможно задача простая, но возможно и сложная.
Все зависит от технического задания.
----------------------------
Вы получите реальное предложение, если  без поверхностных  суждений о сложности не решенной задачи,
выложите тех задание с указанием сроков и стоимости, и  тестов для оценки правильности решения.
----------------
Убежден, что у дилетантов все задачи простые.
------------------
Реально сложность задачи можно узнать лишь после ее решения.    
Помогите в написании скрипта, Помощь в написании скрипта
 
Не перестаю удивляться подобной формулировки вопроса.
Казалось бы, если задача простая, то в чем проблема написать самому?
Если не могешь , то как определил, что задача простая?
Обезличенные сделки. Подписка/отписка
 
Цитата
funduk написал:
Поэтому у меня всегда два скрипта работают: один фиксинг валют считает, второй - средневзвешенные индексы, оба по тиковым данным.
как решаете обмен данными между скриптами?
Сравнение языков программирования
 
Цитата
funduk написал:
Цитата
Cyber написал:
Радует, что 5,4 на 20% шустрее 5,3.
Подскажите, как Вы сравнивали?
Запускаю приведенный выше скрипт в exe. В строке результат выше указана командная строка запуска скрипта на исполнение.
Сравнение языков программирования
 
Пример расчет SMA .
Код
function SMA(i,P,x,y)
   if i==1 then  y=x;
   else
      local i1=i-1;
      local y=V[i1] or 0;
      if i<=P then y=y+i1*x/i;else y=y+(y-x)/P; end
   end
   return y;
end

local t=os.clock();
local N=256;
local y=0;
local A=100.
local P=128
local W=2*3.14/N
for i=1,1000000 do
   local i1=i-1;
   local x=A*math.sin(W*i);
   y=SMA(i,P,x,y);
--   print(i,x,y);
end
print(os.clock()-t);
время вычисления:
Код
>D:/LuaJIT/luajit.exe -e "io.stdout:setvbuf 'no'" "testTJ.jit" 
0.018
>Exit code: 0
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "testTX.lua" 
0.17
>Exit code: 0
>D:/lua54/lua54.exe -e "io.stdout:setvbuf 'no'" "testTX.lua" 
0.145
>Exit code: 0
Обезличенные сделки. Подписка/отписка
 
Цитата
Kolossi написал:
Поправил main() что бы отсечь возможные варианты:
Код
   function   main ()
    message ( "Script's start local time: "  ..  os.date ( "%d-%b-%Y %X" ))
   SessionDate =  getTradeDate ().date
    message ( "Session date "  .. SessionDate)
   ParamRequest(p_classcode,ticker,"TRADINGSTATUS")
    -- 
    while  is_run =  =  true   do 
      t_status = tonumber( getParamEx 2( "TQBR" ,ticker,  "TRADINGSTATUS" ).param_value)  -- текущий статус 
       if  status~ = t_status  then   -- изменение статуса сессии 
         status = t_status
          if  status =  =  3   or  status =  =  1   then 
             if   not  ds  or  type(ds)~ =  "table"   then 
               ds,error_desc =  CreateDataSource ( "TQBR" , ticker, INTERVAL_TICK)
                if  error_desc~ =  nil   and  error_desc~ =  ""   then   message ( " Source error==>"   ..  error_desc)  end 
                local  nn =  0 
                while  ds: Size () <  5   and  nn <  100   do 
                sleep ( 100 ) nn = nn +  1 
                end 
               ds: SetEmptyCallback ()
                message ( os.date ( " %X" ) .. " Ready. Session status:" .. tostring(status) .. " Data size:" .. tostring(ds: Size ()))
             end 
             while  n <  10   and  status =  =  1   do 
                local  size = ds: Size ()
                if  size~ = old_size  then 
                   message (tostring(n) ..  os.date ( " %X" ) .. " Get data. Session status:" .. tostring(status) .. " Data size:" .. tostring(ds: Size ()))
                  old_size = size
                  n = n +  1 
                end 
                sleep ( 50 )
             end 
          end 
       end 
       sleep ( 100 )
    end 
 end 
  
Ничего не изменилось, данные поступают только  после перезапуска скрипта.
подтверждаю, проверялось много раз и не только мною.
Обезличенные сделки. Подписка/отписка
 
Цитата
Kolossi написал:
Цитата
nikolz написал:
То что тики подписываются со второго пинка было указано давно,
но воз и ныне там.
Наткнулся на интересную фишку: если тики не едут после подписки при открытой сессии, то подписка на другой тикер даже в другом скрипте толкает все подписки и они приходят в чувство.
именно в другом скрипте, либо перезапуск этого же, что как бы запуск другого скрипта.
автоматическая выгрузка котировок по заданному времени
 
Цитата
whoisit написал:
Приветствую. Ищу решение для следующей задачи:

- нужно регулярно выкачивать таблицу Текущих торгов из Квика в определенное время в эксель, сохранять в новый файл, рассылать файл по почте

Есть (очень) базовое понимание, что это можно сделать на питоне, но опыта ноль, подскажите что/где почитать :)
Если используете Excel, то проще использовать VBA.
https://vbaplanet.com/appexcel.php
Обезличенные сделки. Подписка/отписка
 
То что тики подписываются со второго пинка было указано давно,
но воз и ныне там.
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
Насколько я понял, lua_tonumber и lua_tointeger это одно и то же и ничего она не преобразовывает, просто переписывает с вершины стека в заданную переменную 8 байтов?

И ещё хотел спросить: неужели с рублями и копейками работают в формате double? В этом случае при расчётах может накапливаться ошибка. Как я помню, в фин. расчётах рубли и копейки хранили в виде строк, напр. "123.456000".
lua_tonumber и lua_tointeger  в версиях от 5.3 - это разные форматы.  double и long.
Кто-то пробовал запускать Квик на планшете?
 
можно взять WebQUIK.
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
Цитата
TGB написал:
От себя добавлю: возможно, для вас окажется полезным сайт   https://quikluacsharp.ru/  
Кстати, хотел найти работающий пример для разбора таблиц в длл, взял с этого сайта код quikluacsharp.ru/qlua-c-cpp-csharp/primer-realizatsii-funktsii-obratnogo-vyzova-onalltrade-vnutri-dll/
а там полная ерунда: вместо lua_pushcfunction написано lua_pushcclosure. Да и luaL_openlib уже устарела и здесь не нужен также и новый её вариант для луа 5.4. Потерял много времени...
Пример есть в документации по Lua
https://www.lua.org/manual/5.4/manual.html
Возможные "стратегии" для торговых программ
 
Цитата
Serge123 написал:
Я освоил qlua + dll на C, теперь хочется попробовать написать торг. программку, чтобы посмотреть, на её работу. Имеются какие-то дармовые "торговые роботы" и их заготовки, которые транслятор не хочет транслировать (и есть раздутые до безобразия горы кода в районе гитхаба), не хочется тратить время, чтобы их понять, они, по-моему, делаются по принципу "на, тебе, боже, что мне негоже", а платные "роботы" - по принципу "на, тебе, платного, боже, что мне негоже". К примеру, в этой ветке кто-то опубликовал "нейросеть на луа", при этом из диалога непонятно, что это такое и стоит ли на это тратить время.

У меня пока возле головы вертятся такие возможные "стратегии" для программы:
- слежение за массой всякой макулатуры и определение начала роста цены, покупка на деньги, которые не жалко, и определение, когда это лучше продать;
- определение в начале торгов, что с какой-то радости начнут покупать/продавать, и воспользоваться этим, пока цена не ушла далеко;
- ловля кратковременной просадки цены, когда происходит крупная продажа (напр., кто-то хочет выйти из какой-то бумаги, перевести деньги в доллары и слинять из этой страны, пока не поздно).

Кто-то может подсказать (хотя бы в приват) что-то стоящее "отцу русской демократии", чьи пенсии летят по  * , коптят, и потом где-то взрываются склады террористов?..
Возможно ответ на эти вопросы поможет Вам:
1) Почему стратегии, описанные в популярных книжках Гуру рынков никем не повторены.
2) Почему победители "Голодных игр" так и остаются там, а не играют в реальности.
3) Почему удачными игроками являются лишь те, кто играет на чужие деньги или учит играть буратин.  
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Надо обрабатывать как Reset, т е аналогично начальному соединению с сервером.  Можно при этом учитывать учитывать принятые данные, чтобы не грузить все.  Ситуация штатная. Ошибка, если не реализована обработка такого события.
Сравнение языков программирования
 
Немного о новом языке Terra на основе Lua
---------------------
Мы используем популярный скриптовый язык Lua для поэтапного выполнения нового низкоуровневого языка Terra. Пользователи могут реализовать оптимизацию на языке высокого уровня и использовать встроенные конструкции для генерации и выполнения высокопроизводительного кода Terra.
Для упрощения метапрограммирования Lua и Terra используют одну и ту же лексическую среду, но для обеспечения производительности код Terra может выполняться независимо от среды выполнения Lua.
Мы оцениваем наш дизайн, полностью переосмысливая существующие многоязычные системы в Terra.
Наш автонастройщик на базе Terra для подпрограмм BLAS выполняет в пределах 20% от ATLAS, а наш DSL для трафаретных вычислений выполняется в 2,3 раза быстрее, чем рукописный C.
-------------------------
Мы представляем экзотипы, определяемые пользователем типы, которые сочетают гибкость метаобъектных протоколов в динамически типизированных языках с контролем производительности языков низкого уровня. Подобно объектам в динамических языках, экзотипы определяются программно во время выполнения, позволяя вести себя на основе внешних данных, таких как схема базы данных. Для достижения высокой производительности мы используем поэтапное программирование для определения поведения экзотипа на этапе компиляции во время выполнения и реализуем экзотипы на Terra, низкоуровневом поэтапном языке программирования.

Мы покажем, как конструкторы exotype создают и используют exotypes для реализации высокопроизводительных библиотек для сериализации, динамической сборки, автоматического дифференцирования и вероятностного программирования. Каждый экзотип обеспечивает выразительность, аналогичную библиотекам, написанным на языках с динамической типизацией, но реализует оптимизации, которые превосходят производительность существующих библиотек, написанных на низкоуровневых языках со статической типизацией. Хотя каждая реализация значительно короче, наша библиотека сериализации в 11 раз быстрее, чем Kryo, а наш динамический ассемблер в 3-20 раз быстрее, чем ассемблер Chrome от Google.

Сравнение языков программирования
 
Цитата
Cyber написал:
LuaJIT это ваша разработка?
И какой от него смысл, если тормозит сам квик?
JIT компиляция это современные методы оптимизации скриптов во время их выполнения.
Именно это и позволяет ускорить выполнения скрипта на порядок.
Про luaJit можете посмотреть здесь:  
https://luajit.org/ext_ffi_semantics.html#callback
-------------------------  
Смысл в том, что в текущей реализации QUIK Lua  обработка сделок по инструментам происходит последовательно.
------------------------
Тормозит отображение графиков и таблиц, вычисление индикаторов на луа  и последовательная обработка колбеков.
---------------
Вот эти тормоза и убираются путем создания многопоточной обработки на основе jit компиляторов.
Если у Вас n ядер, то потенциально можно ускорить вычисления примерно в 10*n раз.
===============  
Разные точки на графиках - это различные тесты, на которых тестировались языки.
Вот их список:


.
Сравнение языков программирования
 
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
Цитата
swerg написал:
Хотя, если честно, я бы рекомендовал писать и отлаживать алгоритмы на Lua. Это намного проще. И только если будут выявляться какие-то узкие места в производительности - что-то выносить в dll.
А что вы скажете об этих рассуждениях о qlua, которые я только что увидел на  smart-lab.ru/blog/922044.php  
===
Каждого, кто собирается программировать на QLua, должен сильно волновать ответ на следующий вопрос: стоит ли изучать Lua или воспользоваться некоей библиотекой (как пример QuikSharp + QuikPy) и в дальнейшем писать свои программы на другом ( скажем мягко — менее экзотическом) языке (Python, C#, С++ и т.п.).
Когда разработчики Квика встраивали Луа в  Квик, это был (Луа 5.1 х32) популярный язык с огромным количеством всяких разных библиотек, компилятором (LuaJIT), своим менеджером пакетов и большим комьюнити. Потом прошло некоторое количество времени, Луа в Квике изменился на Луа 5.4 х64 и все достоинства его превратились в тыкву. Оказалось, что это практически умирающий ( утопающий) язык, поддержка которого — дело рук самих утопающих. Кто-то успел ухватить тренд и быстренько переписал все на Python и остался конкурентноспособен ( хороший пример Torch -> PyTorch ), кто-то все проспал и утонул (ну или еще пока барахтается).
В связи с выше сказанным, очень хотелось бы выяснить, так сказать на берегу, стоит ли свеч QLua, или можно построить такого же стабильного и быстрого робота на другом языке.
===
Простых алгоритмов или несколько роботов запустить, это всё будет вполне устойчиво работать. Что-то более сложное (сотни стратегий торговых, постоянная оптимизация под рынок, с оперативным управлением и ротацией роботов) действительно пишутся уже в связке или полностью на других языках.
===
см басню Крылова "Лиса и виноград"
---------------------
QLua - это не язык программирования, а библиотека написанная на СИ  с интерфейсом VMLua для взаимодействия с терминалом QUIK.

Lua как и Питон - скриптовый язык. И не существует железа, которое может исполнять непосредственно байт-код.
Байт-код всегда исполняется функциями на СИ.
------------------
Никто не мешает писать на Питон, если Вам это нравиться.
Но Питон - это тормоз еще тот.
--------------
Что же касается Torch, то там еще прикольнее, так как все библиотеки линейной алгебры (BLAS) написаны на фортране.
==============  
Для справки еще есть LuaJit и Terra , в которых реализованы параллельные вычисления.
 
Примеры dll на GCC 64 для работы со скриптом
 
Я собираю dll для любых версий луа, в том числе и с использованием AVX2 на Pelles С for Windows.
Для сборки на СИ под виндой это лучшее.  
Друзья, как полностью очистить массив в LUA ? Команда my_array={} не помогает
 
А что означает "очистить массив"?
Какие последствия ожидаются?
Присвоение nil  - это всего лишь  запись 0 в переменную типа.
Вывод через DDE-сервер, Вывод через DDE-сервер
 
существенно ускорить вывод можно лишь отказавшись от отображения графиков и таблиц.
Вывод через DDE-сервер, Вывод через DDE-сервер
 
Про вывод стакана через DDE - это моя ошибка.
Все таблицы выводятся через DDE.
Вывод через DDE-сервер, Вывод через DDE-сервер
 
Цитата
Рустам написал:
Стакан DDE выводит на отлично. Как дополняешь другими так ж..а полная.
 
Параметры загрузки при таблице текущие торги со всеми акциями(248) и 20 стаканов
У Вас 20 стаканов и 70% загрузки процессора.   для 200 стаканов загрузка будет очевидно 700%
т е надо еще 10 таких компов.
Вы фактически получили предел. и при этом полагаю тормоза обязательно будут.
------------------------  
У Вас Excel грузит процессор как QUIK.  Если откажитесь от Excel, то в КВИКЕ сможете еще стаканов 30 открыть полагаю.
Попробуйте открыть стаканов 50  и посмотреть загрузку.
Будет понятен предел.
 
Вывод через DDE-сервер, Вывод через DDE-сервер
 
Цитата
Рустам написал:
Добрый день ребята! Подскажите как ускорить поток данных через DDE-сервер? Мне нужен для таблицы текущие торги и на пару сотен стаканов. В экселе данные таблицы текущие торги запаздывают и показывают совсем другие в отличие от квика. Даже в начале вечерней сессии показываются данные основной сессии. Как установить чтобы была актуальная информация?
Про пару сотен стаканов можете скорее всего просто забыть.
--------------------------
Вывод по DDE   должен работать без проблем и доп настроек.
У Вас что-то не так. Но подсказать Вам невозможно без доп информации.
-------------------------
Покажите как Вы подключаете вывод таблицы в Excel.
-------------------------  
DDE сервер стаканы не выводит.
-------------------------
Возможно из за такого количества открытых стаканов у Вас просто тормозится процессор.
---------------------------------
Посмотрите в диспетчере задач  загрузку процессора и использование памяти и покажите картинки.
SetUpdateCallback и обнудение стека Lua
 
Цитата
Quikos_1 написал:
Цитата
nikolz написал:
все верно, в стеке ее нет, так как колбек вызывает QUIK .
А в момент вызова в стеке может быть все что угодно - т е то что делает VMLua в данный момент.
При выходе из функции стек всегда очищается.
Надо иначе передавать таблицу.
А как тогда можно передать таблицу ? Я же не могу ее куда то скопировать. Я должен же работать со стеком Lua, причем с тем стеком, который первоначально создал Quik.
Я покажу Вам фрагмент моего скрипта. Подробно объяснять лень.
Но из собственного опыта могу сказать что для тиков это плохая затея. Тормоз ужасный. Кроме того тиков есть уже колбек OnAllTrade и лучше него вы не сделаете.
У меня есть различные варианты, вот один из фрагментов:
Код
while d==nil and k>0 do d,err=CreateDataSource(clas,sec,m); sleep(1); k=k-1; end
    if d then  --d[1]=sec; d[2]=clas; d[3]=ts; d[3]=tc; d[4]=m; d[1]
   --   if m>0 then  d:SetUpdateCallback(function(index) cbCandle(index,d);end);
--   else
   d[1]=0;      d:SetEmptyCallback() ;
--   end
   ds[j]=d;
   end
      ds[0]=j;
 
Программирование скриптов
 
Цитата
Nikita Kalashnikov написал:
nikolz, здравствуйте!
Цитата
Реализацию скриптов вне зависимости от версии Lua
К сожалению, регистрация пожелания с данной формулировкой невозможна. Уточните, возможно Вас интересует поддержка какой-то определённой версии языка?

Цитата
Очереди к  потокам
Уточните, пожалуйста, что Вы подразумеваете под очередями к потокам?
Добрый день,
относительно разных версий VMLua.
Полагаю из примера будет понятно как я это делаю . Это тест для создания VMLua в отдельном потоке :
Код
local fdll_Terra="D:/terra/bin/terra.dll"
local fdll_Lua51="D:/terra/bin/Lua51.dll"
local fdll_Luajit="D:/Luajit210/libLuajit.dll"
local fdll_Lua53="D:/Lua53/Lua53.dll"
local fdll_Lua54="D:/Lua54/Lua54.dll"
local nev="event"
local ev=nkevent.Create(nev,1);
local ts={}; ts[0]=0;
local pD="D:/QUIK_SCRIPT/"    -- каталог скрипта
local pf="testTH.lua"       -- имя и расширение файла скрипта 
local pfT="testTT.lua"       -- имя и расширение файла скрипта
local pfJ="testTJ.jit"       -- имя и расширение файла скрипта
local pfX="testTX.lua"       -- имя и расширение файла скрипта
--local sL1=nkvm.cSX(fdll_Lua54,pD,pfX);  
local sL1=nkvm.cSJ(fdll_Luajit,pD,pfJ); 
local sL1=nkvm.cST(fdll_Lua51,pD,pfT);
local sL1=nkvm.cSL(pD,pf); --создать state
--os.exit()
Про очереди к потокам...
У Вас в документации есть хороший пример (но по-моему его мало кто смотрит) как организовать очередь вызовов main из колбеков
Но у Вас всего один поток main для скрипта.
В моем варианте число потоков любое, причем это не дочки, как у Вас, а самостоятельные потоки. Проблема дочек в том, что у них мало ресурсов и они блокируют глобальный стек основного потока VM Lua колбеков.
-------------------
Создание очередей требует определенного уровня знаний пользователя. А ваши пользователи в основном чайники в программировании.
Вот я и предлагаю облегчить им жизнь и реализовать механизм очередей в библиотеке QLUA, А можно и сразу встроить в шаблон скрипта.
SetUpdateCallback и обнудение стека Lua
 
Я не использую API C для подписке на источник данных и делаю это на луа.
Это проще. А так как подписка один раз то и смысла нет использовать С.
SetUpdateCallback и обнудение стека Lua
 
все верно, в стеке ее нет, так как колбек вызывает QUIK .
А в момент вызова в стеке может быть все что угодно - т е то что делает VMLua в данный момент.
При выходе из функции стек всегда очищается.
Надо иначе передавать таблицу.
 
Учусь работать с метками, Помощь в написании кода для выставлении меток на графике
 
Цитата
Виталий Дерягина написал:
Знающие программисты, всю голову сломал в поиске ошибки в написании кода или логики выполнения. Своих вариантов уже нет нужен свежий взгляд на проблему.

Пытаюсь вывести полученное значение в метке.
Рекомендую сделать так:
Далее привожу фрагменты из своего рабочего скрипта :
Сделайте шаблон метки, например так:
Код
local label_mes={["TEXT"]="",["IMAGE_PATH"]="",["ALIGNMENT"]="LEFT",["YVALUE"]=0,["DATE"]=0,["TIME"]=0,["R"]=255,["G"]=255,["B"]=255,
["TRANSPARENCY"]=0,["TRANSPARENT_BACKGROUND"]=0,["FONT_FACE_NAME"]='Times New Roman',["FONT_HEIGHT"]=18,["HINT"]=""}
В скрипте заполняете поля дату и значение и выводите метку на индикатор например так:
Код
label_mes.DATE=YYYYMMDD;  label_mes.HINT=tostring(tostring(buy).."/"..tostring(sell));
LabMes=AddLabel(Settings.tag,label_mes);
Беспрерывная робота робота, Как сделать так, чтобы робот был постоянно в работе и обрабатывал каждый тик?
 
Цитата
Вася написал:
Цитата
nikolz написал:
 
Цитата
Никита  написал:
Друзья, я только начинаю программировать на языке Lua. Начал разбираться и писать бота, но возник затык. Я запускаю 1 раз программу и хочу обрабатывать каждый тик после этого. Если новый тик соответствует заданным мной условиям, то бот совершает определённые действия (покупка-продажа). Как сделать так, чтобы робот был постоянно в работе и обрабатывал каждый тик? Если возможно, то с примером куска кода

Заранее спасибо всем неравнодушным!  
 1) изучите программирование на Lua  
 https://russianblogs.com/article/84611423964/  
----------------------------
2)  Изучите документацию по QLUA.и примеры в документации.
------------------------------------
3) Если останутся вопросы, то спросите.
Вот ты дятел, человек как раз и изучает, а раз спрашивает, значит, не очень понятно в документации. Вали отсюда, если нормально не можешь отвечать людям.
Вася, ты мудак?
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Предположу, следующее.
Согласно документации :
В Lua существует восемь базовых типов: nil, boolean, number, string, function, userdata, thread и table.
-----------------
Только параметры последних 4 типов позволяют ссылаться на них через указатели.
-------------------------
Очевидно автор  все переменные типа number, string записывает как таблицы.
------------------------
Такой прием используется для создание в луа новых типов с новыми свойствами,
например вектора, матрицы и т д
Вдруг откуда ни возьмись, появилась ...Проблема с индикатором
 
Добрый день
Вопрос разработчикам.
---------------
Версия 8.7 Рабочая
-----------------
При очередном запуске  QUIK на графике исчезли все данные индикатора( отображалось 38 параметров), который установлен в квике  почти год  назад и работал до сегодня.
--------------------
При открытии редактирования, индикатор в окне редактирования есть .
------------------------------
В таблице  "Добавить индикатор"  - индикатора нет.
-------------------------------
При запуске QUIK никаких сообщений об ошибке в индикаторе нет.
--------------------
Каким образом обнаружить причину отсутствия индикатора на графике и в таблице "Добавить индикатор"  
Программирование скриптов
 
Добрый день,
Реализовал для себя,
предлагаю реализовать в QUIK для все пользователей.
-----------------
1) Запуск  произвольного количества скриптов, каждый  в отдельном потоке.  
--------------------------
2)  Реализацию скриптов вне зависимости от версии Lua,
а также  на языках LuaJit,Terra, Julia.
-----------------------
3) Очереди к  потокам
-------------------------
4) Передача данных между скриптами.
 
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
Спасибо, тов. swerg, за наше счастливое детство, меня сейчас интересует обмен данными между луа скриптом и длл на си.
Кстати, вчера я запустил в квике ваш пример луа скрипта из 1-го поста:  https://quik2dde.ru/viewtopic.php?id=329  Получил сообщение "C stack overflow". Может быть, с 2020 г. что-то поменялось в квике?
покажите Ваш пример на C с ошибкой, исправлю.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
https://en.wikipedia.org/wiki/Fisher_transformation
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 71 След.
Наверх