По следам этого поста скрипт на qlua, называется «Светофор».
Суть скрипта- отслеживать дистанцию до «дна», которое представляет собой лои 2008 года+накопленная инфляция.
Подсветка строк:
зеленым- цена ниже уровня инфляции
желтым — до дна менее 50%
красным — до дна более 80%
сортировка строк по ctrl+клик
В чем не смог разобраться:
как получить лой 2008 года по акции (вбито вручную)
как получить полное название компаний (вбито вручную)
кто знает — подскажите!
Как это выглядит в Квике:

Бэктест на проливе 2014 года:

Когда передо мной встала задача удаления поставленного стоп-ордера, наткнулся в интернете на скудность информации по данной тематике.
Самая распространенная ошибка начинающего программиста отправка в SendTransaction в STOP_ORDER_KEY trans_id стоп-ордера
Робот выставляет стоп-заявку на покупку по определенной цене, затем через 2 секунды снимает её.
Также в коде имеются следующие фишки:

Эта оценочная функция может быть эффективно вычислена и она нечувствительна к выбросам. Она может быть существенно более точна, чем неробастный метод наименьших квадратов для несимметричных и гетероскедастичных данных и хорошо конкурирует с неробастным методом наименьших квадратов даже для нормально распределенных данных в терминах статистической мощности.
Метод признан «наиболее популярной непараметрической техникой оценки линейного тренда»

function OnCalculate(index) return Size(), index endА вот результат:

--require "w32" -- говорят что нужна, на практике не увидел
require "luacom"
local isrun = true
function OnStop(flag)
isrun = false
end
function main()
--w32.CoInitialize(nil)
ML = luacom.CreateObject("matlab.application.single")
assert(ML)
ML.Visible = 1 -- не обязательно там все равно ничего в принципе не видно, но проще убить процесс если что
t = tos(0)
message("tos = " .. tostring(#t)) -- меньше 150 тк фильтр по "SPBFUT"
ML:PutWorkspaceData("C1", "base", t); -- отправляем в МЛ под именем С1
message("Put")
wd = ML:GetWorkspaceData('C1', 'base') -- а вот так получаем обратно
message("C1(1,1) = " .. tostring(wd[1][1]))
ML:Execute("r = TST;") -- в МЛ у меня эта функция пишет данные в файл и возвращает "1", если все гладко
r = ML:GetWorkspaceData('r', 'base') -- на прямую результат возвращает криво, так наверно удобнее
message("Execute TST = " .. tostring®)
ML:Quit()
ML = nil
--w32.CoUninitialize(nil)
message("end COM ML")
end
function tos(n) -- читает ТОС в матрицу начиная с "n"
local outcell = {}
local cnt = 0
nn = getNumberOf("all_trades")
for i = n, 150 do -- для примера хватит 150 строчек, но максимум 1500 * 5
-- приходится ограничить - у LuaVM случается грыжа при передаче в МЛ более чем 2000*5
trade = getItem("all_trades", i)
cc = trade["class_code"]
if cc == "SPBFUT" then
cnt = cnt + 1
dt = trade["datetime"]
dt = dt.hour*10000 + dt.min*100 + dt.sec
outcell[cnt] = {trade.trade_num, trade.sec_code, trade.qty, trade.price, dt}
end
end
return outcell
end