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

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

Страницы: Пред. 1 ... 9 10 11 12 13 14 15 16 17 18 19 ... 78 След.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
А это результат на сегодня.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Glukator написал:
Цитата
nikolz написал:
Хвалюсь.
------------------------------
Сегодня мой робот на сбере показал такую картинку с начала года.
 

Т е c 3.01.2024 профит   2.44%, из них 1.72 - лонг и 0.72 -шорт.
Стратегия "купил и держи" дала бы  1%.  
Чем тут хвалиться? Этой уродливой картинкой, по которой единственное, что можно понять, - что она опасна для глаз смотрящего?
У меня цыгане на соседней улице живут, так вот от их шмоток в глазах меньше рябит.
Это Ваша проблема. Сочувствую.
Ограничения при использовании QuikSharp.lua
 
Цитата
bespalex написал:
Цитата
nikolz написал:
 
Цитата
bespalex  написал:
QuikPy
 Если умеете программировать на луа и питон, то делаете обмен данными между приложением на питон и приложением на Луа. Либо ищите такой скрипт.
КВИК вообще при этом не требуется.
Потом скрипт луа для обмена запускаете в КВИК.
Не очень понял, т.к. QuikPy это и делает. Он работает на питоне в связке с QuikSharp, который запущен в QUIK. Вот между ними связь и теряется периодически.  
В документации QuikPy написано:
------------------
Возможные ошибки
  1. Если возникают ошибки, связанные с core.dll, то все варианты этой библиотеки выложены в проекте QUIKSharp
  2. Путем перебора подбираете подходящую для вас версию core.dll
  3. Если возникают ошибки при исполнении LUA скриптов, то, возможно, были обновления в QUIK или LUA. Последняя версия LUA скриптов находится  Они не учитывают мои специфические правки, но должны работать без ошибок с последней версией QUIK.
Успешного перебора.
Cкорость обмена данными через файлы
 
Добрый день,
Эта тема в основном для начинающих строителей роботов.
--------------------------
На вопрос  как сохранить или как передать данные в другой скрипт и приложение,
я рекомендую начать с обмена через файлы.
--------------------
Как правило в ответ получаю - через файлы - это медленно.
На вопрос -откуда Вы это знаете -обычно ответа нет.
----------------
Аналогичный вопрос возникает при попытке передать данные из одного приложения в другое.
---------------
Тем кто,  знает С for Lua, рекомендую mapping files, как самый универсальный и быстрый способ обмена,
если Вас не устраивает обычный обмен через файлы.
---------------
В этой теме я покажу как "медленно" реализуется обмен через файлы.
===============
Тест обмена через файлы в одном приложении.
-------------------
Написал вот такой тест:
Код
pD ="D:/QUIK_SCRIPT/nk_bot/Data/"
fn=pD..name..".log";  Log=io.open(fn,"w");
pDA ="D:/QUIK_SCRIPT/nk_bot/DataA/"
fnA=pDA..name..".log"; LogA=io.open(fnA,"w");
--------------------
local nF=nkevent.ccf(fn);
local nFA=nkevent.ccf(fnA);
local _,_,dHMS1=nkvm.D();
for j=1,100 do
     local _,_,dHMS=nkvm.D(); d=(1000000.*(dHMS-dHMS1))//1;
    Log:write(j..","..dHMS..","..d.."\n");Log:flush();
    while true do
   if nkevent.wcf(nF) then  dHMS1=dHMS; local  C=Log; Log=LogA; LogA=C; local x=nF; nF=nFA; nFA=x  break; end
   end
end
Что он делает?
Создаем на диске два каталога Data и DataA до запуска скрипта.
Скрипт открывает  в каждом из каталогов файл test.log.
-------------------
Далее в цикле 100 раз производится
запись с нечетным j в файл в Каталоге Data.
При обнаружении записи в файл , производим запись в файл в каталоге DataA по четным значениям j.
------------------
Таким образом, в файл каталога Data записываются ответы на запись в файл каталога DataA и наоборот.
---------------------
Каждая запись содержит значения j, текущее время и  задержку обнаружения записи в очередной файл.

Результат  Data/test.log:
Код
1,151047.6863891,790.0
3,151047.6865335,61.0
5,151047.6865586,10.0
7,151047.6865764,8.0
9,151047.6865931,8.0
11,151047.6866097,8.0
13,151047.6866333,15.0
15,151047.6866505,8.0
17,151047.6866669,8.0
19,151047.686683,8.0
21,151047.6866992,8.0
23,151047.6867155,8.0
25,151047.6867317,8.0
27,151047.6867478,8.0
29,151047.6867637,7.0
31,151047.6867809,8.0
33,151047.6867971,8.0
35,151047.6868131,8.0
37,151047.6868292,8.0
39,151047.6868453,8.0
41,151047.6868614,8.0
43,151047.6868775,8.0
45,151047.6868937,8.0
47,151047.6869098,8.0
49,151047.686926,8.0
51,151047.6869421,8.0
53,151047.6869583,8.0
55,151047.6869748,8.0
57,151047.6869909,8.0
59,151047.6870071,8.0
61,151047.687025,8.0
63,151047.6870415,8.0
65,151047.687059,8.0
67,151047.6870752,8.0
69,151047.6870911,8.0
71,151047.6871073,8.0
73,151047.6871234,8.0
75,151047.6871394,8.0
77,151047.6871554,8.0
79,151047.6871715,8.0
81,151047.6871876,8.0
83,151047.6872036,8.0
85,151047.6872198,8.0
87,151047.687236,8.0
89,151047.6872521,8.0
91,151047.6872683,8.0
93,151047.6872844,8.0
95,151047.6873004,8.0
97,151047.6873165,8.0
99,151047.6873325,8.0
Результат  DataA/test.log:
Код
2,151047.6864724,83.0
4,151047.6865484,14.0
6,151047.6865676,9.0
8,151047.6865849,8.0
10,151047.6866013,8.0
12,151047.6866179,8.0
14,151047.686642,8.0
16,151047.6866586,8.0
18,151047.6866749,8.0
20,151047.6866911,8.0
22,151047.6867072,7.0
24,151047.6867237,8.0
26,151047.6867397,8.0
28,151047.6867558,8.0
30,151047.6867727,8.0
32,151047.686789,8.0
34,151047.686805,7.0
36,151047.6868212,8.0
38,151047.6868372,7.0
40,151047.6868533,8.0
42,151047.6868695,8.0
44,151047.6868856,8.0
46,151047.6869017,8.0
48,151047.6869179,8.0
50,151047.686934,8.0
52,151047.6869502,8.0
54,151047.6869665,8.0
56,151047.6869828,8.0
58,151047.686999,8.0
60,151047.6870167,9.0
62,151047.6870333,8.0
64,151047.6870509,9.0
66,151047.687067,8.0
68,151047.6870831,7.0
70,151047.6870991,8.0
72,151047.6871153,8.0
74,151047.6871314,7.0
76,151047.6871474,8.0
78,151047.6871635,8.0
80,151047.6871795,8.0
82,151047.6871956,8.0
84,151047.6872116,7.0
86,151047.6872278,8.0
88,151047.687244,8.0
90,151047.68726,7.0
92,151047.6872763,8.0
94,151047.6872924,8.0
96,151047.6873085,8.0
98,151047.6873245,8.0
100,151047.6873405,8.0
Самое смешное то ,
что задержка измеряется в мкс
и составляет в среднем не более  10 . т.е. 0.000001 сек.
-------------------------
Это медленно?  
Запаздывание тиков
 
Добрый день,
Вопрос к разработчикам.
Можете объяснить, почему на учебном сервере тики приходят с запаздыванием от 500 до 1700 ms.
При этом задержка обмена по интернет не более 30 ms.
Задержка обработка колбека не более 0.1 ms
Вот результаты теста
строки с первым числом 2 - это обработка колбека onAllTrade.
Последнее число в строке(zT) - это задержка в ms
Я понимаю, что это учебный сервер, но у всего есть причина.
Хотелось бы понять и простить.
Код
4; 0.2, 22.6,AMEZ, 108,Ntpm=0
2,1.4; 163; MTLR,zT=712.0
2,0.2; 37; SBER,zT=712.0
2,0.1; 56; NKNC,zT=712.0
2,0.1; 27; MTSS,zT=712.0
2,0.1; 42; MTSS,zT=712.0
2,0.1; 24; MTSS,zT=712.0
2,0.1; 42; KAZT,zT=712.0
2,0.1; 31; VSMO,zT=712.0
2,0.1; 22; VSMO,zT=712.0
2,0.2; 25; TCSG,zT=1712.0
2,0.1; 20; TCSG,zT=1712.0
2,0.1; 26; TCSG,zT=1712.0
2,0.1; 30; TCSG,zT=1712.0
2,0.2; 23; TCSG,zT=1712.0
2,0.1; 24; MTLR,zT=1712.0
2,0.1; 34; SPBE,zT=1712.0
2,0.2; 41; SPBE,zT=1711.0
2,0.1; 25; SPBE,zT=1711.0
2,0.2; 32; SPBE,zT=1711.0
2,0.1; 41; BSPB,zT=1711.0
2,0.1; 25; BSPB,zT=1711.0
14; 0.2, 260.5,VSMO, 108,Ntpm=12
14; 0.2, 24.0,VKCO, 108,Ntpm=11
14; 0.2, 18.4,TCSG, 108,Ntpm=10
14; 0.2, 27.1,SPBE, 108,Ntpm=9
14; 0.1, 22.7,SGZH, 108,Ntpm=8
14; 0.2, 15.5,SBER, 108,Ntpm=7
14; 0.2, 15.3,ROSN, 108,Ntpm=6
14; 0.2, 154658.2,NKNC, 109,Ntpm=5
14; 0.4, 23.9,MTSS, 109,Ntpm=4
14; 0.3, 110.0,MTLR, 109,Ntpm=3
14; 0.2, 21.5,KMAZ, 109,Ntpm=2
14; 0.1, 150429.8,KAZT, 110,Ntpm=1
14; 0.4, 29.6,BSPB, 110,Ntpm=0
2,1.2; 179; SBER,zT=777.0
2,0.2; 30; SBER,zT=777.0
2,0.2; 23; SBER,zT=777.0
2,0.2; 23; SBER,zT=777.0
2,0.1; 23; SBER,zT=777.0
2,0.1; 21; SBER,zT=777.0
2,0.1; 22; SBER,zT=777.0
2,0.1; 24; SBER,zT=777.0
2,0.1; 27; SBER,zT=777.0
2,0.2; 44; SBER,zT=776.0
2,0.1; 22; SBER,zT=776.0
2,0.2; 21; SBER,zT=776.0
2,0.2; 22; SBER,zT=776.0
2,0.2; 22; SBER,zT=776.0
2,0.1; 22; SBER,zT=776.0
2,0.1; 19; SBER,zT=776.0
2,0.2; 20; SBER,zT=776.0
2,0.1; 22; SBER,zT=776.0
2,0.1; 21; SBER,zT=776.0
2,0.1; 38; SBER,zT=776.0
Ограничения при использовании QuikSharp.lua
 
