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

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

Страницы: 1
тестовый квик не учитывает размер лота в getDepoEx и OnDepoLimit
 
Да, в штуках выдает именно сервер брокера. Оригинально, конечно, что это может меняться в настройках.
Но я понял, спасибо.
тестовый квик не учитывает размер лота в getDepoEx и OnDepoLimit
 
Из описания OnDepoLimit:
Код
currentbal NUMBER Текущий остаток по бумагам

Сергей, или вы имеет в виду, что у брокеров текущий остаток по бумаге может быть настроен на вывод в лотах?
тестовый квик не учитывает размер лота в getDepoEx и OnDepoLimit
 
Из-за этого неудобно делать прогоны стратегий на тестовом Квике. На мой взгляд, разумнее поправить это на тестовом сервере, чем стольким людям адаптировать свои программы.
Подключение сторонних библиотек в Lua скрипте
 
Для поиска зависимостей dll помогает программа Dependency Walker, в которой нужно открыть проблемную dll.
тестовый квик не учитывает размер лота в getDepoEx и OnDepoLimit
 
Здравствуйте,

Если на тестовом счете у нас 1 лот акций Газпрома, то скрипт ниже так и напишет для тестового счета на старте "getDepoEx 1", при покупке еще одной напишет "OnDepoLimit 2". То есть выводит currentbal в лотах. Хотя по таблице текущих торгов у Газпрома 10.

Если же скрипт запустить на боевом клиенте QUIK, то позиция будет кратна 10 (выводит в акциях).
Код
//вопросы ниже заменить на идентификаторы
clientCode = "?"
firmId = "?"
trdAccId = "?"
t2_kind = 0

function OnDepoLimit(bt)
    if (bt.client_code == clientCode and bt.limit_kind == t2_kind) then
        PrintDbgStr("OnDepoLimit "..bt.currentbal)
    end
end

function main()

    local dt = getDepoEx(firmId, clientCode, "GAZP", trdAccId, t2_kind)
    if dt ~= null then
        PrintDbgStr("getDepoEx "..dt.currentbal)
        else  PrintDbgStr("null")
    end

    while true do
        sleep(1000)
    end

end
неуникальный номер сделки
 
Сергей, здравствуйте.

Да, так точно, эти обе сделки пришли от меня. В принципе, это уже видно по тому, что ID транзакции заполнен (пришли из файловой интеграции).
То есть правильно, номер один так как это одна сделка.

Спасибо и с наступившим Новым Годом вас!
неуникальный номер сделки
 
В тестовом квике заметил, что в таблице сделок могут появляться мои сделки с одинаковыми номерами. Они всегда соседние, по одному инструменты, кол-ву и цене и дате. Разное - это номер заявки и направление сделки (если первая купля, то вторая продажа).
Это нормально, что идентификатор сделки на самом деле не уникален? Или это такая хитрая оптимизация биржи, что по сути состояние счета не меняется.
Пример во вложении
OnMoneyLimit шлет четыре события вместо одного
 
Ясно. По OnOrder и OnTrade я фиксирую, что абсолютно одинаковые сообщения могут приходить.
OnMoneyLimit шлет четыре события вместо одного
 
Егор, по-видимому, проблема шире.
Событий от OnTrade и OnOrder приходят дважды. Взять к примеру OnTrade - по документации он должен приходить при изменении параметров сделки. Но вот скрипт -
Код
function table.val_to_str ( v )
    if "string" == type( v ) then
        v = string.gsub( v, "\n", "\\n" )
        if string.match( string.gsub(v,"[^'\"]",""), '^"+$' ) then
            return "'" .. v .. "'"
        end
        return '"' .. string.gsub(v,'"', '\\"' ) .. '"'
    else
        return "table" == type( v ) and table.tostring( v ) or
                tostring( v )
    end
end

function table.key_to_str ( k )
    if "string" == type( k ) and string.match( k, "^[_%a][_%a%d]*$" ) then
        return k
    else
        return "[" .. table.val_to_str( k ) .. "]"
    end
end

function table.tostring( tbl )
    local result, done = {}, {}
    for k, v in ipairs( tbl ) do
        table.ins ert( result, table.val_to_str( v ) )
        done[ k ] = true
    end
    for k, v in pairs( tbl ) do
        if not done[ k ] then
            table.ins ert( result,
                table.key_to_str( k ) .. "=" .. table.val_to_str( v ) )
        end
    end
    return "{" .. table.concat( result, "," ) .. "}"
end

function OnTrade(te)
    PrintDbgStr("new trade: "..table.tostring(te))
end

function OnOrder(oe)
    PrintDbgStr("new order: " .. table.tostring(oe))
end

function main()
    while true do
        sleep(1000)
    end
end

