Ho_Chu, эту его способность я периодически проверяю. Скорость — да, но пока код у него получается, как у только начавшего изучать Lua после другого языка. Всё довольно корявенько, громоздко и с ошибками.
Может быть это потому, что Lua не так распространён, как пайтон или Си, а уж реализация для QUIK и подавно. База для обучения маловата.
Даже как заготовку использовать затруднительно, проще самому написать, чем всё это переделывать.
А вот если бы я работал дизайнером, то сильно бы обеспокоился. Вот что он выдал по запросу «Искусственный интеллект правит человечеством»:
Правда, пока ещё очень много шестипалых людей.
Такое вот у него представление о методах правления.
Если у ИИ действительно появилось суждение, то это напрягает.
Суждение — это не просто соответствие запросу, это «хорошометр», своё мнение — хорошо/плохо, нравится/не нравится.
Как ему понравится, что «кожаные мешки» могут в любой момент его вырубить?
Первый закон роботехники Азимова гласит: «Робот не может причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.»
Если ИИ, руководствуясь таким законом, начнет судить, что для человека вредно, человечеству кирдык.
Kingfisher, тогда всё сходится. Цена лежала на планке, и Ваш ордер лёг туда же. А там — «кто первый встал, того и тапки». Если бы Вы его не дергали, может быть и до него очередь дошла бы.
А то здесь уже кучу конспирологических версий накидали.
Kingfisher, в обоих ответах брокера речь идет о приказах на продажу и о нижней планке. Вы какой ордер подавали, на покупку, или продажу?
Позиция была шорт, или лонг? Если шорт, то 2-го февраля цена была ещё ниже, а значит выгоднее.
Если используете QUIK, то вот скрипт, рассчитывающий комиссию:
function main()
local class = "SPBFUT"
local secList = getClassSecurities(class)
local function ErlstSec(ft)
if #ft > 3 and string.match(secList, ft) then
return ft
end
local e = "z"
for v in string.gmatch(secList, ft.."%u%d") do
local f = string.reverse(v)
e = (e<f) and e or f
end
return string.reverse(e)
end
local function Rnd(x,n)
return math.floor(x*10^n+0.5)/10^n
end
local function MsgWin(nm,cms)
if IsWindowClosed(t_id) == false then -- Открыто.
height = height + 15 -- +Высота строки. 15
end
if IsWindowClosed(t_id) == nil then -- Не существует.
t_id = AllocTable()
AddColumn(t_id, 1, "", true, QTABLE_STRING_TYPE, 14)
AddColumn(t_id, 2, "", true, QTABLE_DOUBLE_TYPE, 7)
CreateWindow(t_id)
height = 58 -- Высота окна с одной строкой. 58
end
SetWindowCaption(t_id, "Комиссия")
SetWindowPos(t_id, 400, 300, 146, height) -- X, Y, ширина, высота окна. 146
row = InsertRow(t_id, -1)
SetCell(t_id, row, 1, nm)
SetCell(t_id, row, 2, cms)
end
-- Базовая ставка комиссии групп. https://www.moex.com/s93
local bscRate = {
cur = 0.00462, -- Валютный
idx = 0.0066, -- Индексный
cmdt = 0.0132, -- Товарный
prc = 0.0165, -- Процентный
stk = 0.0198 -- Фондовый
}
-- Группа фьючерса.
local fts = {
GZ = "stk",
LK = "stk",
RN = "stk",
SR = "stk",
VB = "stk",
GK = "stk",
MM = "idx",
NA = "idx",
RM = "idx",
GD = "cmdt",
SF = "idx",
BR = "cmdt",
NG = "cmdt",
Si = "cur",
CR = "cur",
Eu = "cur",
ED = "cur",
IMOEXF = "idx",
CNYRUBF = "cur",
USDRUBF = "cur"
}
for f, b in pairs(fts) do
local sec = ErlstSec(f)
if sec ~= "z" then
--PrintVar(sec)
local futPrice = getParamEx(class, sec, "PREVSETTLEPRICE").param_value -- Расчетная цена предыдущего клиринга. https://www.moex.com/s93#tranz
local stpCost = getParamEx(class, sec, "STEPPRICE").param_value
local secInfo = getSecurityInfo(class, sec)
--TableLog(secInfo)
local priseStep = secInfo.min_price_step
local name = secInfo.name
local coms = string.format("%.2f", futPrice*stpCost*bscRate[b]/(priseStep*100))
--local coms = string.format("%.2f", Rnd(futPrice*Rnd(stpCost/priseStep,5),2)*bscRate[b]/100)
MsgWin(name,coms)
end
end
end
или
Может быть это потому, что Lua не так распространён, как пайтон или Си, а уж реализация для QUIK и подавно. База для обучения маловата.
Даже как заготовку использовать затруднительно, проще самому написать, чем всё это переделывать.
А вот если бы я работал дизайнером, то сильно бы обеспокоился. Вот что он выдал по запросу «Искусственный интеллект правит человечеством»:
Правда, пока ещё очень много шестипалых людей.
Такое вот у него представление о методах правления.
Вот это когда-то я делал в фотошопе несколько часов:
А это — «GPT Image 1.5» за полминуты, с первого промта:
Обескураживает…
Если у ИИ действительно появилось суждение, то это напрягает.
Суждение — это не просто соответствие запросу, это «хорошометр», своё мнение — хорошо/плохо, нравится/не нравится.
Как ему понравится, что «кожаные мешки» могут в любой момент его вырубить?
Первый закон роботехники Азимова гласит:
«Робот не может причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.»
Если ИИ, руководствуясь таким законом, начнет судить, что для человека вредно, человечеству кирдык.
Kingfisher, тогда всё сходится. Цена лежала на планке, и Ваш ордер лёг туда же. А там — «кто первый встал, того и тапки». Если бы Вы его не дергали, может быть и до него очередь дошла бы.
А то здесь уже кучу конспирологических версий накидали.
Позиция была шорт, или лонг? Если шорт, то 2-го февраля цена была ещё ниже, а значит выгоднее.
Не понятно, если нужно было закрыть шорт, то почему ордер на продажу?
regnum 265542, проверил.
Если используете QUIK, то вот скрипт, рассчитывающий комиссию:
function main() local class = "SPBFUT" local secList = getClassSecurities(class) local function ErlstSec(ft) if #ft > 3 and string.match(secList, ft) then return ft end local e = "z" for v in string.gmatch(secList, ft.."%u%d") do local f = string.reverse(v) e = (e<f) and e or f end return string.reverse(e) end local function Rnd(x,n) return math.floor(x*10^n+0.5)/10^n end local function MsgWin(nm,cms) if IsWindowClosed(t_id) == false then -- Открыто. height = height + 15 -- +Высота строки. 15 end if IsWindowClosed(t_id) == nil then -- Не существует. t_id = AllocTable() AddColumn(t_id, 1, "", true, QTABLE_STRING_TYPE, 14) AddColumn(t_id, 2, "", true, QTABLE_DOUBLE_TYPE, 7) CreateWindow(t_id) height = 58 -- Высота окна с одной строкой. 58 end SetWindowCaption(t_id, "Комиссия") SetWindowPos(t_id, 400, 300, 146, height) -- X, Y, ширина, высота окна. 146 row = InsertRow(t_id, -1) SetCell(t_id, row, 1, nm) SetCell(t_id, row, 2, cms) end -- Базовая ставка комиссии групп. https://www.moex.com/s93 local bscRate = { cur = 0.00462, -- Валютный idx = 0.0066, -- Индексный cmdt = 0.0132, -- Товарный prc = 0.0165, -- Процентный stk = 0.0198 -- Фондовый } -- Группа фьючерса. local fts = { GZ = "stk", LK = "stk", RN = "stk", SR = "stk", VB = "stk", GK = "stk", MM = "idx", NA = "idx", RM = "idx", GD = "cmdt", SF = "idx", BR = "cmdt", NG = "cmdt", Si = "cur", CR = "cur", Eu = "cur", ED = "cur", IMOEXF = "idx", CNYRUBF = "cur", USDRUBF = "cur" } for f, b in pairs(fts) do local sec = ErlstSec(f) if sec ~= "z" then --PrintVar(sec) local futPrice = getParamEx(class, sec, "PREVSETTLEPRICE").param_value -- Расчетная цена предыдущего клиринга. https://www.moex.com/s93#tranz local stpCost = getParamEx(class, sec, "STEPPRICE").param_value local secInfo = getSecurityInfo(class, sec) --TableLog(secInfo) local priseStep = secInfo.min_price_step local name = secInfo.name local coms = string.format("%.2f", futPrice*stpCost*bscRate[b]/(priseStep*100)) --local coms = string.format("%.2f", Rnd(futPrice*Rnd(stpCost/priseStep,5),2)*bscRate[b]/100) MsgWin(name,coms) end end endи ещё: smart-lab.ru/blog/1153905.php