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

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

Страницы: 1
отправка заявки из скрипта Lua
 
Всех благодарю за помощь. Программа заработала. Вопрос закрыт.
отправка заявки из скрипта Lua
 
nikolz, Да, работа с этими функциями еще предстоит. Благодарю за участие.
отправка заявки из скрипта Lua
 
VPM, Ага, все таки окна. У меня действительно заякорены были три окна. Отключил и скрипт ожил. Странная связка.
Да с циклом по инструментам я знаком. Изначально скрипт был так и написан. Но нужно было упростить модель для выяснения причин неправильной работы.
Благодарю Вас за разъяснения.
отправка заявки из скрипта Lua
 
Цена получается из стакана (просто текущая цена продажи).
Цикл вокруг получения цены скорее всего будет не нужен как только я научусь получать цену от любого инструмента.
Коды транзакций я получаю из os.sysdate(). Мне там именно пара нужна.
Функцию отправки запроса я приложил в конце.

Все работает. Цена определяется. Заявка выставляется. Но только если в окне "Текущая таблица параметров" выбрана вот та самая бумага - 'SU26219RMFS4'. Это ОФЗ.
Выбираешь в окне другую и нужно менять код в скрипте.
И вот что должно быть заявлено в скрипте чтобы эту связку разорвать я не совсем понимаю.
Такое поведение Quik меня тоже удивило. Поэтому и спрашиваю.

Я не понял про "установить умный заказ". С окнами и настройками я в общем то разобрался. Но судя по всему что-то упустил именно в контексте программного доступа к данным.
Вероятно помимо настроек нужно по другому компоновать скрипт. Данный подход с функцией main() самый простой. Функции обратного вызова я еще не смотрел. Наверное там следует искать ответ.
По поводу получения цены. Из графиков я уже экспортировал некоторые куски. Посмотрю как это можно использовать как альтернативу цен из стакана.
Благодарю за участие в моем обучении.

Код
co = require('m_common_objects')
to = require('m_trading_objects')
sn = 'example_9.lua'

function OnInit()
    is_running = true
    co.toLogInit(sn, 'session begins.')
end

function OnStop()
    is_running = false
    co.toLogStop(sn, 'session ends.')
end

function main()

    local pc = 0
    local trans_id_buy = 0
    local trans_id_sell = 0
    local price_pc_buy = 0

    local sec_code = ''      -- instrument name
    local price_margin

    --while to.is_running do
        local quoteLevel
        local pc = 0
        sec_code = 'SU26219RMFS4'

        -- infinite loop to compensate for problems with getting the price
        while true do
            quoteLevel = getQuoteLevel2('TQOB', sec_code)
            if quoteLevel.offer then
                pc = tonumber(quoteLevel.offer[1].price)
            end
            if pc == 0 or pc < 0 or pc == nil then
                co.toLog(sn, '    still nothing...')
                sleep(math.random(1000, 2000))
            else
                break
            end
        end
        co.toLog(sn, 'pc = '..pc)


        price_margin = 0.25

        -- get transaction IDs
        trans_id_sell, trans_id_buy = to.getTransID(sn)

        -- submit Buy order
        price_pc_buy = to.pbuy(pc, price_margin)
        co.toLog(sn, 'price_pc_buy = '..price_pc_buy)
        to.send_order_buy(sn, trans_id_buy, sec_code, price_pc_buy, 1)
    --end

    co.toLogMain(sn, 'main function ends.')
end

local function send_order_buy(sn, tid, sc, pb, qt)
    -- sn  - script name
    -- tid - transaction ID
    -- sc  - security code (instrument name)
    -- pb  - price buy
    -- qt  - quantity
    local order = {}
    local err = ''

    co.dbg(sn, tid)
    while true do
        order = {
            ['ACCOUNT'] = trading_objects.ACCOUNT,
            ['CLIENT_CODE'] = trading_objects.CLIENT_CODE,
            ['CLASSCODE'] = trading_objects.CLASS_CODE,
            --
            ['ACTION'] = 'NEW_ORDER',
            ['EXECUTION_CONDITION'] = 'PUT_IN_QUEUE',
            ['TRANS_ID'] = tid,
            ['SECCODE'] = sc,
            ['OPERATION'] = 'B',
            ['PRICE'] = tostring(pb),
            ['QUANTITY'] = tostring(qt)
        }

        err = sendTransaction(order)
        co.dbg(sn, err)

        if err ~= '' then
            co.toLog(sn, 'Error! '..err)
        else
            break
        end
        sleep(math.random(1, 100))
    end
    co.toLog(sn, sc..'; tid='..tid..'; B ; price='..tostring(pb)..'; qty='..tostring(qt))
    return tid
end
отправка заявки из скрипта Lua
 
Не обижаюсь. Потому-что не понимаю в чем собственно проблема. ;-)
Если это сарказм с Вашей стороны, то лучше объяснить, что к чему для неофита.
И все же, можно или нельзя.
отправка заявки из скрипта Lua
 
Добрый день,
Скрипт вызывается из окна "Доступные скрипты".
В скрипте все как обычно: получаю цену, открываю заявку.
Но, и цена и заявка срабатывают только если в таблице "Текущая таблица параметров" выбран инструмент соответствующий инструменту заданному в скрипте.
Что это, такое запрограммированное поведение Quik?
Или все-же существует метод как получить цену и открыть заявку без какой-либо связки скрипта с окнами инструментов?
отправка заявки из скрипта Lua
 
Добрый день,
Скрипт вызывается из окна "Доступные скрипты".
В скрипте все как обычно: получаю цену, открываю заявку.
Но, и цена и заявка срабатывают только если в таблице "Текущая таблица параметров" выбран инструмент соответствующий инструменту заданному в скрипте.
Что это, такое запрограммированное поведение Quik?
Или все-же существует метод как получить цену и открыть заявку без какой-либо связки скрипта с окнами инструментов?
Страницы: 1
Наверх