Цитата
bespalex написал:
QuikPy
Если умеете программировать на луа и питон, то делаете обмен данными между приложением на питон и приложением на Луа. Либо ищите такой скрипт.
КВИК вообще при этом не требуется.
Потом скрипт луа для обмена запускаете в КВИК.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Хвалюсь.
------------------------------
Сегодня мой робот на сбере показал такую картинку с начала года.


Т е c 3.01.2024 профит   2.44%, из них 1.72 - лонг и 0.72 -шорт.
Стратегия "купил и держи" дала бы  1%.  
Тест времени подключения источников данных
 
Добрый день,
По просьбе разработчиков
https://forum.quik.ru/messages/forum10/message73569/topic8440/#message73569
выкладываю для общего пользования
свой тест измерения времени подключения источников данных.
Так как ранее использовался очень большой скрипт,
то пришлось написать специально тест для общего пользования.
-------------------
В тесте используется два таймера.
Один - мой на основе высокоточного счетчика OC на СИ. Выкладывал его на форуме.  Его квант 0.1мкс.
Второй - на основе socket. Для исключения сомнения в измерениях. Его квант 1 мс.
-------------------
Начинающие писатели роботов, можете позаимствовать мое решение организации очереди.
Код
--тест скорости подключения источников данных -автор nikolz
name="testnk"
paths = "D:/nkarray/"
package.cpath =paths.."?.dll";
require "nkarray"
p2 = "D:/luasocket/"
package.cpath =package.cpath ..";"..p2.."?.dll";
package.path =package.path..p2.."?.lua;"
socket = require("socket")
path = "D:\\QUIK_SCRIPT\\nk_bot\\"
Log=io.open(path..name..".log","w")
Ntp=0;    tp={}
local ds_int={INTERVAL_M1,INTERVAL_M5,INTERVAL_M30,INTERVAL_TICK};
function main()
   local t,int,tms,t1;
     while true do
      while Ntp>0 do
         t=tp[Ntp]; Ntp=Ntp-1 clas=t[1] sec=t[2]
         for i=1,#ds_int do ds={}
            t2=socket.gettime()*1000.
            nklib.startB();
            int=ds_int[i];
            local d,err; while d==nil do d,err=CreateDataSource(clas,sec,int); end
            d:SetEmptyCallback();
            t1=0.01*nklib.stopB();
            tms=(socket.gettime()*1000.-t2)//1
            Log:write("interval="..int..",sec="..tostring(sec)..",tnk="..t1.."мкс, tsocet="..(tms).."мc\n");Log:flush();
         end
      end
      sleep(1);
   end
end

function OnInit(pfile)  fconnect=isConnected(); end
function OnParam(c,s) Ntp=Ntp+1;    tp[Ntp]={c,s}; end
Это результаты работы теста на моем компе:
Код
interval=1,sec=VTBR,tnk=39.41мкс, tsocet=0.0мc
interval=5,sec=VTBR,tnk=20.17мкс, tsocet=0.0мc
interval=30,sec=VTBR,tnk=17.82мкс, tsocet=0.0мc
interval=0,sec=VTBR,tnk=13072.46мкс, tsocet=130.0мc

interval=1,sec=VSMO,tnk=57.81мкс, tsocet=0.0мc
interval=5,sec=VSMO,tnk=21.82мкс, tsocet=0.0мc
interval=30,sec=VSMO,tnk=21.73мкс, tsocet=0.0мc
interval=0,sec=VSMO,tnk=13581.32мкс, tsocet=135.0мc

interval=1,sec=UGLD,tnk=57.16мкс, tsocet=0.0мc
interval=5,sec=UGLD,tnk=25.99мкс, tsocet=0.0мc
interval=30,sec=UGLD,tnk=26.66мкс, tsocet=1.0мc
interval=0,sec=UGLD,tnk=12974.53мкс, tsocet=128.0мc

interval=1,sec=NMTP,tnk=57.63мкс, tsocet=0.0мc
interval=5,sec=NMTP,tnk=19.32мкс, tsocet=0.0мc
interval=30,sec=NMTP,tnk=17.54мкс, tsocet=0.0мc
interval=0,sec=NMTP,tnk=12912.37мкс, tsocet=129.0мc

interval=1,sec=VRSB,tnk=35.37мкс, tsocet=0.0мc
interval=5,sec=VRSB,tnk=27.25мкс, tsocet=0.0мc
interval=30,sec=VRSB,tnk=21.7мкс, tsocet=0.0мc
interval=0,sec=VRSB,tnk=12604.62мкс, tsocet=125.0мc

interval=1,sec=SIBN,tnk=34.2мкс, tsocet=0.0мc
interval=5,sec=SIBN,tnk=43.41мкс, tsocet=0.0мc
interval=30,sec=SIBN,tnk=18.91мкс, tsocet=0.0мc
interval=0,sec=SIBN,tnk=12793.29мкс, tsocet=127.0мc

Время подключения источников с интервалом 1,5,30 минут  составляет 30 мкс.
Время подключения тиков 12900 мкс. замедление в 400 раз.
==================
Демо сервер КВИК.
версия КВИК 11.1.0.45
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
nikolz, Наоборот прозрел, за скоростью не гоняюсь , тогда чем можно руководствоваться и как наилучшим (оптимальным) образом организовать память?
С памятью все просто.
-------------------
На диск надо писать лишь то, что хотите сохранить для истории и что не хранится в архивах КВИК.
Как правило - это результаты реальной торговли.  
Но и это можно не сохранять так как они есть в отчете брокера.
И только в отчете брокера Вы увидите что было реально.  
--------------------  
Кроме того, в отдельный файл можно записать исходные данные для торговли.  
Это позволяет не изменять их в скрипте.
-----------------  
Могу посоветовать следующее.
Написали что-то. Поставьте в начале блока N=os.clock()
и в конце time=os.clock()  -N  и выведите time в сообщение.   Вы узнаете сколько реально в секундах у вас выполняется этот блок. Если это разовый блок в начале запуска, то время вообще не колышет.
Если время вас устраивает, то забудьте про этот блок и пишите дальше.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
VPM,
Без обид, но Вы очевидно не представляете как реализована запись в файл в Винде. Если Вы часто читаете файл, то Вы читаете его из памяти, а не с диска. Поэтому разницы никакой нет. Да и вы же за скоростью не гонитесь.
Или что я упустил в Ваших рассуждениях?
Ограничения при использовании QuikSharp.lua
 
А зачем Вам QuikSharp? Его делали когда в КВИКЕ не было VMLua. В ту поры был смысл.
Сейчас смысла нет, кроме непонятных затыков.
Или я не прав?
Построение древа клиента
 
Цитата
Игорь Акименко написал:
Добрый день!

Коллеги, нужна помощь c lua. Не могу найти прямую зависимость.
То что хочу построить
firm_id (n1)
           - client_code (n1)
           ..........................
           - client_code (n)
                                      --trdaccid (n1)
                                      .....................
                                      --trdaccid (n)
firm_id (n)
           ..........................
           - client_code (n)
                                      .....................
                                      --trdaccid (n)


Есть ли зависимость такая? Как ее выстроить?

Проблема возникла из задачи определения кол-ва доступных стредств, если счет является " * -единый брокерский счет". Если я правильно понимаю сам факт проверки у нас есть через IsUcpClient.
Но возникает проблема когда к квику подключено несколько торговый счетов, фирма одна. При запросе лимитов при архитектуре древа, получается так что лимиты по деньгам дублируются, т.к. связь удалось выстроить только через фирму.

В целом реализацию делаю в питоне, посредством QuikSharp и библиотеки QuikPy. Но понять бы как это сделать на луа, можно бы было интерпретировать и в питоне.
Возможно кто то из вас уже реализовывал это и на самом питоне, буду очень признателен.
Есть. По таблицам и ключам с помощью функций для работы с произвольными таблицами.
Пишите и выкладывайте с конкретным вопросом.
Lua таблицу в файл и обратно
 
Преобразование таблицы Lua в строку, запись в файл и загрузка таблицы из файла в скрипт.
Код
function value2text(t,s)  --преобразование таблицы в скрипт
   local s1=""; --новое значение
   local n=string.len(s); local z=string.sub(s,n);
   local m= type(t);
   if m=="string" then
      s1='"'..tostring(t)..'"';  elseif m=="number" then s1=tonumber(t);  elseif t==nil then s1="nil";
   elseif m=="table" then local f;
      for j,v in pairs(t) do
         local x=v;
         if f then s1=s1.."," end  f=1;
         if  type(j)~="number" then    s1=s1..'\n["'..tostring(j)..'"]='; end
         s1=value2text(x,s1);
      end
      if z=='}' then s1='\n{'..s1..'}'; else s1='{'..s1..'}' end
   end
