26

Re: Проблемы со знанием Lua

kalikazandr пишет:

динамически будет заполняться в OnParam, и заново заполняться при закрытии

Да, по OnParam. Спасибо большое за код, разберусь.

27

Re: Проблемы со знанием Lua

Да, очень полезный код.
А еще... А вот есть окно Lua с определенным перечнем бумаг, по OnParam изменяется, допустим, котировка одной из бумаг, но эта бумага в конце списка и не помещается в видимое окно таблицы, как сделать чтобы список автоматически прокрутился и сфокусировался на ней?)) Куда смотреть?)

28

Re: Проблемы со знанием Lua

Xantrax пишет:

сфокусировался на ней

С этой задачей успешно справляется функция SetSeletedRow().

29

Re: Проблемы со знанием Lua

А вот еще вопрос. Возьмем функцию getParamEx, она возвращает везде STRING, так это что, каждый раз приводить к tonumber()?
Или другими словами, какие переменные можно сравнивать, какие нет?
table  == number;
string == number...

30

Re: Проблемы со знанием Lua

каждый раз приводить. вот, я делал хелпер чтобы доставать параметры:

sec_params_fetcher = {}
setmetatable(sec_params_fetcher, {
    __call = function(__call_self, ...)
        local tbl = {}
        if select('#', ...) == 0 then 
            setmetatable(tbl, {
                __index = function(self, class_code)
                    local sec_codes = {}
                    setmetatable(sec_codes, {
                        __index  = function(self, sec_code)
                            local sec_params = __call_self(class_code, sec_code)
                            rawset(self, sec_code, sec_params)
                            return sec_params
                        end
                    })
                    rawset(self, class_code, sec_codes)
                    return sec_codes
                end
            })
        else
            local class_code, sec_code, is_cached = ...
            setmetatable(tbl, {
                __index = function(self, key)
                    local res = rawget(getmetatable(self) or {}, key)
                    if res == nil then 
                        local paramtable = getParamEx(class_code, sec_code, key)
                        if paramtable ~= nil and paramtable.result == '1' then 
                            if paramtable.param_type == '1' or paramtable.param_type == '2' or paramtable.param_type == '4' then
                                res = tonumber(paramtable.param_value)
                            elseif paramtable.param_type == '3' then
                                res = paramtable.param_image
                            elseif paramtable.param_type == '5' then
                                local t = {year = 1970, month = 1, day = 1}
                                t.hour,t.min,t.sec = string.match(paramtable.param_image, "(%d%d)%p(%d%d)%p(%d%d)") 
                                res = os.time(t)
                            elseif paramtable.param_type == '6' then
                                local d = {hour = 0, min = 0, sec = 0}
                                d.day,d.month,d.year = string.match(paramtable.param_image, "(%d*)\.(%d*)\.(%d*)")
                                res = os.time(d)
                            else
                                res = paramtable.param_image
                            end
                        end
                        if res ~= nil and self.__cached then rawset(self, key, res) end
                    end
                    return res
                end,
                SetCached = function(self, is_cached)
                    if (is_cached ~= true) then
                        for i, v in pairs(self) do rawset(self, i, nil) end
                    end
                    rawset(getmetatable(self) or {}, '__cached', (is_cached == true))
                end
            })
            tbl:SetCached(is_cached)
        end
        return tbl
    end
})

