Андрей (Автор тем)

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

Страницы: 1
Как квик считает волатильности бида и аска ?
 
Подскажите как квик выворачивает волатильности бида и аска ? То что улыбка транслируется биржей - я знаю, меня интересует именно подсчет волатильности по ценам.

Я в своей программе считаю волатильность через метод Ньютона Рафсона, получается хорошо для опционов дата экспираций которых достаточно сильно оттдалена от текущего момента. , однако для опционов которые экспирируются завтра - расчет разительно расходится с данными квика. Подскажите как Вы считаете волатильность по переданной цене ?
Создает ли CreateDataSource источник данных если его запустить во внерабочее время ?
 
Доброго времени суток, вопрос следующий:
Создает ли CreateDataSource источник данных если его запустить во внерабочее время ?

Дело в том, что в моих скриптах ,всегда когда я создаю источник данных перед началом сессии или же во внерабочее время (по фьючерсам имею ввиду, к примеру во время клиринга или же ночью) то Size() всегда зависает равным 0. После я перезапускаю обычно скрипт когда начинаются торги.

Если не перезапускать скрипт, то тогда изменится ли Size() на адекватное значение и пойдут ли котировки ? Или же обязательно нужно перезапускить (либо програмно раз в пару мин к примемеру проверять создался ли источник данных  и пересоздавать его вновь если значение size() все еще равно нулю ?)

Дабы не быть голословным вот пример:
Код
main = function()
   class_code = "SPBFUT";
   sec_code = "RIU8";

   ds, Error = CreateDataSource(class_code, sec_code, 0)
   while (Error == "" or Error == nil) and ds:Size() == 0 do sleep(1) end; -- вот в этом цикле зависает скрипт если во внерабочее время запустить данный пример. Зависает из за того что size() == 0
   ds:SetEmptyCallback();

   message("Источник создан");
end;


Вполне возможно он все таки сам выйдет из этого цикла, но у меня не когда не хватало терпения это проверить, сразу же перезапускал.
Ошибка получения параметра "order_num" поля таблицы "orders" через lua_CApi.
 
Здравствуйте, данный вопрос является продолжением начатой мною темы:https://forum.quik.ru/forum10/topic3539/
Которая перешла в несколько иное русло.

Как уже писал в данной теме, я не смог удалить ордер из за того, что не получилось передать в качестве параметра требуемый order_num.

Когда я протестировал два одинаковых скрипта (один на чистом lua, а другой на lua_CApi ) - то обнаружил интересную закономерность (либо я криворукий... поправте в случае нахождения ошибки)
первый скрипт - на qlua - возвращает верное значение lua_CApi. Второй (скрипт близнец) - на С++ с использованием lua_CApi - возвращает значение order_num: -2147483648

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

Qlua:
Код
function main()
   for i = getNumberOf("orders")-1,0,-1 do
      T = getItem("orders",i);
      if T.sec_code == "ROSN" and
         bit.test(T.flags,0) then
         message(tostring(T.order_num));
      end;
   end;
end;


lua_CApi + C++:
Код
#include <Windows.h>
#include <thread>

#define LUA_LIB
#define LUA_BUILD_AS_DLL
extern "C" {
#include "Lua\lauxlib.h"
#include "Lua\lua.h"
}




BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
   return TRUE;
}

static struct luaL_reg ls_lib[] = {
   { NULL, NULL }
};

#include <bitset>
extern "C" LUALIB_API int luaopen_test_addition(lua_State *L)
{
   auto _test = [](int bit_num, int bit_test)
   {
      std::bitset<16> bits(bit_num);

      return bits[bit_test] == 1;
   };
   lua_settop(L, 0);
   lua_getglobal(L, "getNumberOf");
   lua_pushfstring(L, "orders");
   lua_call(L, 1, 1);

   int length = (int)lua_tonumber(L, -1);
   lua_settop(L, 0);
   for (size_t i = 0; i < length; i++)
   {
      lua_getglobal(L, "getItem");
      lua_pushfstring(L, "orders");
      lua_pushnumber(L, i);
      lua_call(L,2,1);

      lua_getfield(L, -1, "sec_code");
      std::string sc = lua_tostring(L, -1);
      lua_remove(L, -1);
      lua_getfield(L, -1, "flags");
      int f = lua_tonumber(L, -1);
      lua_remove(L, -1);

      if (sc.compare("ROSN") == 0 && _test(f, 0))
      {
         lua_getfield(L, -1, "order_num");
         int N = lua_tonumber(L, -1);
         lua_remove(L, -1);

         msg_ToQuik(L, std::to_string(N), 1);
      }
      lua_settop(L, 0);
   }

   return 0;
}
Ошибка "Вы не можете снять эту заявку"
 
