Самый простой, по сути код. Но Lua выдаёт ошибку при компилировании без function main(), при том что Quik выполняет этот код без конструкции main или function. Раньше такой ошибки не было.message(«a»)
------------------------------Output------------------------------
>lua -e «io.stdout:setvbuf 'no'» «a.lua»
lua: a.lua:1: attempt to call global 'message' (a nil value)
stack traceback:
a.lua:1: in main chunk
[C]: ?
>Exit code: 1
PORTFOLIO_EX LUK; DESCRIPTION Объёмы купли/продажи за интервал; CLIENTS_LIST ALL_CLIENTS; FIRMS_LIST FIRMID; PROGRAM 'Автор: Михаил Булычев 'Что делает: ' подсчитывается объёмы купли\продажи по определённому инструменту за ' заданный интервал 'Как использовать: ' В следующих строках следует указать код бумаги и код класса для ' отслеживаемого инструмента '=============================НАСТРОЙКИ=============================== SecCode="LKOH" ' Код инструмента ClassCode="TQBR" 'Код класса interv=3600 'является интервалом в секундах razn = 0 'смещение часового пояса относительно времени торговой системы. '=============================НАСТРОЙКИ=============================== FUNC is_in_interval(interval, trade_time, sys_time, hour_shift) csys_time_value=0 c_time_value=0 csys_time_value =0 + (0 + get_value(sys_time, "Hour") + hour_shift)*3600 + _ get_value(sys_time, "Min")*60 + _ get_value(sys_time, "Sec") c_time_value=0 + ((0 + substr("" & trade_time, 0, 2)) * 3600) + ((0 + substr("" & trade_time, 2, 2)) * 60) + ((0 + substr("" & trade_time, 4, 2))) csys_time_value = csys_time_value + 0 c_time_value = c_time_value + 0 k=csys_time_value - c_time_value if k <= interval result=1 else result=0 end if END FUNC buy_value=0 sell_value=0 total_value=0 sys_time = GET_DATETIME() delete_all_items() mString=create_map() j=0 n=get_number_of("ALL_TRADES") for i from 0 to n mTrade=get_item("ALL_TRADES", n-i) trade_time=get_value(mTrade, "TIME") if (get_value(mTrade, "SECCODE")= SecCode) AND (get_value(mTrade, "CLASSCODE")= ClassCode) if is_in_interval(interv, trade_time, sys_time, 0-razn) = 1 value=0+get_value(mTrade, "VALUE") j=j+1 if (get_value(mTrade, "OPERATION") = "BUY") buy_value=buy_value+value else sell_value=sell_value+value end if total_value=total_value+value else break end if end if end for mString=set_value(mString, "vol", total_value) mString=set_value(mString, "volbuy", buy_value) mString=set_value(mString, "volsell", sell_value) add_item(1, mString) END_PROGRAM PARAMETER vol; PARAMETER_TITLE vol; PARAMETER_DESCRIPTION Купили; PARAMETER_TYPE NUMERIC(10,0); END PARAMETER volbuy; PARAMETER_TITLE volbuy; PARAMETER_DESCRIPTION Купили; PARAMETER_TYPE NUMERIC(10,0); END PARAMETER volsell; PARAMETER_TITLE volsell; PARAMETER_DESCRIPTION Продали; PARAMETER_TYPE NUMERIC(10,0); END END_PORTFOLIO_EX
Возможности новой версии
1. Реализован функционал быстрого фильтра в таблицах. Для активации \ деактивации быстрого фильтра используется пункт «Включить быстрый фильтр» \ «Выключить быстрый фильтр» контекстного меню, открываемого для заголовка самого левого столбца таблицы. Данный функционал позволяет фильтровать информацию в таблицах QUIK с наглядным отображением критериев фильтрации.
void lua_pushnumber (lua_State *L, lua_Number n);
const char *lua_pushstring (lua_State *L, const char *s);
lua_Number lua_tonumber (lua_State *L, int index);
const char *lua_tostring (lua_State *L, int index);где L — указатель Lua-стэка, а index — абсолютный или относительный индекс переменной в стэке.