-- securities parameters list (QUIK 8.1):
--
-- LONGNAME, SHORTNAME, CODE, ISINCODE, REGNUMBER, CFI_CODE, CLASSNAME, CLASS_CODE, TRADE_DATE_CODE, SEC_FACE_VALUE, SEC_FACE_UNIT, SEC_SCALE, LCURRENTPRICE,
-- SEC_PRICE_STEP, DISCOUNT1, DISCOUNT2, DISCOUNT3, SEC_COMMENT, LOTSIZE, SECTYPE, CURRENCYID, LISTLEVEL, PRIMARYDIST, QUALIFIED, ASSURED, ANONTRADE, STATUS, 
-- BID, BIDDEPTH, BIDDEPTHT, NUMBIDS, OFFER, OFFERDEPTH, OFFERDEPTHT, NUMOFFERS, OPEN, HIGH, LOW, LAST, CHANGE, QTY, TIME, VOLTODAY, VALTODAY, TRADINGSTATUS, 
-- VALUE, WAPRICE, HIGHBID, LOWOFFER, NUMTRADES, PREVPRICE, PREVWAPRICE, CLOSEPRICE, LASTCHANGE, MARKETPRICE, PRICEMAX, PRICEMIN, SELLDEPO, BUYDEPO, STEPPRICET, 
-- STEPPRICE, CLPRICE, STARTTIME, ENDTIME, MAT_DATE, DAYS_TO_MAT_DATE, OPTIONBASECLASS, R_SETTLEPRICE, OPENPCTCHANGE, STEP_IN_CURRENCY, PRICEMINUSPREVWA,  
-- SETTLEDATE, SETTLECODE, SETTLEDATE1, TRADINGPHASE, FIRST_CUR, SECOND_CUR, DPVALINDICATORBU, DPVALINDICATORSE, MARKETPRICETODAY, ISSUESIZE, PREVDATE, BASEPRICE, 
-- LCLOSEPRICE, QUOTEBASIS, ADMITTEDQUOTE, PREVADMITTEDQUOT, LASTBID, LASTOFFER, MARKETPRICE2, PREVLEGALCLOSEPR, OPENPERIODPRICE, MIN_CURR_LAST, MIN_CURR_LAST_TI, 
-- ISSUESIZEPLACED, COUNTERPRICE, PREVLOTSIZE, LOTSIZECHANGEDAT, PLANNEDTIME, AUCTPRICE, AUCTVALUE, AUCTVOLUME, AUCTNUMTRADES, IMBALANCE, MARKETVOLB, MARKETVOLS

function main()
    local sec = sec_params_fetcher()
    -- example 1:
    message('TQBR@SBER.LAST == ' .. tostring(sec.TQBR.SBER.LAST))
    message('TQBR@VTBR.LAST == ' .. tostring(sec.TQBR.VTBR.LAST))
    message('TQBR@SBER.TRADINGSTATUS == ' .. tostring(sec.TQBR.SBER.TRADINGSTATUS))
    -- example 2:
    local tqbr_sber = sec.TQBR.SBER
    message('TQBR@SBER.SHORTNAME == ' .. tostring(tqbr_sber.SHORTNAME))
    -- example 3:
    local tqbr = sec.TQBR
    message('TQBR@VTBR.STARTTIME == ' .. tostring(tqbr.VTBR.STARTTIME))
    tqbr.SBER:SetCached(true) -- enable parameter caching for SBER
    message('TQBR@SBER.SETTLEDATE == ' .. tostring(tqbr.SBER.SETTLEDATE))
    -- example 4:
    local tqbr_rosn_cached = sec_params_fetcher('TQBR', 'ROSN', true) -- enable parameter caching, getParamEx() is called only once per parameter
    message('TQBR@ROSN.SHORTNAME == ' .. tostring(tqbr_rosn_cached.SHORTNAME))
end

31

Re: Проблемы со знанием Lua

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

32

Re: Проблемы со знанием Lua

Все, на праздники форум встал, ни новых тем, ни уж тем более ответов...((

33

Re: Проблемы со знанием Lua

Xantrax пишет:

Все, на праздники форум встал, ни новых тем, ни уж тем более ответов...((

вопрос не по теме, по этому и нет ответа.
каждый находит свое решение, которое его устраивает.

34

Re: Проблемы со знанием Lua

kalikazandr пишет:

вопрос не по теме, по этому и нет ответа.
каждый находит свое решение, которое его устраивает.

Смысле, что для данного вопроса нужно задать отдельную тему?
Ну, а какие вообще есть решения?
Типа:
1) доступ к компьютеру (серверу) на бирже;
2) выставление ордера с некоторым отступом;
Что еще может быть?

35

Re: Проблемы со знанием Lua

Xantrax пишет:

Смысле, что для данного вопроса нужно задать отдельную тему?

нет, это не относится к тематике этого форума.
по вашему вопросу.
нужно понимать, что любое решение имеет 2 стороны медали.
вы что-то улучшите, например скорость расчета, (с++ и ко-локация), несомненно у вас увеличится кол-во сделок, но так же увеличится кол-во отрицательных сделок, которых вы не видите в текущей реализации (qlua+quik), а минус с них может быть значительным, т.е. совсем значительным и стратегия перестанет работать.
начнете придумывать дополнительные фильтры, которые уменьшат отрицательные сделки, но уменьшат и самые лучшие положительные сделки - опять тупик и новые фильтры, которые в свою очередь уменьшат скорость расчета.
это касается любого вашего решения в т.ч. и увеличение отступа не гарантирует улучшение конечного результата.
и выбирать оптимальное решение только вам, готового решения нет, под каждую стратегию - свое уникальное решение.