return s..s1;
end

--------------------  это пример вывода и загрузки с распечаткой значений из таблиц
local t2={6,7,8,9}
local t={1,2,3,4,5,"asd",t2}  -- это таблица которую выводим в файл
----------вывод в файл
local fn=p3.."test999.lua"
fLog=io.open(fn,"w"); fLog:write("t1="..value2text(t,"").."\n");fLog:flush()
fLog:close();
-----------ввод из файла
dofile(fn);
----------------прочитали таблицу из файла в таблицу t1
--теперь печатаем из введенной таблицы значения и сравниваем их со значениями в t2 и t
local t3=t1[7]
local s1=t1[6];
print(t1[1],s1,t3[3])

результат:
это содержимое файла test999.lua:
Код
t1={1,2,3,4,5,"asd",{6,7,8,9}}
это печать значений
Код
1   asd   8
Тормоз подключения тиков
 
Цитата
Nikolay написал:
Думается, что это проблема выбора реляционной базы для хранения данных (правда мой опыт обработки всех сделок, всех акций за 2016 год на MsSQL не вызывал каких-то проблем, кроме объема, но это год). Хотя организовать порционную подачу данных вполне можно. Заказали - начинают поступать данные. Если же сделано, что сначала все данные подготавливаются, кешируются и только потом выдаются всем объемом, то, наверно, это и приводит к таким задержкам. Плюс, видимо, у таких данных очень низкий приоритет, так что не во все пакеты попадают.  
Не понял, кто выбирает?
Тики вообще выдаются лишь за текущий день.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Цитата
nikolz написал:
если Вы записали в файл fT таблицу T так, как она записана в скрипте Lua, то просто загрузите этот файл в скрипттак:loadfile(fT)
Я вообще не понимаю в чем различие loadfile от load в каком случае чем пользоваться (может есть какие то критерии) ???
load - загрузка из переменной string
loadfile - загрузка из файла на диске
=======================
Выкладываю для вас решение для вывода таблицы в файл и загрузки таблицы из  файла в скрипт
Код
function value2text(t,s)  --преобразование таблицы в скрипт
   local s1=""; --новое значение
   local n=string.len(s); local z=string.sub(s,n);
   local m= type(t);
   if m=="string" then
      s1='"'..tostring(t)..'"';  elseif m=="number" then s1=tonumber(t);  elseif t==nil then s1="nil";
   elseif m=="table" then local f;
      for j,v in pairs(t) do
         local x=v;
         if f then s1=s1.."," end  f=1;
         if  type(j)~="number" then    s1=s1..'\n["'..tostring(j)..'"]='; end
         s1=value2text(x,s1);
      end
      if z=='}' then s1='\n{'..s1..'}'; else s1='{'..s1..'}' end
   end
 return s..s1;
end

--------------------  это пример вывода и загрузки с распечаткой значений из таблиц
local t2={6,7,8,9}
local t={1,2,3,4,5,"asd",t2}  -- это таблица которую выводим в файл
----------вывод в файл
local fn=p3.."test999.lua"
fLog=io.open(fn,"w"); fLog:write("t1="..value2text(t,"").."\n");fLog:flush()
fLog:close();
-----------ввод из файла
dofile(fn);
----------------прочитали таблицу из файла в таблицу t1
--теперь печатаем из введенной таблицы значения и сравниваем их со значениями в t2 и t
local t3=t1[7]
local s1=t1[6];
print(t1[1],s1,t3[3])

результат:
это содержимое файла test999.lua:
Код
t1={1,2,3,4,5,"asd",{6,7,8,9}}
это печать значений
Код
1   asd   8
Тормоз подключения тиков
 
Цитата
Anton Belonogov написал:
nikolz, добрый день.

Увеличенное время объясняется разницей в запрашиваемом объеме данных.
Вообще-то после выхода из функции CreateDataSource ничего не загружено.
----------------------------
Загружается после.
--------------------------------
А ежели тики, да еще внутри сессии, то грузится несколько минут.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Glukator,  Я этим пользовался в lua 5.1 при переходе на 5.4 перестало работать, вот смысл:
Цитата
Используем преобразование таблицы в  текстовое представление  и сохраняем на диске результаты. -- Сохранение таблицы или массива в файл
function table.save(tbl,filename)
  local f,err = io.open(filename,"w")
  if not f then
     return nil,err
  end
  f:write( table.tostring (tbl))
  f:close()
  return true
end
В результате на диске мы получим файл, в котором в терминах синтаксика языка Lua описана наша таблица. Зачем сохранять в синтаксисе Lua? Причин две:   универсальность
 элегантный способ чтения таблицы из файла
  Вот функция, читающая файл и возвращающая сохранённую в нем таблицу: -- Чтение таблицы из файла в массива или таблицу
function table.read(filename)
  local f,err = io.open(filename,"r")
  if not f then
     return nil,err
  end
  local tbl = assert(loadstring("return " .. f:read("*a")))
  f:close()
  return tbl()
end
Все просто - читаем файл и запускаем его на выполнение    Вот как это выглядит: table.save({11,22,33,{"gh",'jk'},44},"e:\\1.dat")    -- пишем
t = table.read("e:\\1.dat")                                 -- читаем
 https://bot4sale.ru/blog-menu/qlua/301-save-lua-table.html
если Вы записали в файл fT таблицу T так, как она записана в скрипте Lua, то просто загрузите этот файл в скрипт
так:
loadfile(fT)
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
У меня робот с начала года показал это:

стратегия "купил и держи " показала бы в этом случае  (275.28-273.5)/273.28 -ком=0.72%
У робота получилось переиграть эту стратегию =1.3%
--------------------
А это картинка за декабрь 2023



стратегия "купил и держи" показала бы   (273-276)/273= -1.5%
робот показал =32%
----------------------------  
Особо интересно то, что рынок при этом сменил тренд с падающего на растущий.
Сначала провалился на (276-255)/276=7.6%
Потом вырос на (273-255)/255=7%
Если сначала войти в шорт а потом в лонг, то получим всего 14.6%
----------------
Робот собрал на логах 15% и на шортах 17%.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
VPM,
Если не сложно, то скажите каким из перечисленных ниже индикаторов Джона Эхлерса Вы пользуетесь и какой результат получили?
  • Supersmoother
  • Roofing Filter
  • Even Better Sinewave
  • Decycler Oscillator
  • Autocorrelation Reversals
  • Adaptive Bandpass
  • Adaptive Bandpass Cube
  • Adaptive CCI
  • Adaptive RSI
  • Adaptive RSI Fischer
  • Adaptive Stochastic
  • Adaptive Stochastic Inverse Fischer
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Джон Эхлерс
Джон Эхлерс:

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

«Цифровая обработка сигналов» – это способ организации того, что находится внутри этого черного ящика. Это может быть нечто вроде RSI, или это может быть простая средняя. По сути, все сводится к вопросу: насколько сложным будет этот черный ящик? Другими словами, насколько сложным будет ваш фильтр данных?
---------------------
И еще одна заключительная мысль. Как показывает опыт, сфера трейдинга и технического анализа полна людей, которые заявляют, что они торгуют, следуя за своим гуру, или утверждают, что обладают неким секретом успеха или имеют безупречную систему, о которой никто не знает. Но трейдерам-новичкам я бы сказал, что в техническом анализе нет никаких секретов. Всё на самом деле довольно просто.

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

То есть он представляет собой комбинацию математики, статистики и психологии, но никаких секретов в реальности не существует. Так что не верьте людям, которые обещают вам огромное богатство практически за одну ночь – трейдинг так не работает. Не поддавайтесь на ложные обещания.

Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Владимир написал:
VPM, КАКОЙ график? Мой скрипт следит за 8 таймфреймами, и никакой график не даст столько информации. В любом случае, строить гипотезы как поведёт себя дядя Вася и на них строить собственную торговлю попахивает самоубийством. Мне плевать на проблемы всех "австралийских трейдеров", помноженных друг на друга - скрипт будет торговать теми инструментами и в тех направлениях, которые ОН САМ посчитает нужными. Вот прям ща, когда я это пишу, кто-то там "снял быстрым движение стопы забрав тем самым ликвидность  улучшил свою позицию" на одном из моих тикеров, скрипт тут же отреагировал, и рынок пошёл в нужном ЕМУ направлении. Надолго ли, не знаю (и знать не хочу), но свои полпроцента прибыли скрипт уже успел хапнуть примерно за 5 минут.
покажите картинку.
Смена типа заявки во время отправки
 
Цитата
pertifospi написал:
Цитата
nikolz написал:
Подобную идею реализуют HFT роботы,
но это не КВИК и дорого
Вероятно, не вижу где-то подвоха, но пока не понимаю почему это "дорого", если "API" квика поддерживает такую возможность. Вызвать несколько функций и передать пару десятков значений - не выглядит чем-то мудрёным.

Буду рад, если всё-таки официальная ТП прокомментирует: согласуется ли моя идея с возможностями QLua?
Мудреного ничего нет. Но посчитайте все задержки и получите, что вы измените свою заявку сегодня по тем данным, которые увидели вчера.
Смена типа заявки во время отправки
 
Подобную идею реализуют HFT роботы,
но это не КВИК и дорого
Смена типа заявки во время отправки
 
Цитата
pertifospi написал:
Цитата
nikolz написал:
Судя по вопросу Вы слабо представляете как работает биржевая торговля.
Где , по вашему мнению, будет происходит эта "магия"?  
Очевидно - в квике. Если он позволяет работать с заявками до момента отправки брокеру, то глобально не вижу проблем, чтобы реализовать идею. Вопрос лишь: есть ли технически такая возможность?
В моей голове выглядит весь процесс примерно так:
- есть некий listener, который следит за появлением заявок
- как только срабатывает условие, что есть новая заявка и тип - рыночная, то либо меняем текущую, либо создаём новую, беря нужные параметры от изначальной и добавляя свои
- отправляем  брокеру
- вуаля, "магия" сработала
Если время выполнения хотелки не критично, то все возможно.
Но поезд скорее всего уже уйдет.
Смена типа заявки во время отправки
 
