Вопрос-ответ

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 10, среднее: 4,60 из 5)
Загрузка...
LogoNew
Если Ваш вопрос не имеет отношения к какой-то определенной статье на данном сайте, то, пожалуйста, задавайте его в комментариях здесь.

Добавить комментарий

Вопрос-ответ: 2 409 комментариев

  1. ---------------------------------------
    name_bot = "сеточный бот"
    version = "2.0"
    Name = "сеточный боты"
    -------------------------------------
    depo = ""
    class = "SPBFUT"
    FileStart = getScriptPath().."\\".."1.txt"
    ------------------------------------
    last_price = 0
    ticker = ""
    min_step = 0
    min_take = 0
    size_lot = 0
    max_lot = 0
    trades_work = 0
    orient_trade = 0
    stop_on = 0
    ---------------------------------
    function ReadTable()
    local f = io.open(FileStart, "r+")
    if f then
    comment, ticker = f:read(16, "1")
    ticker = string.gsub(ticker, "%s+", "")

    comment, orient_trade =f:read(16, "1")
    orient_trade = string.gsub(orient_trade, "%s+", "")
    orient_trade = tonumber(orient_trade)

    comment, size_lot =f:read(16, "1")
    size_lot = string.gsub(osize_lot, "%s+", "")
    size_lot = tonumber(size_lot)
    size_lot = math.abs(size_lot)

    comment, min_step =f:read(16, "1")
    min_step = string.gsub(osize_lot, "%s+", "")
    min_step = tonumber(min_step)
    min_step = math.abs(min_step)

    comment, min_take =f:read(16, "1")
    min_take = string.gsub(min_take, "%s+", "")
    min_take = tonumber(min_take)
    min_take = math.abs(min_take)

    comment, max_lot =f:read(16, "1")
    max_lot = string.gsub(max_lot, "%s+", "")
    max_lot = tonumber(max_lot)
    max_lot = math.abs(max_lot)

    f:close()
    else
    SaveStart()
    end

    end
    --------------------------------------------------
    function SaveStart()

    local f = io.open(FileStart,"w")

    f:write("Инструмент :"..ticker.."\n")
    f:write("Позиция :"..trades_work.."\n")
    f:write("Напровление :"..orient_trade.."\n")
    f:write("Размер лота :"..size_lot.."\n")
    f:write("Шаг :"..min_step.."\n")
    f:write("Тейк :"..min_take.."\n")
    f:write("Максимум лотов:"..max_lot.."\n")
    f:close()
    end
    ------------------------------------------------
    function Color(color, id, line, column)

    if not column then column = QTABLE_NO_INDEX end
    if color == "Голубой" then SetColor (id, line, column, RGB (173,216,230), RGB(0,0,0), RGB (173,216,230), RGB(0,0,0)) end
    if color == "Белый-Красный" then SetColor (id, line, column, RGB(255,255,255), RGB(217,20,29), RGB(255,255,255), RGB(217,20,29)) end
    if color == "Желтый" then SetColor (id, line, column, RGB (255,255,0), RGB(0,0,0),RGB (255,255,0), RGB(0,0,0)) end
    if color == "Серый" then SetColor (id, line, column, RGB (230,230,230), RGB(0,0,0),RGB (230,230,230), RGB(0,0,0)) end
    if color == "Синий" then SetColor (id, line, column, RGB (44,112,188), RGB(255,255,255),RGB (44,112,188), RGB(255,255,255)) end
    if color == "Оранжевый" then SetColor (id, line, column, RGB (255,165,0), RGB(0,0,0),RGB (255,165,0), RGB(0,0,0)) end
    if color == "Зеленый" then SetColor (id, line, column, RGB (165,227,128), RGB(0,0,0),RGB (165,227,128), RGB(0,0,0)) end
    if color == "Красный" then SetColor (id, line, column, RGB (255,168,164), RGB(0,0,0),RGB (255,168,164), RGB(0,0,0)) end

    end
    --------------------------------------------------
    function CreateTable()
    t_id = AllocTable()
    addcolumn(t_id , 1, name_bot, true, QTABLE_INT_TYPE, 17)
    addcolumn(t_id , 2, ticker, true, QTABLE_INT_TYPE, 15)
    addcolumn(t_id , 3, version, true, QTABLE_INT_TYPE, 5)

    CreateWindow(t_id)
    SetWindowCaption(t_id, Name)
    SetWindowPos(t_id, 0, 0, 310, 220)

    for m=1, 9 do
    InsertRow(t_id, -1)
    end

    SetCell(t_id, 1, 1, tostring("СТАРТ")); Color("Голубой", t_id, 1, 1)
    SetCell(t_id, 1, 2, tostring("Не работает")); Color("Белый-Красный", t_id, 1, 2)

    SetCell(t_id, 2, 1, tostring("Цена"));Color("Желтый", t_id, 2, 1)
    last_price = FindPrice(ticker, class)
    SetCell(t_id, 2, 2, tostring(last_price));Color("Желтый", t_id, 2, 2)
    Color("Желтый", t_id, 2, 3)

    SetCell(t_id, 3, 1, tostring("Позиция"));Color("Серый", t_id, 3, 1)
    SetCell(t_id, 3, 2, tostring(trades_work));Color("Серый", t_id, 3, 2)
    SetCell(t_id, 3, 3, tostring(" - "));Color("Серый", t_id, 3, 3)

    SetCell(t_id, 4, 1, tostring("Напровление"));Color("Серый", t_id, 4, 1)
    if orient_trade == -1 then
    SetCell(t_id, 4, 2, tostring("Sell"));Color("Красный", t_id, 4, 2)
    elseif orient_trade == 0 then
    SetCell(t_id, 4, 2, tostring("sell+buy"));Color("Синий", t_id, 4, 2)
    elseif orient_trade == 1 then
    SetCell(t_id, 4, 2,tostring("buy"));Color("Зеленый", t_id, 4, 2)
    end
    SetCell(t_id, 4, 3, tostring(" - "));Color("Серый", t_id, 4 ,3)

    SetCell(t_id, 5, 1, tostring("Размер лота")); Color("Голубой", t_id, 5, 1)
    SetCell(t_id, 5, 2, tostring(size_lot));Color("Голубой", t_id, 5, 2)
    SetCell(t_id, 5, 3, tostring("- ")); Color("Голубой", t_id, 5, 3)

    SetCell(t_id, 6, 1, tostring("Мах лотов"));Color("Голубой", t_id, 6, 1)
    SetCell(t_id, 6, 2, tostring(max_lot));Color("Голубой", t_id, 6, 2)
    SetCell(t_id, 6, 3, tostring(" - "));Color("Голубой", t_id, 6, 3)

    SetCell(t_id, 7, 1, tostring("Шаг")); Color("Оранжевый", t_id, 7, 1)
    SetCell(t_id, 7, 2, tostring(min_step));Color("Оранжевый", t_id, 7, 2)
    SetCell(t_id, 7, 3, tostring(" - ")); Color("Оранжевый", t_id, 7, 3)

    SetCell(t_id, 8, 1, tostring("Тейк"));Color("Оранжевый", t_id, 8, 1)
    SetCell(t_id, 8, 2, tostring(min_take));Color("Оранжевый", t_id, 8, 2)
    SetCell(t_id, 8, 3, tostring(" - "));Color("Оранжевый", t_id, 8, 3)

    ServerTime = getInfoParam("SERVERTIME")
    if ServerTime == nil or ServerTime == 0 or ServerTime == "" then
    ServerTime = "00:00:00"
    end
    SetCell(t_id, 9, 1, tostring(ServerTime));Color("Желтый", t_id, 9, 1)
    if stop_on == 0 then
    SetCell(t_id, 9, 2, tostring("x Stop при 0"));Color("Желтый", t_id, 9, 2)
    else
    SetCell(t_id, 9, 2, tostring("v Stop при 0"));Color("Желтый", t_id, 9, 2)
    end

    Color("Голубой", t_id, 9, 3)

    end

    function FindPrice(sec_code, class_code)
    local AktivPrice = tonumber(getParamEX(class_code, sec_code, "LAST").param_value)
    if AktivPrice == nil then
    AktivPrice = tonumber(getParamEX(class_code, sec_code, "PREVPRICE").param_value)
    end
    return AktivPrice

    end

    function main()

    ReadTable()
    CreateTable()

    end

    Помогите разобраться не могу запустить робота в квике  выдает ошибку 23: bad argument #2 to 'read' (invalid format)
    уже все перепробовал
  2. Добрый день. Хотел бы самостоятельно написать прогу которая будет работать по типу кластеров в приводах типа Qskalp и Cscalp, т.е. считать разницу покупок и продаж в моменте (за определенный промежуток времени) и выдавать соответствующее оповещение к примеру если превышено какое-то значение. Прошел бесплатные курсы по программированию, научился работать с гитом). В общем ноль в программировании. Подскажите с чего начать. Думаю надо брать данные из таблици обзличенных сделок. Но как что делать?

  3. Как удаленно запускать и останавливать Lua - скрипты из сторонней программы?
    Вывожу данные через LUA - скрипт и UDP - Сокет в скринер написанный на С. Возник вопрос: есть ли вариант запуска и остановки LUA - скриптов сторонней программой? Придумал костыльный вариант остановки(через запись ключевого слова в текстовый файл) и еще более костыльный вариант запуска(через HWND окна). Может можно как-то стартануть скрипт, например через изменения реестра, ini - файла, может Хексом библиотеку какую-нибудь подправить и т.д.???

  4. Коллеги, есть ли код для имитации ds? Суть кода: прочитать данные из файла csv и присвоить прочитанное ds, чтобы читалось так же, как и createdatasource.

  5. Как в QLua закрыть файл по его полному пути+имени (строка)?

    Допустим, файл уже был открыт до запуска скрипта, тогда

    1
    
    out_file=io.open(FileFullName,"a+") --> nil

    как закрыть этот файл с именем FileFullName (строковое)?

  6. Здравствуйте!
    Периодически вылетает ошибка: "Необработанное исключение по адресу
    0x000007F9EC5C9D19 (ntdll.dll) в info.exe: 0xC0000374: Куча была повреждена
    (параметры: 0x000007F9EC61E5F0)". Часто если в коде lua указано: "sleep(1)".
    Ошибка чтения в точке "lua_pushstring(L, (char*)(pb))".
    Как её избежать?

    1
    2
    
    lua_pushstring(L, (char*)(pb));
    for (int i = 0; i < 256; i++)pb[i] = '\0';
    1
    2
    3
    
    QluaCSharpConnector.SendQuote(Quote);
    local CommandStr = tostring(QluaCSharpConnector.GetCommand());
    sleep(1);

    Microsoft Visual Studio Enterprise 2015
    Версия 14.0.24720.00 Update 1
    Microsoft .NET Framework
    Версия 4.6.01055

    lua5.1.lib

  7. Здравствуйте!
    Периодически вылетает ошибка: "Необработанное исключение по адресу
    0x000007F9EC5C9D19 (ntdll.dll) в info.exe: 0xC0000374: Куча была повреждена
    (параметры: 0x000007F9EC61E5F0)". Часто если в коде lua указано: "sleep(1)".
    Ошибка чтения в точке "lua_pushstring(L, (char*)(pb))".
    Как её избежать?

    1
    2
    3
    4
    ...
    lua_pushstring(L, (char*)(pb));
    for (int i = 0; i < 256; i++)pb[i] = '\0';
    ...
    1
    2
    3
    4
    5
    ...
    QluaCSharpConnector.SendQuote(Quote);
    local CommandStr = tostring(QluaCSharpConnector.GetCommand());
    sleep(1);
    ...
    Microsoft Visual Studio Enterprise 2015
    Версия 14.0.24720.00 Update 1
    Microsoft .NET Framework
    Версия 4.6.01055

    lua5.1.lib

  8. Здравствуйте товарищи! При экспорте данных из квика самый длительный этап - ожидание их поступления при заказе с сервера:

    1
    
     ds:SetEmptyCallback()  -- вот эта штучка

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

    Кто-нибудь решал эту проблему?

    Я пробую использовать параметры инструмента из таблицы всех сделок. Сохраняю несколько значений, полученных на момент заказа данных графика, отакие вот:

    1
    2
    3
    4
    5
    6
    
    TRADE_DATE_CODE  -- Дата торгов
    TIME  -- Время последней сделки 
    LAST  -- Цена последней сделки 
    VALUE  -- Оборот в деньгах последней сделки 
    CHANGETIME  -- Время последнего изменения 
    STATUS  -- Если торговался на момент заказа данных то всегда заказываю данные заново

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

    1. Добрый день!
      1. А вы учли, что при дисконекте и повторном соединении нужно отписаться от источников и подключить их заново, иначе данных просто не будет?
      2. Обезличенные сделки брокеры любят не транслировать, т.е. такой костыль априори не подходит.
      3. Графики, это зрительный обман и ничего более, если очень нужно - стройте свои, на основании таблицы обезличенных сделок, тогда думать нужно будет только о пункте 2.
      4. Если по другому никак, то OnParam вам в руки, подписываетесь на параметр "оборот" и если он не ноль, то сделки есть и нужно подключить источник.

    2. Вопрос решился? Я тоже самое с тиками пытаюсь сделать, если подключаюсь в 14.00, данные через CreateDataSource по всем инструментам грузит за всё предыдущее время. Прогоняю в цикле Size, пока он не будет равен предыдущему, только потом считываю нужные мне данные, очень костыльно как-то получается. OnAllTrade работает лучше, но идет нагрузка на проц и каждые полчаса Квик дисконектит.

  9. Привет народ, кто-нибудь собирал LuaSQLite3.dll для работы со скриптом? Я нашел в интернетике уже собранные неизвестным мне человеком, но там может быть все что угодно внутри зашито, хотелось бы самому собрать. Кто может что подсказать посоветовать? Может где-то на сайте уже есть?

        1. я где то упомянул, что вы там найдете что-то, что поможет вам разобраться с sqlite? претензии вашему учителю русского языка предъявляйте.