Здравствуйте, не пойму в чем дело обстоит.

Заполняю поля:
CLASSCODE
SECCODE
ACTION = "KILL_ORDER"
ORDER_KEY = order_num
TRANS_ID

В итоге получаю описанную выше ошибку. подскажите какие поля я не верно заполняю ? Стараюсь снять заявку на акциях.
Даты экспираций в структурах orders и stop_orders
 
Вопрос №1 В каких случаях дата жкспирации может равняться  "-1" ? (имеются ввиду поля таблиц где она как число представлена)
Вопрос №2 Почему возвращается дата экспирации равная "1601.01.01 00:00:00" даже  в случае когда ордер выставлен не как "До отмены", а как "До определенной даты"?
в каких случаях order_date_time == nil в таблице orders
 
По инструменту открыта лимитка на покупку. счет правда демка Ваша, но думаю это не должно влиять на правильность работы функции.

Следующий код от чего то показывает что поле order_date_time == nil Подскажите в чем может быть причина ?
Код
function main()
   for i = getNumberOf("orders")-1,0,-1 do
      T = getItem("orders",i);
      if T.sec_code == "SiM8" and
         bit.test(T.flags,0) then
         message(tostring(T.order_date_time));
      end;
   end;
end;
Где ошибка при подписки на тиковые данные ?
 
Прикладываемый код не как не может выйти из цикла.
Но если подписываться на минутки к примеру, то подписка срабатывает.
Код
main = function()
   class_code = "SPBFUT";
   sec_code = "RIM8";

   ds, Error = CreateDataSource(class_code, sec_code, 0)
   while (Error == "" or Error == nil) and ds:Size() == 0 do sleep(1) end;
   ds:SetEmptyCallback();

   
end;
Поле "param_value" из таблицы ф-ции "getParamEx" и "getParamEx2"
 
В инструкции сказано, что данное поле мажет содержать следующие типы данных :
  • «1» - DOUBLE;
  • «2» - LONG;
  • «3» - CHAR;
  • «4» - перечислимый тип;
  • «5» - время;
  • «6» - дата
Меня интересует как представляются последние два типа данных ? Структура(если да, то какие конкретно поля в ней) или же числовое значение ? (к примеру дата в Unix формате).

Заранее благодарю.
Установка Quik на Linux
 
Доброго времени суток, хотелось бы узнать есть ли надежный способ поставить Quik на линукс системы (Debian, Ubuntu...) Какие зависимости нужны будут и не будет ли глючить. Так же интересно будет ли работать Lua и стыковки Lua + C++ dll при банной установки. Возможно где то есть готовая инструкция по подобной установке ?  
понять демо или реальный qlua
 
Доброго времени суток господа.

Подскажите, как Вы отличаете демо от реала используя Qlua ?
CreateDataSource Params
 
Данный вопрос уже поднимался на форуме, однако у меня он возник вновь. Я выгрузил параметры из таблицы текущих торгов, однако хотелось бы узнать какие из них лишние? К примеру ISIN-код бумаги явно не вписывается в концепцию источников данных... Возможно существует готовый и отредактированный список ? У меня получилась следующая выгрузка,:

