1 (2015-01-28 11:16:45 отредактировано slkumax)

Тема: Снятие заявки. И снятие всех заявок.

Подскажите пожалуйста, как сделать адекватное снятие заявки теперь по номеру из скрипта на LUA написанном.
Как я понимаю, нужно брать таблицу заявок, искать среди них нужную не исполненную и её снимать.
А снятие всех заявок- искать все неисполненные видимо.
Кстати какой ответ будет давать квик, если заявка не исполнена?

2

Re: Снятие заявки. И снятие всех заявок.

slkumax пишет:

Подскажите пожалуйста, как сделать адекватное снятие заявки теперь по номеру из скрипта на LUA написанном.

По номеру чего? номеру заявки?
Так заявка и снимается по ее номеру.

slkumax пишет:

Как я понимаю, нужно брать таблицу заявок, искать среди них нужную не исполненную и её снимать.

Если вы знаете номер - то искать не нужно, нужно сразу снимать по номеру.
Если номер не знаете - тогда да, искать нужную, только не понятны критерии нужности, но тут разработчику стратегии виднее.

slkumax пишет:

А снятие всех заявок- искать все неисполненные видимо.
Кстати какой ответ будет давать квик, если заявка не исполнена?

Ответ где? не понятно.
С каждой заявкой сопоставлена таблица Lua.
В ней есть поле flags, в котором есть битовые флажки, по ним можно определить активна заявка, снята или исполнена. См. справку.

Или вам нужен пример кода и в этом собственно вопрос?

Было бы здорово, если бы вы как-то поконкретнее формулировали ваши вопросы, иначе не очень понятно что отвечать.

3

Re: Снятие заявки. И снятие всех заявок.

Сейчас мой привод умеет только выставлять заявки. С какой стороны подойти к вопросу снятия, я пока не понимаю. Если есть возможность, покажите пример кода например, как научить привод снимать нужную мне заявку или все заявки.

4 (2015-02-06 12:59:00 отредактировано kalikazandr)

Re: Снятие заявки. И снятие всех заявок.

slkumax пишет:

Сейчас мой привод умеет только выставлять заявки. С какой стороны подойти к вопросу снятия, я пока не понимаю. Если есть возможность, покажите пример кода например, как научить привод снимать нужную мне заявку или все заявки.

local is_run = true
function OnStop() is_run = false end
local table_remove = table.remove
local ccode = "TQBR"
local s_list = {"SBER","GAZP","MTLR"}
local account = --вставка
local clientcode = --вставка
local row = getNumberOf("orders")--№ строки Таблицы заявок
local trans_id = 1
local newOrder = {}--вид: {[order_num1] = row1,[order_num2] = row2,...[order_numN] = rowN}
local MSG = {["B"] = "выставлена заявка Купля:\n№ ",["S"] = "выставлена заявка Продажа:\n№ "}
--функции--
local bBand = bit.band
local orderstatus = function (flags)--статус заявки
    if bBand(flags,1)~=0 then return "A" 
    else
        if bBand(flags,2)~=0 then return "K"
        else return "F" end
    end
end
local orderBS = function (flags)--направление
    if bBand(flags, 4)~=0 then return "S" else return "B" end
end
local sendLimit = function (op, scode, ccode, pri, lot, tr_id)
    local send = {
    ["ACTION"] = "NEW_ORDER",
    ["TRANS_ID"] = tostring(tr_id),
    ["ACCOUNT"] = account,
    ["CLIENT_CODE"] = clientcode,
    ["TYPE"] = "L",
    ["OPERATION"] = op,
    ["CLASSCODE"] = ccode,
    ["SECCODE"] = scode,
    ["PRICE"] = tostring(pri),
    ["QUANTITY"] = tostring(lot)
    }
    local res = sendTransaction(send)
    if res ~= "" then message("sendLimit : " .. res, 2) return nil else return tr_id end
end
local sendKill = function (onum, scode, ccode)
    local kill = {
    ["ACTION"] = "KILL_ORDER",
    ["CLASSCODE"] = ccode,
    ["SECCODE"] = scode,
    ["ORDER_KEY"] = tostring(onum),
    ["TRANS_ID"] = "666"
    }
    local res = sendTransaction(kill)
    if res ~= "" then message("Kill : " .. res, 2) return nil else return "6666" end
end
local killAll = function (tab, ccode)
    for order_num, row in pairs(tab) do
        local item = getItem("orders", row)
        local flag = item.flags
        if item.order_num == order_num and orderstatus(flag) == "A" then 
            _ = sendKill(order_num, item.sec_code, ccode)
        end
    end
end
local LENnewOrder = 0--кол-во элементов в newOrder
function OnOrder(order)
    local order_num = 0 + order.order_num
    if not newOrder[order_num] then--если нет данных о заявке
        newOrder[order_num] = row
        LENnewOrder = LENnewOrder + 1
        row = row + 1
        local op = orderBS(order.flags)
        message(MSG[op]..order_num, 2)
    end
end
for i=1,#s_list do
    local sec = s_list[i]
    local pricemin = 0 + getParamEx(ccode,sec,"PRICEMIN").param_value
    _ = sendLimit("B", sec, ccode, pricemin, 1, trans_id)
    trans_id = trans_id + 1
end
function main()
    while is_run do
        if LENnewOrder == 3 and getNumberOf("orders") == row then
            killAll(newOrder, ccode)
            newOrder = {}
            LENnewOrder = 0
            is_run = false
        end
        sleep(1)
    end
end

Приятного заработка

5

Re: Снятие заявки. И снятие всех заявок.

Спасибо большое.

6

Re: Снятие заявки. И снятие всех заявок.

["ACTION"]="KILL_ALL_FUTURES_ORDERS",

7

Re: Снятие заявки. И снятие всех заявок.

Кстати ["ACTION"]="KILL_ALL_FUTURES_ORDERS", сносит и ручные заявки тоже, не смотря на то что ставил ["TRANS_ID"] и "22" и "1" и "2".
Получается что ручками поторговать, параллельно с роботом, не получится? OnOrder же хватает всё что под руку ему попадёт?

8

Re: Снятие заявки. И снятие всех заявок.

Вы несколько путаете кто за что отвечает.
"KILL_ALL_FUTURES_ORDERS" - это транзакция, отправляемая на биржу. Исполняет ее биржа.
И биржа по этой транзакции снимает все активные заявки, поданные от указанного торгового счета.

А биржа - она не знает откуда взялись заявки: робот их поставил или через терминал или вообще менеджер брокера выставил заявку по вашему поручению от вашего лица.
С точки зрения биржи все заявки от торгового счета - абсолютно одинаковые.

Поэтому и снимаются они все.

9

Re: Снятие заявки. И снятие всех заявок.

Кстати ["ACTION"]="KILL_ALL_FUTURES_ORDERS" может сносить не всё, может только лишь Buy или только лишь Sell.

10

Re: Снятие заявки. И снятие всех заявок.

swerg пишет:

Поэтому и снимаются они все.

А почему тогда если не указывать ["TRANS_ID"], то "KILL_ALL_FUTURES_ORDERS" заявки не снимает?

11

Re: Снятие заявки. И снятие всех заявок.

ascerdfg пишет:

А почему тогда если не указывать ["TRANS_ID"], то "KILL_ALL_FUTURES_ORDERS" заявки не снимает?

Потому что TRANS_ID - необходимый признак подаваемой транзакции (в данном случае транзакции на снятие заявок). И он никак не связан со снимаемыми заявками, например