Цитата
pertifospi написал:
Добрый день. С программированием не очень знаком, поэтому перед тем как начать усиленно копаться в Lua хочу уточнить у знатоков и тех. поддержки возможно ли в принципе реализовать идею.
Идея вот какая: в момент отправки рыночной заявки менять её тип на лимитную с фиксированным для каждого инструмента спредом от текущей цены? В идеале чтобы ещё была возможность указать, что делать с контрактами, которые не попали в спред: оставлять в виде лимитной заявки или снимать.
Если на примере: есть инструмент А с шагом 1 и ценой 500, для простоты картины, в момент отправки рыночной заявки в лонгах и шортах на каждом шаге (то есть цене инструмента) по 10 заявок\контрактов. Мы отправляем по рынку 80 контрактов, допустим, в лонг. Спред для инструмента указан 5. Но тут происходит "магия" и рыночная заявка преобразуется в лимитную на 80конрактов  с ценой покупки 505.
И в идеале ещё, если можем указать заранее для этого конкретного инструмента что будет с оставшимися 30 контрактами. Либо они появятся в стакане по цене 505, либо сразу снимутся.

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

Отвечая на возможный вопрос "а зачем это?". Всё просто: оказывается, у моего брокера (может и всех такое, я не проверял) ГО в зависимости от типа заявки отличается ~ в 2 раза.
Судя по вопросу Вы слабо представляете как работает биржевая торговля.
Где , по вашему мнению, будет происходит эта "магия"?  
Мой робот
 