lotsize, //Лот
prevprice, //Цена закр.
longname, //Бумага
shortname, //Бумага сокр.
code, //Код бумаги
isincode, //ISIN-код бумаги
regnumber, //Рег.номер
cfi_code, //CFI-код бумаги
classname, //Класс
class_code, //Код класса
trade_date_code, //Дата торгов
sec_face_value, //Номинал
sec_face_unit, //Валюта
sec_scale, //Точность
sec_price_step, //Шаг цены
discount1, //Дисконт1
discount2, //Дисконт2
discount3, //Дисконт3
sec_comment, //Комментарий
sectype, //Тип инструмента
status, //Статус
bid, //Спрос
biddepth, //Кол. спрос
biddeptht, //Общ. спрос
numbids, //Заявки куп.
offer, //Предл.
offerdepth, //Кол. предл.
offerdeptht, //Общ. предл.
numoffers, //Заявки прод.
high, //Макс. цена
low, //Мин. цена
last, //Цена послед.
change, //Измен. к закр.
qty, //Кол-во послед.
time, //Время послед.
voltoday, //Общее кол-во
valtoday, //Оборот
tradingstatus, //Сессия
value, //Оборот посл.
waprice, //Ср. взв. цена
numtrades, //Кол-во сделок
prevwaprice, //Пред. оц.
lastchange, //% измен.закр.
anontrade, //Анон. торг.
mat_date, //Погашение
days_to_mat_date, //До погашения
settledate, //Дата расч.
assured, //Необесп. торги
open, //Откр.
highbid, //Лучш. спрос
lowoffer, //Лучш. пред
primarydist, //Размещение IPO
accruedint, //НКД
yield, //Доходность
couponvalue, //Размер купона
couponperiod, //Длит.куп.
yieldatprevwapri, //Доход.пред.оц.
yieldatwaprice, //Доход.оц.
priceminusprevwa, //Изм. к пред.оц.
closeprice, //Закр.
closeyield, //Доход.закр.
marketprice, //Вч.рын.цена
marketpricetoday, //Рын.цена
nextcoupon, //Дата выпл. куп.
buybackprice, //Оферта
buybackdate, //Дата расч.доход
issuesize, //Объем обр.
prevdate, //Дата посл.торг.
duration, //Дюрация
lcurrentprice, //Оф.тек.цена
lcloseprice, //Оф.цена закр.
quotebasis, //Тип цены
admittedquote, //Призн.котир.
prevadmittedquot, //Призн.кот.пред.
lastbid, //Спрос сессии
lastoffer, //Предл.сессии
marketprice2, //Рын.цена2
prevlegalclosepr, //Пред.цена закр.
openperiodprice, //Цена предторг.
min_curr_last, //Мин.тек.цена
settlecode, //Код расч.
min_curr_last_ti, //Вр. изм.м.т.ц.
issuesizeplaced, //Объем в обр.
currencyid, //Сопр.валюта
listlevel, //Листинг
qualified, //Квалиф. инвестор
yieldatprevwapr, //Доход.пред.оц.
oblpercent, //Тип цены обл.
starttime, //Начало
endtime, //Окончание
pricemax, //Макс. возм. цена
pricemin, //Мин. возм. цена
changetime, //Время изм.
optionbase, //Баз.актив
tradechange, //Тренд
prevsettleprice, //Пред.расч.цена
numcontracts, //Кол-во отк.поз.
selldepo, //ГО продавца
buydepo, //ГО покупателя
steppricet, //Ст. шага цены
stepprice, //Ст. шага цены
steppricecl, //Ст.шага цены кл.
steppriceprcl, //Ст. шага промкл.
settleprice, //Расч. цена
percentrate, //Ставка
clstate, //Статус кл.
clprice, //Кот. клиринга
evnstarttime, //Начало веч.
evnendtime, //Окончание веч.
monstarttime, //Начало утр.
monendtime, //Окончание утр.
curstepprice, //Валюта шага цены
realvmprice, //Рын. котир.
expdate, //Дата исп.
futuretype, //Тип фьючерса
ispercent, //Тип цены
firstopen, //Перв.цена сессии
lastclose, //Посл.цена сессии
prevsettlevol, //Пред.расч.объем
optionbaseclass, //Класс баз.актива
crossrate, //Курс
counterprice, //Цена контраг.
plannedtime, //Начало аук.план
auctprice, //Цена аукц.
auctvalue, //Объем аукц.руб
auctvolume, //Кол-во аукц.
auctnumtrades, //Кол-во сд.аукц.
imbalance, //Дисбаланс ПА
marketvolb, //Рын.пок.
marketvols, //Рын.прод.
first_cur, //Валюта покупки
second_cur, //Валюта прод.
currentvalue, //Знач.
lastvalue, //Зн.закр.
min, //Минимум
max, //Максимум
openvalue, //Открытие
pchange, //% изменение
iopen, //Открытие
lowval, //Мин.
highval, //Макс.
icapital, //Капитал. бумаг
ivolume, //Объем инд.сдел.
baseprice, //Баз.курс
rth, //Верх.гран.
rtl, //Нижн.гран.
k_h, //К.верх.гран.
k_l, //К.нижн.гран.
settledate1, //Дата расч.1
tradingphase, //Бирж.Сессия
bgop, //БГОП
bgonp, //БГОНП
strike, //Страйк
optiontype, //Тип опциона
volatility, //Волатильность
theorprice, //Теор. цена
marg, //Марж.
optionkind, //Разн. опц.
buy_mat, //Погашение пок.
sell_mat, //Погашение прод.
buy_class, //Класс покупки
buy_sec, //Бумага покупки
sell_class, //Класс прод.
sell_sec //Бумага прод.
Улучшить документацию по Qlua
 