Посылаю заявку в терминале на покупку одного лота - исполняется в одну сделку. Но в логах:
Код
[2932] new trade: {price=131.9,settle_date=0,trade_num=2367642180,lower_discount=0,exchange_comission=0,value=1319,qty=1,reporate=0,clearing_bank_accid="",class_code="QJSIM",userid="NC0011100000",tradenum=2367642180,flags=0,canceled_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},clearing_firmid="",kind=1,canceled_uid=0,ordernum=3456591012,sec_code="SBER",system_ref="",block_securities=0,repoterm=0,broker_comission=0,period=1,client_code="11309",linked_trade=0,firmid="NC0011100000",account="NL0011100043",yield=0,seccode="SBER",trans_id=0,upper_discount=0,repo2value=0,start_discount=0,tech_center_comission=0,trade_currency="SUR",accrued2=0,order_num=3456591012,repovalue=0,exchange_code="",accruedint=0,settle_currency="",cpfirmid="",uid=116882,brokerref="11309/",station_id="",price2=0,clearing_comission=0,settlecode="",bank_acc_id=""}
[2932] new trade: {price=131.9,settle_date=0,trade_num=2367642180,lower_discount=0,exchange_comission=0,value=1319,qty=1,reporate=0,clearing_bank_accid="",class_code="QJSIM",userid="NC0011100000",tradenum=2367642180,flags=0,canceled_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},clearing_firmid="",kind=1,canceled_uid=0,ordernum=3456591012,sec_code="SBER",system_ref="",block_securities=0,repoterm=0,broker_comission=0,period=1,client_code="11309",linked_trade=0,firmid="NC0011100000",account="NL0011100043",yield=0,seccode="SBER",trans_id=0,upper_discount=0,repo2value=0,start_discount=0,tech_center_comission=0,trade_currency="SUR",accrued2=0,order_num=3456591012,repovalue=0,exchange_code="",accruedint=0,settle_currency="",cpfirmid="",uid=116882,brokerref="11309/",station_id="",price2=0,clearing_comission=0,settlecode="",bank_acc_id=""}
[2932] new order: {withdraw_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},price=0,value_entry_type=0,balance=0,repo_value_balance=0,value=0,qty=1,passive_only_order=0,class_code="QJSIM",activation_time=0,userid="NC0011100000",expiry=-1,flags=16,linkedorder=0,ordernum=3456591012,sec_code="SBER",canceled_uid=0,side_qualifier=0,client_code="11309",visible=0,firmid="NC0011100000",datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},yield=0,reject_reason="",capacity=0,acnt_type=0,repo2val ue=0,start_discount=0,min_qty=0,ext_order_flags=0,exec_type=0,order_num=3456591012,repovalue=0,repoterm=0,accruedint=0,account="NL0011100043",seccode="SBER",uid=0,brokerref="11309/",exchange_code="",settlecode="",price2=0,trans_id=0,bank_acc_id=""}
[2932] new order: {withdraw_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},price=0,value_entry_type=0,balance=0,repo_value_balance=0,value=0,qty=1,passive_only_order=0,class_code="QJSIM",activation_time=0,userid="NC0011100000",expiry=-1,flags=16,linkedorder=0,ordernum=3456591012,sec_code="SBER",canceled_uid=0,side_qualifier=0,client_code="11309",visible=0,firmid="NC0011100000",datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},yield=0,reject_reason="",capacity=0,acnt_type=0,repo2val ue=0,start_discount=0,min_qty=0,ext_order_flags=0,exec_type=0,order_num=3456591012,repovalue=0,repoterm=0,accruedint=0,account="NL0011100043",seccode="SBER",uid=116882,brokerref="11309/",exchange_code="",settlecode="",price2=0,trans_id=0,bank_acc_id=""}

События в OnTrade полностью одинаковы.
События в OnOrder отличаются только тем, что в первом uid = 0, а во втором uid = идентификатору моего пользователя. Что тоже непонятно, заявка же посылалась изначально моим пользователем.
Ключевой вопрос - зачем два события приходят, если они одинаковые?

Если что, это демо QUIK от ARQA.
OnMoneyLimit шлет четыре события вместо одного
 
Здравствуйте, вот
Код
function table.val_to_str ( v )
    if "string" == type( v ) then
        v = string.gsub( v, "\n", "\\n" )
        if string.match( string.gsub(v,"[^'\"]",""), '^"+$' ) then
            return "'" .. v .. "'"
        end
        return '"' .. string.gsub(v,'"', '\\"' ) .. '"'
    else
        return "table" == type( v ) and table.tostring( v ) or
                tostring( v )
    end
end

function table.key_to_str ( k )
    if "string" == type( k ) and string.match( k, "^[_%a][_%a%d]*$" ) then
        return k
    else
        return "[" .. table.val_to_str( k ) .. "]"
    end
end

function table.tostring( tbl )
    local result, done = {}, {}
    for k, v in ipairs( tbl ) do
        table.insert( result, table.val_to_str( v ) )
        done[ k ] = true
    end
    for k, v in pairs( tbl ) do
        if not done[ k ] then
            table.insert( result,
                table.key_to_str( k ) .. "=" .. table.val_to_str( v ) )
        end
    end
    return "{" .. table.concat( result, "," ) .. "}"
end

function OnMoneyLimit(bt)
    PrintDbgStr(table.tostring(bt))
end


function main()
    while true do
        sleep(1000)
    end
end
OnMoneyLimit шлет четыре события вместо одного
 
Суть проблемы - подписываюсь на изменение денежного лимита, совершаю одну сделку и OnMoneyLimit срабатывает аж четыре раза.
Код
function OnMoneyLimit(bt)
    -- просто выводит все поля таблицы
    PrintDbgStr(table.tostring(bt))
end

Логи такие (первое событие чуть отличается от след. трех одинаковых):
Код
[2932] {leverage=2,currentbal=280000.67,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=1448.19,locked_value_coef=0.29,currentlimit=0,tag="EQTV"}
[2932] {leverage=2,currentbal=278672.11,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=0,locked_value_coef=0,currentlimit=0,tag="EQTV"}
[2932] {leverage=2,currentbal=278672.11,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=0,locked_value_coef=0,currentlimit=0,tag="EQTV"}
[2932] {leverage=2,currentbal=278672.11,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=0,locked_value_coef=0,currentlimit=0,tag="EQTV"}

Ответьте, пожалуйста, на вопросы:
1) Согласно документации, OnMoneyLimit вызывается только при изменении денежного лимита. Тогда почему первое события в currentbal содержит старое значение лимита?
2) Почему 3 след. события одинаковые? Я подозреваю, что это связано с режимами T0, T1, T2, но ведь limit_kind там 0 ?


QUIK последний 7.14.
Страницы: 1
Наверх