Про робота
Результаты теста аналогичного предыдущему, но обработка выполняется скриптом в LuaJit и в дополнительном потоке пула таймера.
Код
7.7, 27.2, ,14,SPH4, 230, 0
7.7, 17.0, ,14,CHH4, 230, 0
Таймер 152500.011,Nc=3
26.7, 55.8, ,14,FLOT, 230, 1
26.7, 22.4, ,14,MTLR, 230, 2
26.7, 17.7, ,14,QIWI, 230, 2
26.7, 13.5, ,14,TATN, 230, 1
26.7, 15.5, ,14,VKCO, 230, 1
26.7, 97.7, ,14,VTBR, 230, 2
26.7, 15.9, ,14,ZVEZ, 230, 1
26.7, 83.0, ,14,IRAO, 230, 1
26.7, 15.4, ,14,CRH4, 230, 0
23.5, 84.9, ,14,SiH4, 230, 0
31.7, 116.2, ,14,CRH4, 230, 0
28.6, 50.5, ,14,RNH4, 230, 1
28.6, 17.9, ,14,CHH4, 230, 1
28.6, 29.2, ,14,SPH4, 230, 0
28.0, 46.3, ,14,SiH4, 230, 1
28.0, 15.9, ,14,SiH4, 230, 1
28.0, 11.8, ,14,SiH4, 230, 0
28.1, 48.5, ,14,SiH4, 230, 1
28.1, 16.7, ,14,CRH4, 230, 0
28.6, 53.4, ,14,RNH4, 230, 1
28.6, 15.7, ,14,CRH4, 230, 0
24.4, 83.5, ,14,CRH4, 230, 0
28.2, 49.2, ,14,CRH4, 230, 0
28.0, 46.8, ,14,CRH4, 230, 1
28.0, 15.7, ,14,SiH4, 230, 0
15.2, 33.0, ,14,SiH4, 230, 1
15.2, 15.4, ,14,SRH4, 230, 0
27.5, 132.5, ,14,USD000UTSTOM, 230, 2
27.5, 83.6, ,14,EUR_RUB__TOD, 230, 4
27.5, 75.9, ,14,GLDRUB_TOM, 230, 4
27.5, 19.5, ,14,SPH4, 230, 3
27.5, 13.9, ,14,USD000000TOD, 230, 2
27.5, 12.8, ,14,SiH4, 230, 1
27.5, 12.1, ,14,EUR_RUB__TOM, 230, 0
29.3, 49.1, ,14,SiH4, 230, 0
29.3, 80.3, ,14,SFH4, 230, 0
10.8, 56.0, ,14,SFH4, 230, 1
10.8, 22.5, ,14,RNH4, 230, 1
10.8, 14.2, ,14,SPH4, 230, 0
7.5, 23.3, ,14,CHH4, 230, 0
13.2, 62.9, ,14,RNH4, 230, 1
13.2, 20.6, ,14,SPH4, 230, 1
13.2, 14.8, ,14,RNH4, 230, 0
28.8, 48.5, ,14,CHH4, 230, 0
24.1, 43.8, ,14,SPH4, 230, 1
24.1, 25.0, ,14,SPH4, 230, 0
28.7, 103.8, ,14,CRH4, 230, 0
8.8, 59.9, ,14,RNH4, 230, 0
6.3, 25.4, ,14,SPH4, 230, 0
6.3, 17.1, ,14,CHH4, 230, 0
10.1, 49.8, ,14,CHH4, 230, 0
28.9, 49.2, ,14,EuH4, 230, 0
25.0, 36.2, ,14,RNH4, 230, 1
25.0, 16.0, ,14,SPH4, 230, 0
24.0, 30.3, ,14,CNYRUB_TOM, 230, 0
10.0, 102.6, ,14,USD000UTSTOM, 230, 0
28.0, 47.0, ,14,EUR_RUB__TOM, 230, 1
28.0, 20.7, ,14,BYNRUB_TOM, 230, 1
28.0, 13.4, ,14,EUR_RUB__TOD, 230, 0
28.4, 50.7, ,14,SiH4, 230, 0
12.6, 47.1, ,14,NKH4, 230, 0
12.6, 22.0, ,14,MMH4, 230, 0
12.4, 57.5, ,14,SiH4, 230, 0
28.7, 56.0, ,14,GKH4, 230, 0
10.9, 65.2, ,14,LKH4, 230, 1
10.9, 34.7, ,14,FIVE, 230, 2
10.9, 32.3, ,14,FLOT, 230, 2
10.9, 19.4, ,14,MRKV, 230, 2
10.9, 17.7, ,14,MTLR, 230, 2
10.9, 21.3, ,14,IRAO, 230, 2
10.9, 24.3, ,14,QIWI, 230, 2
10.9, 131.5, ,14,NKHP, 230, 4
10.9, 89.2, ,14,UNAC, 230, 6
10.9, 16.6, ,14,ZVEZ, 230, 5
10.9, 12.8, ,14,VKCO, 230, 4
10.9, 14.0, ,14,TATN, 230, 3
10.9, 20.5, ,14,SNGSP, 230, 2
10.9, 82.5, ,14,SGZH, 230, 1
10.9, 83.7, ,14,BELU, 230, 0
6.7, 25.2, ,14,MMH4, 230, 0
13.3, 123.9, ,14,SiH4, 230, 0
28.1, 47.8, ,14,SiH4, 230, 0
29.7, 52.3, ,14,SiH4, 230, 0
28.8, 49.3, ,14,EuH4, 230, 1
28.8, 15.5, ,14,SRH4, 230, 0
25.3, 50.5, ,14,USD000UTSTOM, 230, 1
25.3, 18.7, ,14,EUR_RUB__TOD, 230, 1
25.3, 21.1, ,14,SPH4, 230, 1
25.3, 14.4, ,14,USDCNY_TOM, 230, 0
26.6, 39.4, ,14,SPH4, 230, 0
26.6, 71.5, ,14,CRH4, 230, 0
46.2, 53.3, ,14,RNH4, 230, 1
46.2, 18.6, ,14,BRG4, 230, 0
28.5, 54.4, ,14,RIH4, 230, 0
37.4, 51.3, ,14,RNH4, 230, 1
37.4, 15.5, ,14,CHH4, 230, 0
27.9, 52.8, ,14,RNH4, 230, 1
27.9, 15.8, ,14,CHH4, 230, 0
29.1, 58.5, ,14,RIH4, 230, 0
50.1, 151.5, ,14,SiH4, 230, 0
27.0, 50.5, ,14,RNH4, 230, 0
10.1, 50.1, ,14,RNH4, 230, 0
10.2, 49.7, ,14,SiH4, 230, 0
26.7, 46.8, ,14,EuH4, 230, 1
26.7, 14.8, ,14,NKH4, 230, 0
28.9, 53.6, ,14,RNH4, 230, 0
29.0, 59.3, ,14,SGH4, 230, 0
44.0, 50.2, ,14,RNH4, 230, 0
28.6, 54.5, ,14,RIH4, 230, 0
25.5, 58.1, ,14,RIH4, 230, 1
25.5, 21.5, ,14,SiH4, 230, 1
25.5, 15.5, ,14,RNH4, 230, 0
35.5, 51.1, ,14,RNH4, 230, 0
29.5, 121.2, ,14,RIH4, 230, 1
29.5, 15.4, ,14,VBH4, 230, 0
28.8, 52.5, ,14,CRH4, 230, 1
28.8, 17.5, ,14,RNH4, 230, 0
10.9, 53.1, ,14,CHH4, 230, 1
10.9, 20.4, ,14,CRH4, 230, 0
25.0, 50.1, ,14,CRH4, 230, 0
6.5, 37.8, ,14,FESH, 230, 0
6.5, 28.2, ,14,IRAO, 230, 1
6.5, 128.7, ,14,LVHK, 230, 2
6.5, 17.2, ,14,MTLR, 230, 2
6.5, 92.2, ,14,MTSS, 230, 4
6.5, 15.1, ,14,QIWI, 230, 3
6.5, 76.6, ,14,POLY, 230, 4
6.5, 13.6, ,14,TATN, 230, 3
6.5, 89.5, ,14,ROSN, 230, 5
6.5, 103.0, ,14,USBN, 230, 7
6.5, 15.8, ,14,ZVEZ, 230, 6
6.5, 13.6, ,14,VTBR, 230, 5
6.5, 11.7, ,14,VKCO, 230, 4
6.5, 17.1, ,14,UNAC, 230, 3
6.5, 18.8, ,14,UGLD, 230, 2
6.5, 23.6, ,14,NKHP, 230, 1
6.5, 16.7, ,14,CRH4, 230, 1
6.5, 73.0, ,14,MRKV, 230, 0
6.7, 29.0, ,14,RNH4, 230, 0
6.7, 17.4, ,14,CHH4, 230, 0
15.5, 67.2, ,14,CHH4, 230, 0
27.2, 47.9, ,14,CRH4, 230, 1
27.2, 14.5, ,14,CRH4, 230, 0
27.2, 17.3, ,14,RNH4, 230, 0
28.6, 50.1, ,14,RNH4, 230, 0
28.6, 72.3, ,14,SiH4, 230, 0
28.8, 51.0, ,14,GDH4, 230, 0
24.9, 52.7, ,14,RNH4, 230, 1
24.9, 20.8, ,14,RIH4, 230, 0
27.1, 103.7, ,14,RIH4, 230, 0
27.0, 46.7, ,14,RNH4, 230, 0
11.1, 55.8, ,14,RNH4, 230, 0
27.6, 49.6, ,14,TTH4, 230, 0
16.4, 51.2, ,14,TTH4, 230, 0
24.9, 53.7, ,14,RNH4, 230, 0
44.6, 50.5, ,14,LKH4, 230, 1
44.6, 15.3, ,14,EuH4, 230, 0
26.9, 46.8, ,14,FSH4, 230, 0
27.9, 50.9, ,14,RNH4, 230, 0
27.4, 48.3, ,14,RNH4, 230, 0
28.3, 52.4, ,14,RNH4, 230, 0
26.6, 48.0, ,14,USD000UTSTOM, 230, 1
26.6, 17.3, ,14,GLDRUB_TOM, 230, 0
28.0, 50.7, ,14,RNH4, 230, 0
28.2, 52.0, ,14,TTH4, 230, 1
28.2, 15.3, ,14,CHH4, 230, 0
28.2, 51.5, ,14,TTH4, 230, 1
28.2, 17.8, ,14,CHH4, 230, 1
28.2, 14.5, ,14,RNH4, 230, 0
29.3, 49.4, ,14,CHH4, 230, 0
29.6, 49.3, ,14,SiH4, 230, 0
27.1, 50.6, ,14,TTH4, 230, 1
27.1, 28.5, ,14,RIH4, 230, 2
27.1, 15.5, ,14,MMH4, 230, 1
27.1, 14.5, ,14,RIH4, 230, 0
26.5, 150.4, ,14,AFLT, 230, 4
26.5, 27.1, ,14,IRAO, 230, 5
26.5, 108.0, ,14,NKHP, 230, 7
26.5, 23.6, ,14,TATN, 230, 6
26.5, 131.4, ,14,SVAV, 230, 8
26.5, 30.9, ,14,USBN, 230, 7
26.5, 18.5, ,14,VKCO, 230, 7
26.5, 16.8, ,14,VTBR, 230, 7
26.5, 96.3, ,14,ZVEZ, 230, 7
26.5, 20.6, ,14,UNAC, 230, 6
26.5, 92.9, ,14,TCSG, 230, 5
26.5, 66.4, ,14,POLY, 230, 4
26.5, 82.8, ,14,FLOT, 230, 3
26.5, 15.6, ,14,FIXP, 230, 2
26.5, 12.9, ,14,FESH, 230, 1
26.5, 18.3, ,14,AGRO, 230, 0
24.7, 28.2, ,14,SiH4, 230, 0
25.9, 32.7, ,14,CHH4, 230, 0
9.6, 106.1, ,14,SiH4, 230, 0
6.6, 26.4, ,14,RNH4, 230, 0
11.9, 60.3, ,14,CHH4, 230, 0
27.4, 56.8, ,14,RMH4, 230, 0
17.4, 48.9, ,14,NKH4, 230, 0
30.1, 50.5, ,14,CHH4, 230, 1
30.1, 23.3, ,14,RNH4, 230, 1
30.1, 13.8, ,14,CHH4, 230, 0
24.5, 51.6, ,14,NKH4, 230, 1
24.5, 21.5, ,14,CHH4, 230, 0
28.0, 49.7, ,14,SiH4, 230, 1
28.0, 22.2, ,14,LKH4, 230, 0
12.9, 68.0, ,14,GKH4, 230, 1
12.9, 20.3, ,14,NKH4, 230, 0
29.1, 49.5, ,14,CHH4, 230, 0
24.3, 55.0, ,14,RNH4, 230, 0
26.8, 46.5, ,14,NKH4, 230, 1
26.8, 18.2, ,14,NKH4, 230, 1
26.8, 14.5, ,14,CHH4, 230, 0
20.8, 36.3, ,14,RNH4, 230, 0
28.4, 57.7, ,14,GLDRUB_TOM, 230, 1
28.4, 26.7, ,14,CHH4, 230, 0
30.6, 54.1, ,14,SiH4, 230, 0
27.1, 54.7, ,14,RTH4, 230, 0
27.3, 51.4, ,14,SiH4, 230, 1
27.3, 20.2, ,14,NKH4, 230, 1
27.3, 17.3, ,14,CHH4, 230, 1
27.3, 14.9, ,14,RNH4, 230, 0
28.6, 51.7, ,14,RNH4, 230, 1
28.6, 19.2, ,14,CRH4, 230, 0
17.5, 55.9, ,14,RNH4, 230, 0
29.7, 52.3, ,14,CHH4, 230, 0
30.2, 55.6, ,14,RNH4, 230, 0
29.0, 50.9, ,14,CHH4, 230, 0
30.5, 54.8, ,14,RNH4, 230, 0
30.5, 30.0, ,14,RNH4, 230, 0
28.0, 48.2, ,14,SiH4, 230, 1
28.0, 18.3, ,14,CHH4, 230, 0
9.9, 51.2, ,14,RNH4, 230, 1
9.9, 16.6, ,14,CHH4, 230, 0
7.4, 136.7, ,14,GLDRUB_TOM, 230, 2
7.4, 14.5, ,14,EURUSD000TOM, 230, 1
7.4, 78.9, ,14,USD000UTSTOM, 230, 3
7.4, 96.5, ,14,FIXP, 230, 5
7.4, 43.8, ,14,NKHP, 230, 6
7.4, 15.5, ,14,TATN, 230, 6
7.4, 34.1, ,14,USBN, 230, 6
7.4, 11.5, ,14,VKCO, 230, 5
7.4, 12.9, ,14,ROSN, 230, 4
7.4, 16.5, ,14,IRAO, 230, 3
7.4, 15.7, ,14,FLOT, 230, 2
7.4, 17.7, ,14,AGRO, 230, 1
7.4, 189.2, ,14,EUR_RUB__TOM, 230, 0
10.5, 110.7, ,14,RNH4, 230, 0
23.2, 116.3, ,14,CHH4, 230, 0
28.9, 224.2, ,14,CRH4, 230, 2
28.9, 13.6, ,14,NKH4, 230, 1
28.9, 13.9, ,14,RNH4, 230, 0
11.4, 139.3, ,14,RNH4, 230, 0
11.4, 45.6, ,14,CHH4, 230, 0
12.1, 79.9, ,14,GKH4, 230, 0
28.5, 68.5, ,14,SRH4, 230, 0
26.1, 87.0, ,14,RNH4, 230, 2
26.1, 18.4, ,14,CHH4, 230, 1
26.1, 14.3, ,14,RNH4, 230, 0
27.7, 64.0, ,14,RNH4, 230, 0
28.4, 59.3, ,14,RNH4, 230, 1
28.4, 19.4, ,14,RNH4, 230, 0
27.4, 71.5, ,14,CRH4, 230, 1
27.4, 21.7, ,14,EUR_RUB__TOD, 230, 1
27.4, 22.5, ,14,USD000UTSTOM, 230, 0
10.6, 49.2, ,14,RNH4, 230, 0
27.1, 47.3, ,14,CHH4, 230, 1
27.1, 66.2, ,14,CRH4, 230, 0
завершение Таймер 152505.619
27.2, 48.0, ,14,FSH4, 230, 0
24.9, 51.8, ,14,RNH4, 230, 1
24.9, 18.8, ,14,TTH4, 230, 1
24.9, 13.1, ,14,TTH4, 230, 0
25.8, 54.3, ,14,CRH4, 230, 0

Время обработки составило 5.6 секунд, вместо 48 секунд ранее.
Во время вычисления головного блока не происходи останов функции main, которая продолжает обработку колбеков.
В итоге, очередь до вычислений и после вычислений содержит не более 1 элемента, вместо 1854 ранее.
Мой робот
 
Про робота
------------------------  
Один раз в минуту робот вычисляет головной блок для всех зарегистрированных инструментов.
В результате этих вычислений получается очередь новых заявок .
---------------
Привожу результаты теста , который позволяет оценить эффективность применения дополнительного потока для этих вычислений , а также проведение вычислений в Luajit в дополнительном потоке
-------------
В первом тесте все вычисления выполняются в функции main для версии Lua5.3
Результат:
Код
23.2, 56.6, ,14,NKH4, 283, 0
25.5, 122.1, ,14,SiH4, 283, 1
25.5, 25.0, ,14,USD000UTSTOM, 283, 1
25.5, 21.5, ,14,USD000000TOD, 283, 1
25.5, 24.8, ,14,EUR_RUB__TOM, 283, 1
25.5, 15.6, ,14,EUR_RUB__TOD, 283, 0
24.8, 65.3, ,14,NKH4, 283, 1
24.8, 18.0, ,14,SiM4, 283, 0
27.9, 54.8, ,14,SiM4, 283, 0
Таймер 145800.01,Nc=3
завершение Таймер 145846.761,ncs=284
28.4, 46751279.6, ,14,NKH4, 283, 1854
28.4, 15.7, ,14,RTH4, 283, 1853
28.4, 12.6, ,14,CHH4, 283, 1852
28.4, 11.5, ,14,CHH4, 283, 1851
28.4, 13.9, ,14,SiM4, 283, 1850

