Постов с тегом "Quik Lua": 232

Quik Lua


Lua for Windows

message(«a»)

------------------------------Output------------------------------
>lua -e «io.stdout:setvbuf 'no'» «a.lua»
lua: a.lua:1: attempt to call global 'message' (a nil value)
stack traceback:
a.lua:1: in main chunk
[C]: ?
>Exit code: 1

Самый простой, по сути код. Но Lua  выдаёт ошибку при компилировании без function main(), при том что Quik выполняет этот код без конструкции main или function. Раньше такой ошибки не было.
Что случилось? Кто-нибудь знает?
  • обсудить на форуме:
  • Quik Lua

Алгоритм для торговли BRENT на LUA в QUIK

Всем привет!

Smart-Lab'у я не знаком, поэтому напишу пару слов о себе. Меня зовут Артем, финансовым рыком я увлекался с 9го класса школы и хотел стать трейдером. Я имею профильное образование в российском и английских вузах, изучал международную экономику, investment management и финансовый инжиниринг. Моим первым местом работы было совместное предприятие OSTC-ATON. Вопреки скепсису многих — это одна из лучших proprietary trading компаний в мире и уж точно лучшая в России. Также я работал в крупнейшем брокере нефтепродуктов России, где был сфокусирован на физическом рынке нефти. На данный момент я нахожусь в prop отделении Freedom Finance.

Как и многие, я довольно долго шел к тому, чтобы иметь собственную стратегию. Я собирал свою стратегию по кусочкам, читая разные книги, торгуя и пробуя что-то новое. Около 2 лет назад я пришел к четким правилам, необходимым мне чтобы входить в сделки и управлять позицией. В декабре/январе я оформил свои правила в алгоритм, который торгует с 29.01.2020. Сейчас я немного о нем расскажу.

( Читать дальше )

Диаграмма в екселе - Изменение открытого интереса и горизонтальный объем.

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

Диаграмма в екселе - Изменение открытого интереса и горизонтальный объем.


  • обсудить на форуме:
  • Quik Lua

У кого есть Lua .

    • 20 апреля 2020, 08:29
    • |
    • McDuck
  • Еще
Здравствуйте народ. Хотел спросить может у кого есть Lua скрипт работающий по пересечению индикатором нулевой зоны гистограммой, который можно подключить через идентификатор в QUIK.  Либо чтобы открывались сделки по данным скрипта qpl по перевесу (дельте) оборота сделок. Скрипт прилагаю, в нем подсчитывается объем.  
Написание скрипта тоже рассмотрю, пишите в личку.  
PORTFOLIO_EX LUK;
DESCRIPTION Объёмы купли/продажи за интервал;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;

PROGRAM

'Автор:  Михаил Булычев
'Что делает:
'   подсчитывается объёмы купли\продажи по определённому инструменту за 
'   заданный интервал   
'Как использовать:
'  В следующих строках следует указать код бумаги и код класса для 
'  отслеживаемого инструмента

'=============================НАСТРОЙКИ===============================
SecCode="LKOH" '  Код инструмента
ClassCode="TQBR" 'Код класса
interv=3600 'является интервалом в секундах
razn = 0 'смещение часового пояса относительно времени торговой системы. 
'=============================НАСТРОЙКИ===============================


FUNC is_in_interval(interval, trade_time, sys_time, hour_shift)
  csys_time_value=0
  c_time_value=0
  csys_time_value =0 + (0 + get_value(sys_time, "Hour") + hour_shift)*3600 + _
                    get_value(sys_time, "Min")*60 + _
                    get_value(sys_time, "Sec")
  c_time_value=0 + ((0 + substr("" & trade_time, 0, 2)) * 3600) + ((0 + substr("" & trade_time, 2, 2)) * 60) + ((0 + substr("" & trade_time, 4, 2)))

csys_time_value = csys_time_value + 0
c_time_value = c_time_value + 0

k=csys_time_value - c_time_value

if k <= interval
    result=1
  else
    result=0
  end if
END FUNC

  buy_value=0
  sell_value=0
  total_value=0
  sys_time = GET_DATETIME()
  delete_all_items() 
  mString=create_map()
  


  j=0
  n=get_number_of("ALL_TRADES")
  for i from 0 to n
    mTrade=get_item("ALL_TRADES", n-i)
    trade_time=get_value(mTrade, "TIME")
    if (get_value(mTrade, "SECCODE")= SecCode) AND (get_value(mTrade, "CLASSCODE")= ClassCode)
      if is_in_interval(interv, trade_time, sys_time, 0-razn) = 1
        value=0+get_value(mTrade, "VALUE")
        j=j+1
        if (get_value(mTrade, "OPERATION") = "BUY")
          buy_value=buy_value+value    
        else
          sell_value=sell_value+value      
        end if
        total_value=total_value+value
      else
        break
      end if
    end if    
  end for
  mString=set_value(mString, "vol", total_value)
  mString=set_value(mString, "volbuy", buy_value)
  mString=set_value(mString, "volsell", sell_value)
  add_item(1, mString)
END_PROGRAM

PARAMETER vol;
PARAMETER_TITLE vol;
PARAMETER_DESCRIPTION Купили;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER volbuy;
PARAMETER_TITLE volbuy;
PARAMETER_DESCRIPTION Купили;
PARAMETER_TYPE NUMERIC(10,0);
END
PARAMETER volsell;
PARAMETER_TITLE volsell;
PARAMETER_DESCRIPTION Продали;
PARAMETER_TYPE NUMERIC(10,0);
END
END_PORTFOLIO_EX
  • обсудить на форуме:
  • Quik Lua