1) Сделать как можно больше примеров (по возможности на каждую из функций)

2) К таблицам добавить типы данных каждой из строк таблицы

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

4) перенести Api Qlua на С++. (это даст пользователям куда больше возможностей для написания роботов и этим Вы сможете несколько упрочить свои позиции на рынке. ведь тот же Mql5 и то более удобен для написания роботов. НО НЕ ДЕЛАЙТЕ еще один Mql5! Этих специализированных языков (которые не дают возможности сделать что то кроме своей узкой задачи и так полно...) ).
вопросы по полям sentTransaction
 
Я знаю что все поля заполняются как строки, но мне нужно знать каков изначальный тип данных (я позже перевожу его в строковый формат)

Подскажите какому типу соответствует значение следующих полей (и до какого знака нужно их округлять, если тип double или float):
START_DISCOUNT
LOWER_DISCOUNT
UPPER_DISCOUNT
PARTNER
SETTLE_CODE
REPOTERM
REPORATE
REFUNDRATE
SETTLE_DATE - интересует формат даты в строке "YYYYMMDD" ?
BASE_ORDER_KEY
VOLUMEMN
VOLUMEPL
KFL
KGO
Где ошибка при заполнении таблица для стоп лосса и тейк профита ?
 
Помогите где я ошибаюсь при заполнении таблицы ?

Заполняю следующим образом:
Код
local T = {
       TRANS_ID = tostring(math.random(1,1000000)),
       CLASSCODE = class_code,
       SEC_CODE = sec_code,
       ACCOUNT = account,
       ACTION = "NEW_STOP_ORDER",
       QUANTITY = tostring(T_position.qty),
       EXPIRY_DATE = "GTC",
       IS_ACTIVE_IN_TIME = "NO",
            OPERATION = "B",
            OFFSET = "0",
            OFFSET_UNITS = "PRICE_UNITS"
     }

-- SL

T["COMMENT"] = "SL";
T["STOPPRICE"] = tostring(SL);
T['MARKET_STOP_LIMIT'] = 'NO'
T["PRICE"] = tostring(getPrice(T["OPERATION"],SL));


--TP

T["COMMENT"] = "TP";
T["STOP_ORDER_KIND"] = "TAKE_PROFIT_STOP_ORDER";
T["STOPPRICE"] = tostring(TP);
T['MARKET_TAKE_PROFIT'] = 'NO'
T["PRICE"] = tostring(getPrice(T["OPERATION"],TP));
Ошибка следующая:
Ошибка выставления стоп-заявки TP:  Не указан инструмент транзакции
awg_position_price
 
Доброго времени суток. Хотелось бы узнать из за чего происходит следущее:

я стараюсь узнать цену открытия по акциям, но вместо этого получаю в ответ цену деленную на 100. То есть, 1621,5 =  16,215.
Это был тест на демке Арки, на реале не проверял. Это только с демо счетом актуально ? или же на реале так же будет ?
Автоматическое снятие стопа
 
Здравствуйте, можно ли как нибудь сделать следующее:
1) Если существует уже открытая позиция, прицепить к ней стоп и тейк одновременно (или же что то одно) с условием если эта позиция была закрыта (либо по рынку, либо по стопу или тейку или же еще как нибудь...) то тогда выставленные стоп лосс и тейк профит снимались бы автоматически ?

2) Открываю заявку по лимитному ордеру (или же по стоп ордеру) и после срабатывания заявки, автоматически ставятся стоп лосс и тейк профит с тем же условием, (что после закрытия позиции или же отмены выставленной заявки и стоп и тейк снимались бы)

Как я понимаю, стоит копать в направлении Связанных заявок, однако я не совсем пойму какие полы нужно заполнять в структуре для достижения требуемого результата...  
OnTrade, OnOrder
 
Вопрос по этим коллбекам (OnTrade, OnOrder)

Как я понял, они вызываются, если была совершена сделка либо выставлен ордер (либо изменения по существующим)

1) Считаются и операции совершенные вручную тоже ?
2) Вызываются ли эти коллбеки во время клиринга ?  
Реальная цена открытия позиции.
 
Доброго времени суток. Хотелось бы узнать, как получить реальную цену открытия позиции, а не цену открытия позиции после клиринга ?