Nc=3 - число торгуемых классов
ncs=284- число торгуемых инструментов.
Вычисление головного блока началось в 14:58:00 , закончилось в 14:58:48
------------------------
Обратите внимание на последнее число в стоках до и после вычислений головного блока.
это число инструментов, которые находятся в очереди на обработку в main.
----------------------------------
За 48 секунд вычислений очередь увеличилась с 0 элементов до 1854.
Т е за 48 секунд в ТТП изменились данные 1854 раза.
----------------------------------
Примеры dll на GCC 64 для работы со скриптом
 
вариант вывода время в секундах и миллисекунды с шагом 0.0001
Код
static int Data(lua_State *L){ 
   GetSystemTimePreciseAsFileTime(&UTC);
   LARGE_INTEGER z; z.LowPart=UTC.dwLowDateTime;
  z.HighPart = UTC.dwHighDateTime; 
 long ns=z.QuadPart%10000000ULL; 
 time_t t=z.QuadPart /10000000ULL - 11644473600ULL; 
 lua_pushinteger(L,t);
lua_pushinteger(L,ns);
return 2;
}
тест:
Код
while true do
local t,nc=nkvm.Data();
print(t,nc);
end

результат:
Код
1704785739   9970111
1704785739   9970232
1704785739   9970356
1704785739   9970477
1704785740   1022793
1704785740   1023025
1704785740   1023153
1704785740   1023270

Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
Это не то: GetSystemTimePreciseAsFileTime выдаёт время в UTC (число 100 нс интервалов с 1 января 1601 г. по текущее время). Теперь надо получить из него часы, минуты, секунды и микросекунды с десятыми с часами для локального времени. Я уже почти написал программку для этого перевода, но вроде бы должна быть готовая в какой-нибудь библиотеке для Си...
Вы можете получать время до секунды обычными функциями луа.
---------------------
Для получения числа миллисикунд с шагом 0.1 мкс
выкладываю функцию на C for Lua, которую надо добавить в DLL для Lua:
Код
static int ms(lua_State *L){ 
   GetSystemTimePreciseAsFileTime(&UTC);
   LARGE_INTEGER z; z.LowPart=UTC.dwLowDateTime;
  z.HighPart = UTC.dwHighDateTime; 
 long ns=z.QuadPart%10000000ULL; 
 double x=((double)ns)/10000.;
lua_pushnumber(L,x);
return 1; }

В результате получим следующее
Код
Tue Jan  9 10:57:47 2024
944.631400
Tue Jan  9 10:57:47 2024
944.667900
Tue Jan  9 10:57:47 2024
944.704500
Tue Jan  9 10:57:47 2024
944.741300
Tue Jan  9 10:57:48 2024
45.804000
Tue Jan  9 10:57:48 2024
45.864200
Tue Jan  9 10:57:48 2024
45.921100
Tue Jan  9 10:57:48 2024

Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
GetSystemTimePreciseAsFileTime
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/localtime-localtime32-localtime64?...
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
GetSystemTimePreciseAsFileTim
https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasf...
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
VPM написал:
Лександр, А что Вас здесь смутило? Не какого инсайда не раскрываю, говорю про вещи широко известные (Ну точно не секретные)
Прикольно, если Вы инсайд знаете.  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Маркет-мейкер - это вполне видимый игрок.
Его задача  - сжатие спреда.
За это ему платит биржа (читайте документы биржи)
Правило такое, если заявка ударит в заявку маркет-мейкера, то биржа заплатит ему.  
Тормоз подключения тиков
 
версия 11.0.1.3
Тормоз подключения тиков
 
Добрый день,
Вопрос к разработчикам.
Можете объяснить, почему выполнение функции  
CreateDataSource для тиков выполняется в 700 раз медленнее (у меня за 189000 мкс)
чем для других интервалов (у меня за 270 мкс)
Мой робот
 
опечатка, параметров 7.
Мой робот
 
По ходу дела возник вопрос об организации хранения данных.
Сейчас реализовал mapping files для каждого инструмента 3 тайма и 6 параметров свечи.
Т е 21 файл на инструмент. Для 150 инструментов получи более 2000 файлов.
-----------------------
Прикольно то, что приходится дублировать файлы квика,
так как разработчики QUIK "зажали" формат этих файлов.
Мой робот
 
Продолжаю про робота.
----------
В функции main  реализую три режима работы.
1) на основе Onparam. При изменении параметров по инструменту, проверяется изменение цены и если есть, то выполняется алгоритм управления стопами.
--------------
2) По таймеру. Использую таймер OC, который установлен неа срабатывание через 1 минуту.
При возникновении этого сигнала, в цикле для каждого инструмента получаем текущее значение свечей, которые передаются в поток из пула потоков ОС для расчета головного блока.
Головной блок возвращает сигнал купить/продать.
Вот пример лога сигнала  таймера и запуск потоков инструментов.
NNsec - число торгуемых инструментов
Первое число в строке - запаздывание сигнала колбека.
Второе число в строке - время  прохода функции main.
Код
29.2; 15.7;     GDH4,NNsec=126,Ntp=2
29.2; 10.3;     RNH4,NNsec=126,Ntp=2
29.2; 10.1;     NKH4,NNsec=126,Ntp=2
29.2; 11.9;     TIH4,NNsec=126,Ntp=2
29.2; 21.3;     MCH4,NNsec=126,Ntp=3
29.2; 10.8;     GDH4,NNsec=126,Ntp=3
29.2; 9.7;     NKH4,NNsec=126,Ntp=3
29.2; 9.5;     RNH4,NNsec=126,Ntp=2
29.2; 9.8;     TIH4,NNsec=126,Ntp=1
29.2; 12.9;     MCH4,NNsec=126,Ntp=0
23.3; 45.9;     RNH4,NNsec=126,Ntp=2
23.3; 16.3;     EuH4,NNsec=126,Ntp=2
23.3; 23.5;     MCH4,NNsec=126,Ntp=3
23.3; 12.3;     TIH4,NNsec=126,Ntp=2
23.3; 11.7;     NKH4,NNsec=126,Ntp=1
23.3; 9.9;     RNH4,NNsec=126,Ntp=0
13.3; 53.2;     RNH4,NNsec=126,Ntp=0
8.4; 26.5;     RNH4,NNsec=126,Ntp=0
21.2; 41.3;     VKH4,NNsec=126,Ntp=1
21.2; 19.5;     GDH4,NNsec=126,Ntp=1
21.2; 16.1;     NKH4,NNsec=126,Ntp=0
Таймер 142000.039
GLH4;HMS=131900.0;HMS_os=142000.039,Ci=6010.5,pos=0
NAH4;HMS=131900.0;HMS_os=142000.039,Ci=16422.0,pos=0
RNH4;HMS=131800.0;HMS_os=142000.039,Ci=59162.0,pos=0
BRG4;HMS=131900.0;HMS_os=142000.039,Ci=78.81,pos=0
NKH4;HMS=131500.0;HMS_os=142000.039,Ci=153066.0,pos=0
BNH4;HMS=125500.0;HMS_os=142000.039,Ci=2351.0,pos=0
TIH4;HMS=124800.0;HMS_os=142000.039,Ci=33088.0,pos=0
VBH4;HMS=131900.0;HMS_os=142000.039,Ci=2429.0,pos=0
SiH4;HMS=131900.0;HMS_os=142000.039,Ci=91608.0,pos=0
PHH4;HMS=131700.0;HMS_os=142000.039,Ci=6876.0,pos=0
MXH4;HMS=131900.0;HMS_os=142000.039,Ci=322025.0,pos=0
EuH4;HMS=131900.0;HMS_os=142000.039,Ci=99734.0,pos=0
PDH4;HMS=131900.0;HMS_os=142000.039,Ci=1072.48,pos=0
SVH4;HMS=131900.0;HMS_os=142000.039,Ci=23.7,pos=0
SFH4;HMS=131900.0;HMS_os=142000.039,Ci=473.4,pos=0
ISH4;HMS=125800.0;HMS_os=142000.039,Ci=1147.0,pos=0
FLH4;HMS=131900.0;HMS_os=142000.039,Ci=14686.0,pos=0
RIH4;HMS=131900.0;HMS_os=142000.039,Ci=110600.0,pos=0
SOH4;HMS=130800.0;HMS_os=142000.039,Ci=8484.0,pos=0
MTH4;HMS=130300.0;HMS_os=142000.039,Ci=25953.0,pos=0
ALH4;HMS=131200.0;HMS_os=142000.039,Ci=7361.0,pos=0
MMH4;HMS=131800.0;HMS_os=142000.039,Ci=3220.15,pos=0
GDH4;HMS=131900.0;HMS_os=142000.039,Ci=2078.5,pos=0
EDH4;HMS=131900.0;HMS_os=142000.039,Ci=1.0875,pos=0
LKH4;HMS=131600.0;HMS_os=142000.039,Ci=70124.0,pos=0
CRH4;HMS=131900.0;HMS_os=142000.039,Ci=12.908,pos=0
SXH4;HMS=131200.0;HMS_os=142000.039,Ci=4419.8,pos=0
SPH4;HMS=131200.0;HMS_os=142000.039,Ci=28239.0,pos=0
GZH4;HMS=131900.0;HMS_os=142000.039,Ci=16731.0,pos=0
HSH4;HMS=131800.0;HMS_os=142000.039,Ci=17051.0,pos=0
PZH4;HMS=130700.0;HMS_os=142000.039,Ci=112138.0,pos=0
SNH4;HMS=123900.0;HMS_os=142000.039,Ci=28494.0,pos=0
MEH4;HMS=131500.0;HMS_os=142000.039,Ci=19960.0,pos=0
MNH4;HMS=131800.0;HMS_os=142000.039,Ci=6978.0,pos=0
UCH4;HMS=131800.0;HMS_os=142000.039,Ci=7.116,pos=0
NMH4;HMS=131400.0;HMS_os=142000.039,Ci=18854.0,pos=0
SGH4;HMS=131900.0;HMS_os=142000.039,Ci=58120.0,pos=0
FVH4;HMS=131500.0;HMS_os=142000.039,Ci=22802.0,pos=0
VKH4;HMS=131500.0;HMS_os=142000.039,Ci=6062.0,pos=0
GKH4;HMS=125500.0;HMS_os=142000.039,Ci=16812.0,pos=0
RMH4;HMS=131900.0;HMS_os=142000.039,Ci=1105.5,pos=0
FSH4;HMS=131700.0;HMS_os=142000.039,Ci=11669.0,pos=0
POH4;HMS=131400.0;HMS_os=142000.039,Ci=5063.0,pos=0
SSH4;HMS=131900.0;HMS_os=142000.039,Ci=3981.0,pos=0
RLH4;HMS=131900.0;HMS_os=142000.039,Ci=3638.0,pos=0
Мой робот
 