QUIK 8.5 важно для алготрейдеров на Lua

Вышел QUIK 8.5 качаем и тестируем тут ftp://ftp.quik.ru/public/updates/8.5/quik_8.5.1_upd.zip

Ключевое это поддержка идентификатора заявок и сделок 19 десятичных знаков+переход на Lua 5.3.5 x64

Отличия Lua 5.1(5.2) от 5.3 можно глянуть например тут http://antirek.github.io/luabook/incompatibility.htm

Подробнее про необходимость перехода и кому переходить тут https://forum.quik.ru/forum1/topic5117/

С 25 мая на бирже будет переход на идентификатор заявок 19 знаков, поэтому из Lua нельзя будет работать с заявками на срочном рынке.

P/S Модератор перенеси в раздел алготрейдинг

Возможности новой версии
1. Реализован функционал быстрого фильтра в таблицах. Для активации \ деактивации быстрого фильтра используется пункт «Включить быстрый фильтр» \ «Выключить быстрый фильтр» контекстного меню, открываемого для заголовка самого левого столбца таблицы. Данный функционал позволяет фильтровать информацию в таблицах QUIK с наглядным отображением критериев фильтрации.



( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Open Source : Lua - MatLab Connector (3)



Краткое описание :

Библиотека Matlab2Lua  позволяет интегрировать Lua скрипты и Маtrix Laboratory Engine.


Полное описание :

Библиотека позволяет Lua и Матлаб обмениваться данными при помощи функций :

lua variable = Get( string Matlab varname );  — получение переменной из среды матлаб по имени, поддерживаются Double Array, Cell Array of Strings, Double Value, Integer Value, String Value. Возвращает -1 в случае неудачи.

int Eval ( string MatlabСommand ) — передает команду в MatLab Command Line, в качестве переменной типа string; возвращает -1 в случае неудачи, и 1 в случае успеха.

int PutVal( string Name, string/number Value) — передает в Матлаб значение Value типа string или number под именем Name. 1- успех, -1 — неудача.

int PutDouble( string Name, table T) — передает в Матлаб под именем Name таблицу Луа, заполненную численными значениями. Ответ — аналогичный.

int PutCell( string Name, table T)  — передает в Матлаб под именем Name таблицу Луа, заполненную строковыми или численными значениями, подлежащими преобразованию в строки. Ответ — аналогичный.


( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Интеграция Lua и С++ (2)


Обмен данными между Lua и Сpp осуществляется через Lua-стэк, то есть через специальным образом структурированное (по принципу Last In — First Out) пространство. 


Интеграция Lua и С++ (2)

Иллюстрация процесса добавления переменных в Cтэк (Push) и извлечения переменных из Стэка (Pop).

Иными словами, Lua стэк — это одномерный массив переменных (список, строка) с прямой (от 1 до n) индексацией.



Заполняется стэк командами lua_push (С-side) :

void lua_pushnumber (lua_State *L, lua_Number n);
const char *lua_pushstring (lua_State *L,  const char *s);

и другими. 


Новой переменной в стэке Луа длинной n автоматически присваивается индекс [n+1] или [-1], где n+1 — абсолютный индекс переменной, а -1 — индекс новой переменной относительно конца (!) стэка. 




Доступ, к переменным, соответственно осуществляется функциями lua_to (C-side) :

lua_Number lua_tonumber (lua_State *L, int index);
const char *lua_tostring (lua_State *L, int index);
где L — указатель Lua-стэка, а index — абсолютный или относительный индекс переменной в стэке.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

QLua: таблица крупных "склеенных" обезличенных сделок

    • 03 апреля 2020, 15:06
    • |
    • _sk_
  • Еще
Иногда хочется наблюдать за ситуациями, когда участники торгов исполняют по рынку крупные заявки. Конечно, можно смотреть на обычную ленту обезличенных сделок с настроенными фильтрами на размер сделки, но ведь можно написать специальный QLua-скрипт, который будет отбирать сделки, являющиеся результатом исполнения.

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

Если суммарный объём не менее какой-то границы, которую можно задать для каждого инструмента индивидуально, такие «склеенные» сделки выводятся в таблице. В ней указаны:
— суммарный объём;
— количество обезличенных сделок, которые были склеены;
— начальная цена и конечная цена;

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

QLua: формирование свечных данных для робота

    • 31 марта 2020, 13:37
    • |
    • _sk_
  • Еще
Поделюсь своим опытом, который может быть полезен начинающим алготрейдерам, пишущим своего робота на QLua.

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

Пример 1. Мы торгуем акции на 30-минутках и при этом не хотим учитывать свечу, которая получается в 9:30 из-за аукциона открытия, и не хотим, чтобы аукцион закрытия портил последнюю свечу дня в 18:30. Хотим только нужные свечи в одном массиве.

Пример 2. Мы торгуем фьючерсы только в дневную сессию, а вечернюю сессию выбрасываем, поскольку наша стратегия в этом случае даёт более приличный график эквити. Хочется иметь «отфильтрованный» свечной ряд.

Пример 3. Мы торгуем американские акции на Санкт-Петербургской бирже и хотим, чтобы время свечей было как в Америке, а не как на бирже, и хотим оставить только основные торги с 9:30 до 16:00 по буржуйскому времени.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

....все тэги
UPDONW
Новый дизайн