Т.е. что бы допустим, я запустил робота, прошел клиринг, а он смог бы узнать реальную цену открытия. или же вдруг на сервере произошла перезагрузка, терминал был выключен после запускаю все заново и робот смог бы опять подхватить реальную цену открытия. (интересует как срочный рынок, так и фондовый) и желательно без костылей вроде сохранения цены открытия в базе данных и прочего...  
Направление прошлой сделки
 
Доброго времени суток. У меня тут вопрос, от куда (кроме таблицы всех сделок) можно получить информацию о направлении прошлой сделки (за последний тик) т.е. мне нужно знать была ли покупка или же продажа на прошлом тике.
Таблица всех сделок вроде дает эту информацию, однако мне нужно сделать так, что бы не нужно было в квике открывать не какие таблицы. т.е. запустил робота, и он сам тягает эту информацию.
Lua Dll на C++
 
Доброго времени суток. У меня следующий вопрос:
Использую Lua_Api для плюсов. Lua 5.1.

1) Запускаю квик.

2) Квик вызывает скрипт луа и определяет несколько функций запускащихся в разных потоках.
допустим это коллбеки прихода котировок и основной поток - main,
Либо поток main и еще какой либо коллбек из квика работающий в другом потоке

3) Сам скрипт Lua выглядит как вызов Dll, написанной на C++.

   require("My dll");

Внутри Dll я подписываюсь на эти 2 функции (т.е. коллбека от квика) и получается что вызов из терминала, отправляется в Dll и вызываются функции из моей Dll.

3.1) Внутри Dll переменная Lua вынесена в глобальную и к ней подключаются еще нескольку функций, которые могут выполняться, как в каком либо из двух потоков запускаемых квиком, так и в каком либо своем потоке...

----------

Собственно из всего описанного вытек вопрос, нужно ли мне в каждой из функций (включая те что запускаются как коллбеки с программы № 1) делать луа как разделяемый ресурс ? Или же стек сам поймет что его вызывают из другого потока и не будет глючить не чего?

----------
 
Коллбеки Луа, Может ли таблицы получаемые коллбеками быть массивом ?
 
Доброго времени суток, у меня вопрос касательно коллбеков языка Qlua. Точнее все те коллбеки что в руководстве пользователя занесены в раздел "Функции обратного вызова" и принимающее в качестве параметра - таблицу. Подскажите, может ли так случиться, что данная таблица будет являться массивом таблиц ? (Речь не о специфики Lua, я помню что все таблицы предоставляются как ключ значение и массивов так таковых нет) Меня интересует каким из следующих вариантов может быть принимаемая таблица:

1) Таблица содержит озаглавленные поля в руководстве и каждому из полей (столбцы) присуще только одно значение в таблице (иначе говоря в таблице есть ТОЛЬКО ОДИН РЯД).
2) Таблица содержит озаглавленные поля в руководстве и каждому из полей (столбцы) присуще более одного значения в таблице (иначе говоря в таблице есть МОЖЕТ СОДЕРЖАТЬ БОЛЕЕ ОДНОГО РЯДА).
3) ВМЕСТО таблицы, передается МАССИВ, содержащий таблицу с озаглавленными столбцами и ТОЛЬКО ЛИШЬ ОДНИМ рядом.
Почему не создаются таблицы для таймфреймов выше 1 минуты ?, Подскажите в чем может быть ошибка ? код идентичен, но таблица не создается.
 
Приветствую собравшихся. Помогите решить проблему. У меня есть 2 скрипта по созданию таблиц OHLC данных. один для минутного графика, другой для часовика. Проблема в том, что скрипт для часовика не работает (а точнее не создает требуемую таблицу).

Смотрел пошагово, котировки получаются, таблица формируется, однако не хочет заполняться... Причем код обоих скриптов один и тот же, он отличается лишь в способе расчета времени, Котировки приходят и на часовом и на минутном скрипте, но вот часовой только не хочет отображать их в таблице... Буду признателен Вам за помощь, заранее благодарю.
По этой ссылке, можно скачать оба скрипта:
https://cloud.mail.ru/public/HHF1/7SDzKVRjx

Скрипт работает так "Quick 7.14.1.7" :
1) Строится график цен или же индикатора (к примеру Open Interest)
2) Задается Tag (для минутного RTS_M1, для часового RTS_H1) - Дважды кликнуть по графику, затем вкладка "Дополительно" и в поле идентификатор вставляем требуемый Tag
2) Создается таблица стандартным способом открытия скрипта
Страницы: 1
Наверх