Цитата
Serge123 написал:
А что конкретно даёт эта OnParam? Я сейчас глянул  https://luaq.ru/OnParam.html  и не понял, как узнать, какие параметры изменились? Их же вагон с тележкой...  
Дает сигнал изменений на рынке. По этому сигналу управляю стопами
Мой робот
 
Цитата
Serge123 написал:
По картинке робота я не смог понять, насколько он прибылен...
Поясняю.
Смотрим первую картинку.
Нижнее 3 окно в ней - это график прибыль/убыток за 2023 год.
линия зеленая на оси справа показывает положительные 220% -это профит лонг.
линия синяя на оси справа показывает положительные 150% - это профит short
линия белая на оси справа показывает положительные 370% - это профит long+short.
----------------
На других картинках график профита приведен по месяцам и по дням.
Мой робот
 
Через некоторое время после пуска,большинство бумаг зарегистрированы и работа скрипта переходит в нормальный ритм.
Вот для наглядности лог файл
Код
4.4; 11.8,0.7;     IRH4,jc=1,Ns=31,Ntp=243
4.4; 10.4,0.4;     SiH4,jc=1,Ns=31,Ntp=242
4.4; 24.2,22.0;     SNGSP,jc=2,Ns=97,Ntp=241
4.4; 4.0,3.0;     CNTLP,jc=2,Ns=97,Ntp=240
4.4; 21.6,5.7;     ROSN,jc=2,Ns=97,Ntp=239
4.4; 2.3,1.4;     YRSB,jc=2,Ns=97,Ntp=238
4.4; 8.1,7.3;     VJGZP,jc=2,Ns=97,Ntp=237
4.4; 2.8,1.8;     USBN,jc=2,Ns=97,Ntp=236
4.4; 605685.7,605658.8;     ALRS,jc=2,Ns=98,Ntp=235
4.4; 17.1,1.9;     MTLR,jc=2,Ns=98,Ntp=234
4.4; 15.2,2.5;     CIAN,jc=2,Ns=98,Ntp=233
4.4; 163066.4,162987.6;     QIWI,jc=2,Ns=99,Ntp=232
4.4; 10.3,8.5;     GECO,jc=2,Ns=99,Ntp=231
4.4; 18.9,3.6;     TCSG,jc=2,Ns=99,Ntp=230
4.4; 6.6,5.6;     RASP,jc=2,Ns=99,Ntp=229
4.4; 4.4,3.6;     AKRN,jc=2,Ns=99,Ntp=228
4.4; 16.7,15.8;     KROTP,jc=2,Ns=100,Ntp=227
4.4; 2.2,1.4;     KLSB,jc=2,Ns=100,Ntp=226
4.4; 15.3,2.8;     VTBR,jc=2,Ns=100,Ntp=225
4.4; 5.6,4.7;     ROLO,jc=2,Ns=100,Ntp=224
4.4; 18.1,6.5;     BSPB,jc=2,Ns=100,Ntp=223
4.4; 65.5,1.8;     LSRG,jc=2,Ns=100,Ntp=222
4.4; 3.2,2.4;     RZSB,jc=2,Ns=100,Ntp=221
4.4; 6.9,6.2;     YAKG,jc=2,Ns=100,Ntp=220
4.4; 11.9,0.8;     SELG,jc=2,Ns=100,Ntp=219
4.4; 7.0,6.2;     UNAC,jc=2,Ns=100,Ntp=218
4.4; 3.4,2.4;     ASTR,jc=2,Ns=100,Ntp=217
4.4; 7.0,6.2;     IGST,jc=2,Ns=100,Ntp=216
4.4; 2.5,1.7;     RKKE,jc=2,Ns=100,Ntp=215
4.4; 18.5,4.4;     RIH4,jc=1,Ns=31,Ntp=214
4.4; 10.7,0.6;     EuH4,jc=1,Ns=31,Ntp=213
4.4; 11.5,1.1;     CRH4,jc=1,Ns=31,Ntp=212

но при этом очередь еще больная
еще через некоторое время очереди рассасывается .
Код
4.4; 1.9,1.1;     NKNCP,jc=2,Ns=107,Ntp=22
4.4; 2.3,1.6;     USBN,jc=2,Ns=107,Ntp=21
4.4; 2.4,1.7;     RKKE,jc=2,Ns=107,Ntp=20
4.4; 17.4,6.0;     HYDR,jc=2,Ns=107,Ntp=19
4.4; 2.0,1.1;     YRSB,jc=2,Ns=107,Ntp=18
4.4; 15.5,4.0;     TRNFP,jc=2,Ns=107,Ntp=17
4.4; 2.9,2.1;     MRKZ,jc=2,Ns=107,Ntp=16
4.4; 3.3,2.5;     ASTR,jc=2,Ns=107,Ntp=15
4.4; 2.2,1.5;     MRKV,jc=2,Ns=107,Ntp=14
4.4; 5.4,4.6;     SLEN,jc=2,Ns=107,Ntp=13
4.4; 3.5,2.7;     TRMK,jc=2,Ns=107,Ntp=12
4.4; 11.6,1.0;     CIAN,jc=2,Ns=107,Ntp=11
4.4; 9.8,8.9;     YKEN,jc=2,Ns=108,Ntp=10
NVTK,last=1486.000000,tlast=163435.0;osHMS=163448.0;bid=1485.800000,offer=1486.000000
4.4; 100.1,3.2;     NVTK,jc=2,Ns=108,Ntp=9
4.4; 16.3,4.0;     AFKS,jc=2,Ns=108,Ntp=8
4.4; 5.1,4.2;     TORS,jc=2,Ns=108,Ntp=7
4.4; 4.5,3.7;     CHGZ,jc=2,Ns=108,Ntp=6
4.4; 8.0,7.2;     SNGSP,jc=2,Ns=108,Ntp=5
4.4; 4.2,3.5;     AKRN,jc=2,Ns=108,Ntp=4
4.4; 11.0,0.4;     SiH4,jc=1,Ns=35,Ntp=3
4.4; 15.5,1.6;     MGH4,jc=1,Ns=35,Ntp=2
4.4; 11.1,0.8;     IRH4,jc=1,Ns=35,Ntp=1
4.4; 10.8,0.7;     TNH4,jc=1,Ns=35,Ntp=0
22.5; 45.7,1.8;     BRG4,jc=1,Ns=35,Ntp=2
22.5; 1378.7,1358.5;     MMH4,jc=1,Ns=36,Ntp=32
22.5; 15.1,1.7;     EDH4,jc=1,Ns=36,Ntp=31
22.5; 12.3,1.1;     CRH4,jc=1,Ns=36,Ntp=31
22.5; 10.8,1.0;     EDH4,jc=1,Ns=36,Ntp=30
22.5; 10.9,0.4;     GDH4,jc=1,Ns=36,Ntp=30
22.5; 15.6,4.1;     LKH4,jc=1,Ns=36,Ntp=30
22.5; 26.4,24.0;     UGLD,jc=2,Ns=108,Ntp=30
22.5; 11.8,0.5;     SiH4,jc=1,Ns=36,Ntp=29
22.5; 5.0,3.7;     ABIO,jc=2,Ns=108,Ntp=29
22.5; 11.1,1.3;     LKH4,jc=1,Ns=36,Ntp=28
22.5; 12.7,0.9;     SELG,jc=2,Ns=108,Ntp=27
22.5; 7.5,6.7;     UNAC,jc=2,Ns=108,Ntp=27
BRG4,last=79.270000,tlast=163439.0;osHMS=163449.0;bid=79.260000,offer=79.270000
22.5; 69.9,0.5;     BRG4,jc=1,Ns=36,Ntp=28
22.5; 13.9,0.6;     EuH4,jc=1,Ns=36,Ntp=29
22.5; 12.5,1.3;     RIH4,jc=1,Ns=36,Ntp=29
22.5; 11.5,1.5;     MXH4,jc=1,Ns=36,Ntp=29
22.5; 15.2,3.6;     MMH4,jc=1,Ns=36,Ntp=29
22.5; 9.4,0.4;     BRG4,jc=1,Ns=36,Ntp=28
22.5; 9.4,0.5;     EuH4,jc=1,Ns=36,Ntp=28
22.5; 9.6,0.5;     EuH4,jc=1,Ns=36,Ntp=28
22.5; 9.4,0.5;     EuH4,jc=1,Ns=36,Ntp=28
22.5; 11.5,1.0;     CRH4,jc=1,Ns=36,Ntp=28
22.5; 10.1,1.0;     CRH4,jc=1,Ns=36,Ntp=27
22.5; 9.5,0.4;     SiH4,jc=1,Ns=36,Ntp=27
22.5; 10.3,1.2;     LKH4,jc=1,Ns=36,Ntp=27
22.5; 12.3,2.5;     LKH4,jc=1,Ns=36,Ntp=27
22.5; 11.8,0.8;     TNH4,jc=1,Ns=36,Ntp=27
22.5; 1111.6,1091.7;     MVH4,jc=1,Ns=37,Ntp=65
22.5; 15.0,1.7;     RIH4,jc=1,Ns=37,Ntp=66
22.5; 11.4,1.3;     RIH4,jc=1,Ns=37,Ntp=65
22.5; 11.3,1.1;     CRH4,jc=1,Ns=37,Ntp=65
22.5; 10.4,0.6;     EuH4,jc=1,Ns=37,Ntp=65
22.5; 10.3,0.8;     TNH4,jc=1,Ns=37,Ntp=65

