Quik Lua

Сайт продукта: https://forum.quik.ru/forum10/
Lua — язык программирования, который используется в программировании торговых роботов под популярный в России терминал Quik.
  1. Аватар Amexx
    Добрый день. Помогите исправить код. Ошибок нет, но в списке индикаторов отсутствует,
    — Название индикатора local IndicatorName = «L1m»


    — Параметры индикатора
    local Price = 0
    — Тип цены (0 — Close)
    local Length = 0
    — Период
    local barscount = 50
    — Количество баров для расчета


    --Коэффициенты для разных таймфреймов
    local k1, k2, k3, k4 = 0, 0, 0, 0


    — Буферы для хранения данных
    local Buf0 = {}
    — Основной буфер 1
    local Buf4 = {}
    — Основной буфер 2
    local Buf1 = {}
    — Буфер для невязки 1
    local Buf2 = {}
    — Буфер для abs невязки 1
    local Buf3 = {}
    — Буфер для цены 1
    local Buf5 = {}
    — Буфер для невязки 2
    local Buf6 = {}
    — Буфер для abs невязки 2
    local Buf7 = {}
    — Буфер для цены 2


    — Функция для получения текущего таймфрейма
    function getInterval()

    — Получаем текущий таймфрейм графика

    local interval = getParamEx(«TQBR», «SBER», «INTERVAL»).param_value
    return interval

    end


    — Функция инициализации индикатора
    function OnInit()

    — Установка параметров в зависимости от таймфрейма

    local interval = getInterval()
    if interval == «M1» then
    Length = 11; k1 = 0.1; k2 = 0.9; k3 = 0.05; k4 = 0.5

    elseif interval == «M5» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «M15» then
    Length = 5; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.7

    elseif interval == «M30» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «H1» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «H4» then
    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «D1» then
    Length = 6; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «W1» then
    Length = 4; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    elseif interval == «MN1» then
    Length = 3; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.9
    else

    — Если таймфрейм не распознан, используем значения по умолчанию

    Length = 7; k1 = 0.2; k2 = 0.9; k3 = 0.05; k4 = 0.8

    end


    — Инициализация буферов
    for i = 1, barscount do

    Buf0[i] = 0
    Buf4[i] = 0

    Buf1[i] = 0
    Buf2[i] = 0

    Buf3[i] = 0
    Buf5[i] = 0

    Buf6[i] = 0
    Buf7[i] = 0

    end


    — Логирование для отладки
    message(«Индикатор инициализирован. Таймфрейм: »… interval)


    return true
    end


    — Функция расчета индикатора
    function OnCalculate(index)

    if index <= 3 then return end


    — Получение цены закрытия

    local close_price = getPrice(index)


    — Расчет скользящей средней

    local ma = calculateMA(index)


    — Расчет невязки

    local def = ma — (Buf0[index + 1] or 0)

    local prog = (Buf1[index + 1] or 0) + 0.5 * ((Buf1[index + 1] or 0) — (Buf1[index + 2] or 0))

    Buf1[index] = prog + (def — prog) / Length

    local def1 = ma — (Buf4[index + 1] or 0)

    local prog1 = (Buf5[index + 1] or 0) + 0.5 * ((Buf5[index + 1] or 0) — (Buf5[index + 2] or 0))

    Buf5[index] = prog1 + (def1 — prog1) / Length


    — Расчет абсолютной невязки

    local adef = math.abs(def)

    local adef1 = math.abs(def1)

    Buf2[index] = (Buf2[index + 1] or 0) + 0.5 * ((Buf2[index + 1] or 0) — (Buf2[index + 2] or 0))

    Buf6[index] = (Buf6[index + 1] or 0) + 0.5 * ((Buf6[index + 1] or 0) — (Buf6[index + 2] or 0))


    — Адаптивные параметры

    local k5, k6, k7, k8 = 0, 0, 0, 0
    if Buf2[index] ~= 0 then

    k6 = math.abs((Buf1[index] or 0) / Buf2[index])

    k5 = k1 * k6

    k6 = k2 * k6
    end

    if Buf6[index] ~= 0 then

    k8 = math.abs((Buf5[index] or 0) / Buf6[index])

    k7 = k3 * k8
    k8 = k4 * k8
    end


    — Расчет значений индикатора

    local del = ma — (Buf3[index + 1] or 0)

    Buf0[index] = (Buf3[index + 1] or 0) + del * k5

    Buf3[index] = Buf0[index] + k6 * (Buf0[index] — (Buf0[index + 1] or 0))


    local del1 = ma — (Buf7[index + 1] or 0)
    Buf4[index] = (Buf7[index + 1] or 0) + del1 * k7

    Buf7[index] = Buf4[index] + k8 * (Buf4[index] — (Buf4[index + 1] or 0))


    — Отображение индикатора

    AddLine(Buf0[index], «Buf0», RGB(255, 255, 255), 1, 1)
    — Белая линия

    AddLine(Buf4[index], «Buf4», RGB(0, 191, 255), 1, 1)
    — Голубая линия

    end


    — Функция расчета скользящей средней

    function calculateMA(index)

    local sum = 0
    for i = index — Length + 1, index do
    sum = sum + getPrice(i)
    end
    return sum / Length
    end


    — Функция получения цены

    function getPrice(index)
    if Price == 0 then
    return getClose(index)
    — Цена закрытия
    else
    return (getHigh(index) + getLow(index)) / 2 — Средняя цена
    end
    end
  2. Аватар econopulse
    Упрощаем инвестирование: Lua-индикатор для определения уровней на графиках QUIK!

    Сегодня представляю вам свой Lua-индикатор для торговой платформы QUIK, который поможет вам визуализировать ключевые уровни сопротивления и поддержки на графиках.

    Упрощаем инвестирование: Lua-индикатор для определения уровней на графиках QUIK!

    Этот инструмент очень полезен, но правда в том, что уровни сопротивления и поддержки у каждого трейдера могут быть разными. Это значит, что алгоритм, который использует индикатор, — это лишь моя субъективная интерпретация!

    Вы также можете адаптировать скрипт под свои требования — он открыт для редактирования!

    Проверьте сами! Откройте любой график на любом таймфрейме, закройте глаза и нарисуйте «горизонтальную линию». Удивитесь, насколько точно вы определили уровень, когда откроете историю графика!

    Лично я не трейдер в классическом смысле, а больше инвестор. Использую уровни только на недельном таймфрейме для ребалансировки своего портфеля.

    Цветовая кодировка уровней:

    — Зелёная линия — уровень поддержки.
    — Красная линия — уровень сопротивления.
    — Серая линия — предыдущий уровень, от которого идёт тренд.



    Авто-репост. Читать в блоге >>>
  3. Аватар Rostislav Kudryashov
    Алготрейдинг. Скрипт Lua для выгрузки истории котировок из Quik'а
    Сайт finam.ru и mfd.ru перестали быть полезными для выгрузки истории котировок.
    Это скрипт
    -- График должен быть открыт в Quik'е хоть раз за сессию
    Class = "SPBFUT" -- "CETS_MTL" "CETS"
    SecId="BRK4" -- "NGJ4" "GLDRUB_TOM" "USD000UTSTOM" "SiZ3"
    Intrvl = INTERVAL_H1 -- D1 -- M5
    Header = "<TICKER>;<PER>;<DATE>;<TIME>;"..
      "<OPEN>;<HIGH>;<LOW>;<CLOSE>;<VOL>"
    Period = "60" -- Дневки - 0; W1, MN1 - недопустимо
    
    function Log (i)
      local t = DS:T(i)
      local ymd = string.format ("%04d%02d%02d", t.year, t.month, t.day)
      if not (IniDt <= ymd and ymd <= FinDt) then return end
      local hms = string.format ("%02d%02d%02d", t.hour, t.min, t.sec);
      local str = string.format ("%s;%s;%s;%s;%.4f;%.4f;%.4f;%.4f;%.0f\n"
        ,SecId, Period, ymd, hms
        ,DS:O(i), DS:H(i), DS:L(i), DS:C(i), DS:V(i))
      F:write (str)
    end -- Log()
    
    function OnInit (scriptPath)
      qu = require ("QuikUtil(qu)") -- lu,qc,tu
      ScriptDir, ScriptName = lu.


    Авто-репост. Читать в блоге >>>
  4. Аватар 2153sved
    Вопрос по квику
    Подскажите, кто пользуется скриптами в lua
    При чистке dat и log а также при перезагрузке компьютера в таблице «Доступные скрипты» всё пропадает.
    При сохранение руками в info wnd также данные этой таблицы не сохраняются.

    Есть ли какие-то варианты сохранить данные скриптов в этой таблице?

    Авто-репост. Читать в блоге >>>
  5. Аватар Rostislav Kudryashov
    Можно бесконечно долго смотреть на .. две вещи
    … как растёт рублёвое золото GLDRUB_TOM и серебро SLVRUB_TOM.
    Оказалось, что если с начала 2019 среднегодовой рост 20% и 23% соответственно, то с начала 2024 это уже 34% и 57% годовых. Серебро обгоняет золото.
    Я даже для удобства написал для Quik'а скрипт на Lua
    function OnInit (scriptPath)
      lu = require ("LuaUtil(lu)")
      ScriptDir, ScriptName = lu.SplitPath (scriptPath)
      DataPath = ScriptDir .. ScriptName ..".dat"
      message (DataPath)
    end -- OnInit()
    
    function dtToStr (dt)
      return type (dt) ~= "table" and "nil" or
        string.format ("%4d.%02d.%02d", dt.year, dt.month, dt.day)
    end
    
    function main()
      os.execute ("notepad.exe ".. DataPath)
      dofile (DataPath)
      DS, err = CreateDataSource (ClassCode, SecCode, INTERVAL_D1)
      if not DS then
        message ("err\n".. err)
        return
      end
      local ini, fin = 1, DS:Size()
      for i = 1, fin do
        local dt = dtToStr (DS:T(i))
        if dt >= IniDate then
          ini = i
          break
        end
      end
      local finPrice = DS:C(fin)
      local finDate  = DS:T(fin)
      local iniPrice = DS:C(ini)
      local iniDate  = DS:T(ini)
      local iniTime = os.


    Авто-репост. Читать в блоге >>>
  6. Аватар cryptonex
    Программисты Lua!
    Во- первых с праздником!
    Во-вторых, очень нужна помощь.

    Отправка из квика в телеграм канал оповещения.
    На Lua.
    На php знаю как а на луа опыта нет

    Авто-репост. Читать в блоге >>>
  7. Аватар Rostislav Kudryashov
    Эврика! Зачем кодировать сложно, когда можно просто
    До сих пор для ввода данных в скриптах Quik Lua я использовал библиотеку IUP. Довольно громоздкая процедура только для того, чтобы получить фиксированные значения переменных. Но если эти значения никак не опираются на внутренние таблицы Quik'а, для их ввода проще использовать вызов текстового редактора. Например вот так

    local dp = glb_ScriptDir… glb_ScriptName ..".dat"
    os.execute («start /w /b notepad »… dp)
    dofile (dp) — Data

    ...
    Эврика! Зачем кодировать сложно, когда можно просто
    Сначала редактируем значения переменных скрипта, затем загружаем их в память.

    Авто-репост. Читать в блоге >>>
  8. Аватар econopulse
    Инвестору: Структурируйте свой портфель с помощью нового Lua-скрипта для QUIK
    Инвестору: Структурируйте свой портфель с помощью нового Lua-скрипта для QUIK

    Как опытный инвестор, вы знаете, что эффективное управление портфелем — ключ к успеху на финансовых рынках. Представляю вашему вниманию новый Lua-скрипт для пользователей торговой платформы QUIK, который поможет вам структурировать свой инвестиционный портфель и отслеживать все необходимые данные в удобном интерфейсе.



    Авто-репост. Читать в блоге >>>
  9. Аватар Gambler <osaengine.ru>
    Создание Торговых Стратегий с Помощью ИИ: Легче, Чем Печь Блины
    Алгоритм субботняшний

    1) Зайти на chatgpt.com/

    2) Написать вопрос

    Создание Торговых Стратегий с Помощью ИИ: Легче, Чем Печь Блины

    3) Получить ответ

    -- Настройки
    SEC_CODE = "SBER" -- Код инструмента
    CLASS_CODE = "TQBR" -- Код класса инструмента
    SHORT_MA_PERIOD = 10 -- Период короткой скользящей средней
    LONG_MA_PERIOD = 50 -- Период длинной скользящей средней
    QTY = 1 -- Количество лотов
    
    -- Переменные
    short_ma = {}
    long_ma = {}
    prices = {}
    position = 0 -- Текущая позиция: 0 - нет позиции, 1 - лонг, -1 - шорт
    
    -- Функция для расчета скользящей средней
    function calculate_ma(prices, period)
        local sum = 0
        for i = #prices-period+1, #prices do
            sum = sum + prices[i]
        end
        return sum / period
    end
    
    -- Функция для обработки новых тиков
    function OnAllTrade(alltrade)
        if alltrade.sec_code == SEC_CODE and alltrade.class_code == CLASS_CODE then
            table.insert(prices, alltrade.price)
            if #prices >= LONG_MA_PERIOD then
                table.insert(short_ma, calculate_ma(prices, SHORT_MA_PERIOD))
                table.


    Авто-репост. Читать в блоге >>>
  10. Аватар econopulse
    Автоматизированная тепловая карта рынка: скрипт Lua для QUIK
    Данный скрипт, разработанный на языке программирования Lua для терминала QUIK, представляет собой тепловую карту рынка российских акций. Основные функциональные возможности программы:
     
    1. Сортировка данных:

    — По временному интервалу

    — По алфавиту
    — По процентному изменению от предыдущего закрытия свечи на выбранном интервале
    Автоматизированная тепловая карта рынка: скрипт Lua для QUIK


        — По капитализации компании



    Авто-репост. Читать в блоге >>>
  11. Аватар evg_gen +100(100)
    QUIK lua помощь нужна
    можно ли в lua прописать сортировку в таблице?
    скажем мне нужны ТОЛЬКО заявки по покупкам, и если несколько покупок по одной бумаге, то отсортировать и их?

    Авто-репост. Читать в блоге >>>
  12. Аватар Алексей Греднев
    Добрый вечер. Кто-нибудь может мне дать ссылку на пример qlua скрипта для Квик с работой советника с индикатором Fractals. github.com/OlegBirykov/ParabolicSAR/blob/master/library.lua — здесь я нашёл интересный пример на Parabloic SAR и RSI
  13. Аватар Rostislav Kudryashov
    Скрипты Lua в Quik'е могут строить свою доску опционов - как от Мосбиржи
    В скриптах напрямую доступны все данные Quik'а, кроме греков с доски опционов. Но есть возможность рассчитывать их по формуле Блэка-Шоулза, исходя из доступных значений базы, страйка, дюрации и волатильности.
    Чтобы удостовериться в совпадении греков с доски и расчётных, пришлось в скрипте отваять на Lua C API сервер DDE для приёма экспорта от доски опционов. И вот картинка
    Скрипты Lua в Quik'е могут строить свою доску опционов - как от Мосбиржи
    Разница в самом главном Греке — Дельте — менее 1%.
    Через Lua в Quik'е доступны все возможности Windows.
    local Titles, Entries, Desk = {}, {}, {}
    local Wn1_Hndl
    local Wn1_Field1, Wn1_Field2, Wn1_Field3, Wn1_Field4, Wn1_Field5
       = "Код CALL", "Страйк", "Дельта CALL", "Дельта расч", "Теор. расч"
       
    function OnInit (scriptPath)
      qu = require ("QuikUtil(qu)") -- qc, lu, tu
      blk = require ("BlackScholes(blk)")
      glb_ScriptDir, glb_ScriptName = lu.SplitPath (scriptPath)
      message (glb_ScriptName .." started")
      server = require ("OptionDesk")
    end -- OnInit()
    
    function OnStop (signal)
      if Wn1_Hndl then DestroyTable (Wn1_Hndl) end
      StopFlag = true
      return 1000 -- 1 sec
    end
    
    local function ShowWin (cols)
      for k = 1, #Desk do
        local calCode = Desk[k][Entries[Wn1_Field1]]
        if calCode:sub (3,3) == "0" then
          calCode = calCode:sub (1,2) .


    Авто-репост. Читать в блоге >>>
  14. Аватар alfacentavra
    Qlua: работа со сделками, позициями и денежными лимитами. Часть 2.

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

    Для анализа состава портфеля, лимитов и их динамики используются таблицы:

    Клиентский портфель (получаем данные через getPortfolioInfo и getPortfolioInfoEx).
    Позиции по деньгам (getMoney и getMoneyEx, money_limits).
    Позиции по инструментам (getDepo, getDepoEx, depo_limits).
    Ограничения по клиентским счетам (futures_client_limits).
    Позиции по клиентским счетам (futures_client_holding).

    Таблица «Клиентский портфель» даёт сводную информацию по лимитам и параметрам риска брокерского счета. Таблицы «Позиции по деньгам» (лимиты) и «Позиции инструментам» (ценные бумаги) показывают данные в разрезе фондового рынка. Таблицы «Ограничения по клиентским счетам» (лимиты) и «Позиции по клиентским счетам» (фьючерсы и опционы) – только про срочному рынку.



    Авто-репост. Читать в блоге >>>
  15. Аватар Rostislav Kudryashov
    Доска опционов Quik'а пробита через Lua скрипт!
    Эта доска — единственное, к чему нет прямого доступа из скрипта. Пришлось мастерить DLL с помощью Lua C API.
    Для чего она мне нужна в скрипте, пока не знаю. Но интересно будет посмотреть, насколько различается  дельта по Блэку-Шоулзу от дельты на доске.
    Ещё осталась заковыка, что вывод в скрипт с доски по DDE зависает на кнопке «Остановить вывод». Нормально остановить можно только через кнопку «Отменить» и затем «Остановить» в диалоге «Доступные скрипты».
    В чём тут засада?

    Авто-репост. Читать в блоге >>>
  16. Аватар alfacentavra
    Qlua: статус файла.
    Иногда бывает необходимо учесть в программе, что файл с которым собираетесь работать отсутствует, занят другой программой или пуст.

    Для проверки наличия файла я использую функцию, которую сам когда-то нашел в сети, она возвращает размер файла в байтах, если файл существует и nil если не найдет его.

    Qlua: статус файла.

    Проверить занят ли файл, а также проверить что он не пустой можно следующей функцией:


    Авто-репост. Читать в блоге >>>
  17. Аватар alfacentavra
    Qlua: работа со сделками, позициями и денежными лимитами. Часть 1.

    Функция OnTrade
    Сохранение параметров сделки в файл.
    Работа с таблицей сделок.
    Сохранение всех сделок дня.
    Скрипт автосохранения всех заявок и сделок под завершение торгового дня.

    Для отслеживания прошедших сделок мы можем задействовать функцию обратного вызова OnTrade. Она во многом похожа по логике на OnOrder, только возвращает коллбэки уже по исполненным сделкам. В случае, если заявка разбивается на несколько сделок, мы получим информацию по каждой.

    В файле QLUA.chm в директории терминала находим через поиск описание самой функции:

    Qlua: работа со сделками, позициями и денежными лимитами. Часть 1.
    И таблицу с параметрами:



    Авто-репост. Читать в блоге >>>
  18. Аватар George Martin
    Добавление индикаторов в Qucik в Lua script. Ну типа помощь нужна )
    Камрады, добрый день или что еще существует в вашей реальности)) Вопросом озадачен я, как сделать так чтобы грааль волшебный в Lua, индикатор тобишь, был помещен в сосуд волшебный, т.е. Quick, при том что изначально чародей создал заклятье в Pine script(e)? Поскольку разумом и знанием слегка я обделен, спросил я нейросеть, что знает все на свете, могла б ли ты помочь мне в этом и перевести заклятье? В итоге получив два разных варианта перевода, естественно от разных сеток, я переправил это мудрецам из круга своего знакомых… Те были несказанно в думе, мгогозначительно сказав, что нет прямого перевода Пина в Луа, что сети явно мне солгали, при этом взяв на изученье сей манускрипт сетей. Однако зная лет 15, что на ресурсе шмартлабру, издревля существуют создатели кодов, а также продавцы порожняка, решил я сделать сие повествование, в надежде помощи и кооперации, а также безусловно предложений алчных от неких тайных колдунов ))) последние конечно алтын с меня стянуть не смогут...)))
    Кароче, товарищи кодеры, кто прям на раз два с луа и добавлял в квика свои творения не раз, подсобите прикрутить или быть может дать какие то материалы наводки, что кенты мои смогли допилить. п.с. там очень хорошая штука. аналоговнет))  

    Авто-репост. Читать в блоге >>>
  19. Аватар oldLa3o
    здравствуйте, Может кто знает как называется поле «значение» в таблице текущих торгов? Хотелось бы получать значение индексов мосбиржи из та...

    oldLa3o, сам решил проблему, все поля таеблицы текущих торгов описаны тут:-- quikluacsharp.ru/quik-qlua/poluchenie-dannyh-iz-tablits-quik-v-qlua-lua/
  20. Аватар oldLa3o
    здравствуйте, Может кто знает как называется поле «значение» в таблице текущих торгов? Хотелось бы получать значение индексов мосбиржи из таб. текущих торгов, а не из графиков. Как нибудь так:
    ИндексМосбиржи=getParamEx(«RTSIDX», «IMOEX», «FACE_VALUE»). Скачал скрипт all_entitis.lua, но не вышло. Спасибо Альфк центавре, хороший курс
  21. Аватар Никто
    Квик луа почему не обсуждают
    Вот лично пишу что то там. Сам не знаю зачем, но положительных эмоций больше. Это как совет как время коротать унылое, путина пережить, глянуть что будет хоть одним глазком. Опять таки тема о общения. То текущие торги пытался налить, не нашел, теперь историю. А что удобно, в квике данные есть, в выходные можно их вертеть так и эдак, А что делать в выходные, есть идеи получше?

    Авто-репост. Читать в блоге >>>
  22. Аватар Егор Фещенко
    getMoneyEx выдает ошибку nill, все параметры беру с таблицы состояния счета

    Всем привет, только учусь работать с QUIK и LUA, возникла проблема с выводом баланса.

    Вот скрипт:

    function main()
    Firm_ID = «MC0139600000»
    client_code = «4105TE2»
    moneyRu = getMoneyEx(Firm_ID, client_code, «EQTV», «SUR»,0)
    TradeBalance = moneyRu.currentbal/2
    message('Баланс RUB = '..moneyRu.currentbal)
      if(FakeBalance>0)
     then
     message('Баланс RUB = '..moneyRu.currentbal)
     else
      message('Баланс для покупки = '..TradeBalance)
      end
    end

    Выдает ошибку attempt to index a nil value (global 'moneyRu')

    Буду очень благодарен если кто-нибудь подскажет в чем проблема.



    Авто-репост. Читать в блоге >>>
  23. Аватар Врач-бондиатОр
    Появился ли доступ Lua к доске опционов?
    А то экспорт через ДДЕ относительно удобен при работе только с одним инструментом

    Авто-репост. Читать в блоге >>>
  24. Аватар alfacentavra
    Qlua: работа с заявками (часть 3).

    Сегодня завершаем работу с заявками:

    Функция OnTransReply
    Функция OnOrder
    Получение остатка по заявке, контроль исполнения полного объема
    Таблица транзакций
    Общая логика выставления лимитной заявки в стакане

    В предыдущих примерах мы закладывали на обработку заявки небольшой таймаут (в пределах от 300 мс до 1 секунды), но правильнее отслеживать результат по коллбэкам, т.к. это время может быть и менее 300 мс, а может затянуться (по разным причинам) на секунды. Поможет нам в этом отслеживании функции обратного вызова OnTransReplyиOnOrder.

    Если отправляя заявку через sendTransaction мы на старте могли получить ошибку на стороне терминала (неправильно указанный торговый код/инструмент/класс рынка), то через OnTransReply мы получаем результат обработки нашей транзакции на сервере брокера (например ошибка при выставлении заявки из-за отсутствия подключения, либо у клиента нет прав на отправку транзакции конкретного типа, либо заявка не проходит по лимитам и пр.).

    Функция OnTransReply возвращает ответ на транзакцию, выставленную средствами qlua.



    Авто-репост. Читать в блоге >>>
  25. Аватар alfacentavra
    Qlua: работа с заявками (часть 2).

    Сегодня:

    Узнаем общее количество заявок
    Функции getNumberOf и getItem
    Как пройтись циклом по всем заявкам
    Вывод активных заявок
    Снять скриптом заявку
    Снимаем все активные заявки скриптом
    Снимаем только заявки, выставленные конкретным скриптом


    В прошлый раз мы научились
    выставлять скриптом заявки в терминале, теперь можем поработать с ними.
    Выставим скриптом 5 заявок на покупку и продажу от лучших цен
    BIDи OFFERстакана заявок с шагом в 0,01.

     

    Напишем функцию, которая будет выдавать нам необходимые цены (лучшую цену спроса и предложения) со стакана:

    Qlua: работа с заявками (часть 2).

    И возвращать -1, если предложения или покупки в стакане не найдены (стакан закрыт, либо нет торгов).

    Тогда основной алгоритм в main будет выглядеть:



    Авто-репост. Читать в блоге >>>
Чтобы купить акции, выберите надежного брокера: