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

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

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

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

  1. Вот если в Notepad++ случайно нажал "Спрятать выбранные строки" - то строка становится зеленой и всё "спряталось" - как эти строки обратно то вернуть?

      1. Да нет у меня ни каких стрелочек - я и так и эдок все проверил уже десять раз перед тем как этот вопрос задавать - ну ты меня знаешь

          1. Щас попробовал - все строки открытые сразу - закрыть - открыть код. Да у меня "мышка иногда своей жизнью живет" правая кнопка как то сама включается - "барабашка" завелся. Ладно все в порядке если что. С НГ тебя.

  2. Дмитрий, извините, никак не могу нагуглить синтаксис для формирования подвыборки по условию. У меня есть таблица, полученная при помощи CreateDataSourse. В ней есть поле T. Оно не уникально, так как данные тиковые и сделки случаются чаще чем раз в секунду. Хочется сформировать подвыборку, состоящую из тиков последних 1800 сек. В Python я бы это сделал так:
    ds=ds[os.time(ds.T)>os.time()-1800]
    В LUA я ничего похожего найти не могу.
    Есть ли простое решение?
    Заранее большое спасибо!

    1. Цикл for, не проверял, но примерно так, простых решений нет:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      
      local last_index = ds:Size()
      local last_tick_sec = os.time(ds:T(last_index))
      new_ds = {}
      for i = 1, last_index do
         if last_tick_sec - os.time(ds:T(i)) <= 1800 then
            new_ds[#new_ds + 1] = {}
            new_ds[#new_ds] .open = ds:O(i)
            new_ds[#new_ds].close = ds:C(i)
            new_ds[#new_ds].high = ds:H(i)
            new_ds[#new_ds].low = ds:L(i)
            new_ds[#new_ds].volume = ds:V(i)
            new_ds[#new_ds].datetime = ds:T(i)
         end
      end
  3. Спасибо за вашу помощь, Дмитрий.
    Вот у меня еще такой вопрос:
    Когда в нижеприведенном скрипте запрашиваю минуты, то все ок, а тики - ничего не выводит. Значит ли это, что тиковой истории просто нет?
    function main()
    ds, err=CreateDataSource ("SPBFUT", "SiH8", INTERVAL_TICK);
    while (err == "" or err == nil) and ds:Size() == 0 do sleep(1) end
    if err ~= "" and err ~= nil then message("CreateDataSource error:"..err) end
    for i = 1, tonumber(ds:Size()-1) do
    history:write(tostring(ds:C(i)).."\n")
    end
    while IsRun do
    sleep(30)
    end
    end

    1. Здравствуйте! Всегда пожалуйста! У меня вот такой код выводит первые 10 тиков:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      function main()
         ds, err=CreateDataSource ("SPBFUT", "SiH8", INTERVAL_TICK);
         while (err == "" or err == nil) and ds:Size() == 0 do sleep(1) end
         if err ~= "" and err ~= nil then message("CreateDataSource error:"..err) end
         for i = 1, 10 do
            message(tostring(ds:C(i)))
         end
         while IsRun do
         sleep(30)
         end
      end
      1. Печально, но ваш код у меня тоже не работает. Хотя если в вашем коде я меняю интервал на минутки то все работает...
        Я когда установил квик сразу отключил все какие можно было загрузки данных. Может в этом дело и нужно что-то включить?

          1. Все получилось. На всякий случай, если кому будет полезно - брокер БКС не подключает по умолчанию поток обезличенных сделок, нужно попросить техподдержку подключить. Без этого меню заказ данных - поток обезличенных сделок пусто.
            Спасибо, Дмитрий:)

              1. Столкнулся еще с тем, что поле BID как и OFFER не могу получить через заказ данных. БКС говорит, что это уже элемент стакана, а через поток обезличенных сделок только сделки можно сохранять. Зачем же тогда есть это поле в функции createdatasourse? Может у другого брокера это возможно, не знаете?

  4. Здравствуйте, Дмитрий.
    Помогите, пожалуйста со следующим вопросом:
    я хочу использовать в скрипте секундную скользящую среднюю. Причем чтобы она начала давать сигналы я хочу хотя бы историю в 30 мин. Доступна ли такая история сразу, или мой скрипт должен ее накапливать каждый раз? Если доступна, скажите пожалуйста, как ее взять? спасибо.

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

    1. Сам спросил сам ответил - не меняется - щас рассмотрел. Почему вопрос возник с утра вроде менялся номер заявки или демо глюканул или я.

  5. Здравствуйте! Можно ли использовать тот же TRANS_ID для заявки, который уже был использован, но на следующий день, если квик не выключался на ночь и робот не останавливался?

  6. 1. Есть ли какой способ запускать из Qlua *.bat файл на компьютере? У меня вся логика в скриптах на Python, а их запустить нужно. 2. Предполагаю использовать для передачи данных (цены-ордера) обычный текстовый файл. А нельзя ли из QLua читать memory-mapped file object, созданный в Python?

    1. Здравствуйте!
      1. Можете использовать командную строку, пример закрытия терминала: os.execute('TASKKILL /IM info.exe')
      2.Думаю можно, но никогда не пытался этого сделать, по этому, не могу ничего подсказать, знаю только вариант подключения DLL к скрипту и работа с MMF через нее. Здесь есть разные примеры: https://quikluacsharp.ru/category/qlua-c-cpp-csharp/

  7. Здравствуйте. Столкнулся с такой проблемой. на счету есть деньги для покупки 6 контрактов. Через клуа покупаю 2 контракта и выставляю стоп заявку на 6 контрактов. При срабатывании стопа выдает ошибку
    " не достаточно средств" (хотя по идее могу выставлять стоп на 8 контрактов). Если это же действие выполнить вручную (покупка+стоп) ошибки не выдает. В чем может быть проблема?

      1. Не выдает. Спокойно срабатывает и позиция получается -4 контракта.
        Разница лонг или шорт не имеет значения, и там и там одинаковая ошибка

        1. А параметры Вы сравнивали между ручной и алгоритмической заявкой ? У Вас, скорее всего, стоит проскальзывание от текущей цены большое в алгоритмической и при исполнении на биржу попадает заявка по далекой цене и лимиты уже по другому считаются.

          1. Спасибо большое! Действительно, проскальзывание у меня стояло на мин.воз.цене (или на макс. воз.цене). Сделал проскальзывание в 100 пунктов и проблема решилась. Еще раз спасибо.

  8. Всем доброго времени суток!!!
    Обращаюсь к знающим людям.
    Нужно в переменные получить Ask, Bid , количество лотом по инструменту, минимальное количество акций в инструменте, баланс.
    Если кто может накидать пример, буду очень благдарен.

          1. Здравствуйте, Дмитрий!
            С Вашей помощью разобрался как получать данные по инструменту:
            Ask = getParamEx("TQBR", "VTBR", "OFFER").param_value
            Bid = getParamEx("TQBR", "VTBR", "BID").param_value и т.д. Здесь все понял.
            Но никак не могу понять как получать данные по открытым позициям по акциям
            for i = 0,getNumberOf("FUTURES_CLIENT_HOLDING") - 1 do --здесь что ставить вместо FUTURES_CLIENT_HOLDING чтобы перебирать позиции по акцим???
            if getItem("FUTURES_CLIENT_HOLDING",i).sec_code == "RIH5" and getItem("FUTURES_CLIENT_HOLDING",i).totalnet ~= 0 then -- здесь сравниваем код инструмента и проверяем объем, тогда по идее как я понимаю можно получать данные в переменные. Но никак. Помогите!

              1. Спасибо, Дмитрий!
                Вроде дело пошло. Начал перебирать ордера! Только еще один вопрос, у меня две активные позиции, а выдает 12.
                Как отсеять только работающие???

                    1. Вы там внимательно посмотрите описание функции, ей необходимы объявленные переменные в скрипте для работы, возможно Вы упустили этот момент.

  9. Здравствуйте.
    Ищу способ в Квике иметь историю инструментов.
    Задача состоит именно в том, что бы можно было построить график любого фьючерса даже за 2010 год. Котировки взять из файла. Тип котировок не важен, бары или тики, создам какие нужно. Ну и конечно же что бы с этим графиком можно было работать как с обычным другим, то есть добавлять на него индикаторы, обращаться к нему из скриптов по ID.
    В общем хотелось бы создать что то типа тестера стратегий, но прям в квике, что бы не писать в разных платформах, да еще и на разных языках. Написать алгоритм, добавить его на фьючерсы которые в данный момент торгуются не проблема, но как бы увидеть как этот алгоритм работал ранее, на тех фьючерсах которые уже истекли, вот это проблема.
    Рассмотрю любые варианты, какие только в голову придут, даже самые .... в общем любые, вплоть до подмены файлов в папке Квика. Пока нашел только папку archive где вроде как я думаю лежат именно графики, которые я открывал или открыты в данный момент. Они конечно бинарные, и что бы их раскодировать придется постараться сильно, но может и получиться. Теоретически это выглядит так. Берем котировки нужного фьючерса, конвертируем их в файл понятный квику и отправляем в папку archive. Запускаем квик, он читает это наш файл и строит график в терминале.

    Если есть какие то еще варианты, напишите, может найдется путь проще.

    1. Могу предложить такой вариант, сам пользуюсь уже года 3-4.
      После сессии закрываете квик, делаете копию, из копии удаляете ненужный хлам - все папки кроме архива и файлы типа QLUA.chm, не нужные библиотеки, .pdf и т.п. - все файлы, без которых квик запустится нормально.
      Покупаете внешний диск на 1-3 Тб в нем делаете папки :2017 => 11 => Quik_28
      И пользуетесь.
      Например можно взять и всю историю сделок сохранить в файл, сделать бота, который рассчитает стратегию, а посмотреть можно на часовом графике - ну до куда дотянется.
      Стратегии по Таблице обезличенных сделок за год из файла у меня считаются секунд 20-30 на i5 3.8 GHz.

      1. Интересный способ, спасибо. Если я правильно понял собираем историю и подменяем когда нужно. Способ хороший, но мне все же нужна история не с сегодняшнего дня, а раньше.
        Вчера целый день разбирал файлы из папки архив и все же "раскодировал" их, разобрался что там и как записано. Оказалось там как раз то что нужно, просто бары и ничего лишнего там нет, только в начала что то типа идентификатора. В общем набросал небольшую программу что бы проверить. В итоге получил то что хотел. Программа создает файл для папки архива и Квик это файл подхватывает и читает как нужно. Теперь остается написать программу конвертации котировок в этот формат и можно любой инструмент подсунуть.
        Проверил по ограничениям, в принципе хватает. Реально удалось загрузить в Квик график из 65536 баров, не тормозит ни грамма, все отлично. остается проверять как с таким графиком можно будет работать, индикаторы, скрипты и прочее, но это уже в дальнейшем посмотрим, первый шаг сделан.

      2. А вот по поводу стратегий с этим мне еще предстоит разобраться. Видел в Квике такое окошко, но ничего там не понял, так что ничего создать не смог. Надо почитать, разобраться что к чему, может и стратегии применить как то удастся.