и так далее
Это работа скрипта на реально рынке
для каждого инструмента делается подписка на три свечи 1 мин 5 мин и 30 мин
Всего в КВИКЕ выбрано 350 инструментов и 51 параметр.
Мой робот
 
продолжаю свой рассказ.
Ранее я привел вариант фильтрации бумаг по листингу в колбеке OnParam.
Но после тестирования решил все же не делать в колбеках обработки, а передать ее в main и дополнительные потоки из пула потоков ОС.
В итоге все колбеки у меня стали близнецами и основные из них выглядят вот так:
Код
function OnOrder(t)  tprm[#tprm+1]={2,t}; nkevent.Set(event); end
function OnStopOrder(t) tprm[#tprm+1]={3,t}; nkevent.Set(event); end
function OnTrade(t)     tprm[#tprm+1]={4,t}; nkevent.Set(event);  end 
function OnParam(c,s)    tprm[#tprm+1]={14,{c,s}}; nkevent.Set(event); end
function OnTransReply(t) tprm[#tprm+1]={1,t};    nkevent.Set(event); end

Немного о быстродействии.
Задержка передачи данных их колбеков в main составляет примерно 30 мкс или 0.00003 сек.
Причем в начале работы скрипта создается большая очередь на регистрацию бумаг.
Вот пример лога  Ntp=116 -- это число бумаг в очереди на регистрацию
Первое число 27.9 - это время передачи из колбека в main
Второе число 326904 -это время регистрации в мкс
Регистрация каждого инструмента выполняется один раз в момент первого изменения его параметров в ТТП
Код
27.9; 326904.3,326879.3;     NVTK,jc=2,Ns=49,Ntp=116
27.9; 509953.5,509925.5;     YNDX,jc=2,Ns=50,Ntp=115
27.9; 15.5,13.8;     ROLO,jc=2,Ns=51,Ntp=114
27.9; 4.3,3.3;     GCHE,jc=2,Ns=51,Ntp=113
27.9; 515438.0,515414.0;     AFKS,jc=2,Ns=52,Ntp=112
27.9; 17.7,3.2;     SELG,jc=2,Ns=52,Ntp=111
27.9; 14.0,12.8;     MSTT,jc=2,Ns=53,Ntp=110
27.9; 251507.0,251481.2;     ETLN,jc=2,Ns=54,Ntp=109
27.9; 10.5,8.4;     TRMK,jc=2,Ns=54,Ntp=108
27.9; 446567.4,446545.8;     PIKK,jc=2,Ns=55,Ntp=107
27.9; 7.8,6.2;     YRSBP,jc=2,Ns=55,Ntp=106
27.9; 4.3,3.3;     RZSB,jc=2,Ns=55,Ntp=105
27.9; 11.6,10.8;     NMTP,jc=2,Ns=56,Ntp=104
27.9; 3.5,2.6;     BLNG,jc=2,Ns=56,Ntp=103
27.9; 468720.0,468695.7;     TRNFP,jc=2,Ns=57,Ntp=102
27.9; 7.8,6.0;     RKKE,jc=2,Ns=57,Ntp=101
27.9; 326269.2,326242.5;     POLY,jc=2,Ns=58,Ntp=100
27.9; 17.8,16.0;     SLEN,jc=2,Ns=59,Ntp=99
27.9; 5.4,4.1;     GECO,jc=2,Ns=59,Ntp=98
27.9; 7.6,6.6;     RBCM,jc=2,Ns=60,Ntp=97
27.9; 158920.9,158894.7;     MTLRP,jc=2,Ns=61,Ntp=96
27.9; 10.7,8.8;     ABIO,jc=2,Ns=61,Ntp=95
27.9; 3.3,1.9;     NKNCP,jc=2,Ns=61,Ntp=94
27.9; 178460.4,178431.0;     VKCO,jc=2,Ns=62,Ntp=93
Мой робот
 
Цитата
Serge123 написал:
А что конкретно даёт эта OnParam? Я сейчас глянул  https://luaq.ru/OnParam.html  и не понял, как узнать, какие параметры изменились? Их же вагон с тележкой...  
Этот колбек я использую как индикатор движения рынка и что конкретно двигалось.
На основе этого колбека, как написал рвнее,  у меня будут работать стопы.
 
Мой робот
 
Цитата
Serge123 написал:
Какой уровень дохода прогнозируется? Сколько %% годовых чистыми от начального депозита?    
вот картинка робота на основе индикатора и нейронной сети.
Нижний график - это % изменения депозита
белый - итого
зеленый -лонг
синий - шорт
на картинках изменение депозита за год, за месяц и за день.




Это робот на одну бумагу -сбербанк. Тайм 30 минут.
Торгует без плеч и без реинвестирования прибыли.
Хочу сделать на произвольное число бумаг и с самообучением.
---------------
Планирую от достигнутого.
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Цитата
Glukator написал:
Цитата
nikolz написал:
 Glukator  ,
Самые первые фундаментальные книги для  удовлетворения академического интереса:
1. Л.Рабинер, Б.Гоулд. Теория и применение Цифровой обработки сигналов. стр.847
2. Дж.Бендат, А.Пирсол "Прикладной анализ случайных данных" стр. 540
Возможно, дело в годе издания, но в первая книга закончилась на стр. 835, а во второй с. 540 указывает на оглавление. В любом случае ни там, ни там не нашел даже упоминания об однородности/неоднородности случайных процессов ни в оглавлении, ни в предметном указателе.
Цитата
VPM написал:
Glukator ,  Я Вас понял, Вы торгуете методы описанные  Владимир , .
Интересный вывод, но нет :) Механика торговли - да, построена по идеям Владимира. Потому что эти идеи - о решении объемных задач малыми ресурсами с минимальными глюками. В остальном же мы, видимо, просто приходим постепенно к сходным решениям - почему бы и нет?
прикольно. стр - это объем книги. Думал что понятно.
Для академического интереса надо читать всю книгу, а не только оглавление.
Вы же просили книгу, а не ответ на конкретный вопрос по статистическому анализу.  
Очереди и двойные очереди в луа, Пример из книги Р.Е.
 
Glukator,
Самые первые фундаментальные книги для  удовлетворения академического интереса:
1. Л.Рабинер, Б.Гоулд. Теория и применение Цифровой обработки сигналов. стр.847
2. Дж.Бендат, А.Пирсол "Прикладной анализ случайных данных" стр. 540
Примеры dll на GCC 64 для работы со скриптом
 
Цитата
Serge123 написал:
Уточнение: на си я получаю текущее время моего ПК через GetLocalTime, три часа разницы...
я же написал : " в версиях от 5.3 "  т е и в 5.3 и 5.4 и дальше - разные.
-------------------
Для измерения времени работы напишите две ф-ции на си в DLL типа
Код
LARGE_INTEGER count;
LARGE_INTEGER count1;
static int start(lua_State *L) { QueryPerformanceCounter(&count); return 0; }
static int stop(lua_State *L) {QueryPerformanceCounter(&count1);
    lua_pushinteger(L,(count1.QuadPart-count.QuadPart));   return 1; }


квант времени 0.1 мкс.
=====================  
Я синхронизирую компьютер с сервером точного времени.
Погрешность синхронизации не более 10 ms.
Можно в скрипт принимать с сервера точного времени.
----------------------  
Еще учитывайте, что квант времени задачи в винде это 10 ms.
===================  
Обработку колбеков выполняю выношу в main и в других потоках из пула потоков.
Поэтому все колбеки у меня близнецы:
Код
function OnTransReply(t) tprm[#tprm+1]={1,t};    nkevent.Set(event); end
function OnOrder(t)  tprm[#tprm+1]={2,t}; nkevent.Set(event); end
function OnStopOrder(t) tprm[#tprm+1]={3,t}; nkevent.Set(event);     end
function OnTrade(t)  tprm[#tprm+1]={4,t}; nkevent.Set(event);end 
function OnParam(c,s) tprm[#tprm+1]={14,{c,s}}; nkevent.Set(event);    end
...
Мой робот
 
Добрый день,
Решил замутить тему о том, как я строю робота.
-------------------
В данной теме, если не лень, буду описывать  основные блоки нового робота,
которого сейчас пишу.
--------------  
Данный робот обрабатывает информацию по всем инструментам, на которые мы подписываемся в терминале 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 написал:
Здравствуйте. Есть ли возможность получить последние котировки в терминале вне рабочие часы биржи? Иногда нужно посмотреть рано утром, а выпрыгивает окно "Соединение установить не удалось" и терминал открывается с неактуальными котировкам.
Если сервер брокера не работает, то можно у финама посмотреть.
Страницы: Пред. 1 ... 9 10 11 12 13 14 15 16 17 18 19 ... 78 След.
Наверх