Изучаем Qlua.

Страницы: 1 2 След.
RSS
Изучаем Qlua., "hello world"
 
В силу определенных обстоятельств мои знания в программировании остановились на создании программки  hello world.  Думаю, я не одинок , а учиться никогда не поздно.
предлагаю сделать ветку вопросов от Чайников.
Итак вот я выставил заявку
t = {

["CLASSCODE"]="SPBFUT",

["SECCODE"]="GZZ5",

["ACTION"]="NEW_ORDER",

["ACCOUNT"]="SPBFUXXXXXX",

["CLIENT_CODE"]="SPBFUXXXXX",

["TYPE"]="L",

["OPERATION"]="B",

["QUANTITY"]="1",

["PRICE"]="13900",

["TRANS_ID"]="123"

}

res=sendTransaction(t)

sleep(500)

вопрос ? как ее теперь снять . просто удалить.
если  поменять ["ACTION"]="KILL_ORDER"  то не работает.
 
Цитата
kettle пишет:

вопрос ? как ее теперь снять . просто удалить.
если поменять ["ACTION"]="KILL_ORDER" то не работает.
Правильно не работает. Нужно еще указать, какую заявку вы хотите снять:
Код
   t =
   {
      ["TRANS_ID"] = "124",
      ["ACCOUNT"] = "SPBFUXXXXXX",
      ["CLASSCODE"] = "SPBFUT",
      ["SECCODE"] = "GZZ5",
      ["ACTION"] = "KILL_ORDER",
      ["ORDER_KEY"] = "<номер снимаемой заявки>"
   }
 
Цитата
SDL пишет:

Правильно не работает. Нужно еще указать, какую заявку вы хотите снять:
да, это логично,  я то же так думал.
но есть вопрос .
каждой заявке присваивается уникальный номер.  то есть этот номер нужно запомнить или записать куда-то, чтобы его потом взять .
то есть мне нужна какая-то переменная, в которую будет сохраняться номер заявки.  
с синтаксисом не понятно.
как правильно сохранить в переменную  номер выставленой заявки?
 
Все стопы
Код
function killStopOrders( seccode )
   local transaction,bs,res={},{},""
   for i=0,getNumberOf("stop_orders")-1 do   bs=getItem("stop_orders",i)
      if bit.band(bs.flags, 1)~=0 and bs.seccode==seccode then
         transaction.ACTION=tostring("KILL_STOP_ORDER")
         transaction.TRANS_ID=tostring(math.random(2000000000))
         transaction.CLASSCODE=tostring( bs.class_code )
         transaction.STOP_ORDER_KEY=tostring( bs.ordernum )
         if sendTr ==1 then res=sendTransaction( transaction )   end
         if res~="" then message ( "killStopOrders() =     ".. tostring(res) ,3) end
      end
   end
end

 
А также можно конкретно указать по STOP_ORDER_KEY
 
Цитата
kettle пишет:
как правильно сохранить в переменную номер выставленой заявки?
Например, так:
Код
function OnTransReply(trans_reply)
   orderNum = trans_reply.order_num
end

См. в документации по QLUA:
1. Функции обратного вызова: OnTransReply(), OnOrder().
2. Функции для обращения к строкам произвольных таблиц QUIK.
3. Структуры данных: Транзакции, Заявки.
 
Привет! Подскажите, почему функции обратного вызова срабатывают по несколько раз?
Например, вот такой код:
Код
IsRun = true;
 
function main()
   while IsRun do
      sleep(1000);
   end;   
end;
 
function OnTrade(trade)
    message("Номер сделки в торговой системе "..tostring(trade.trade_num));
end;
 

При открытии сделки OnTrade срабатывает всегда ДВА раза!
 
Функции колбек вызываются при поступлении с сервера информации о каких-либо изменениях (событиях) данного типа объекта.
--------------------------
Безусловно, можно изучать все возможные события и потом придумывать ,
что же делать в каждом случае.
Процесс познания увлекателен и бесконечен.
-------------------------------
Но можно делать иначе:
Реагировать лишь на те события, которые нам важны для управления своими позициями.
-------------------------
Колбек OnTrade - это реакция на события совершения сделок, в которых участвует заявка брокера по нашему поручению.
Например, Если в этой заявке указано купить 100 лотов, а желающие купить, покупают лишь по одному, то колбек OnTrade будет вызван минимум 100 раз.
------------------------------
Поэтому в реальных сделках число вызовов данного колбека заранее неизвестно.
----------------------------------
Если нам  важен лишь момент, когда заявка будет исполнена полностью,
то фильтруем вызов колбека по номеру заявки и флагу ее исполнения.
Ну и т д
 
поправка,следует читать:
-------------
"Например, Если в этой заявке указано купить 100 лотов, а желающие продать, подают заявки по нашей или лучшей цене лишь по одному, то колбек OnTrade будет вызван минимум 100 раз."
 
Спасибо за ответ. То, что заявка на 100 лотов может быть реализована за 100 сделок - это понятно. Не понятно, почему OnTrade будет вызван минимум сто раз. В моем случае я совершаю сделку по рынку 1-им лотом Сбера и всегда получаю две сработки коллбэка. Добавил в вывод коллбэка показать флаги исполнения заявки.
В обоих сработках выводится один и тотже номер заявки и одинаковые наборы флагов...

Может быть это особенность тестовой среды Quik Junior..
 
Цитата
Кондратий Карамелькин пишет:


Может быть это особенность тестовой среды Quik Junior..
Добрый день.

Нет, это не особенность тестовой среды.
Повторные колбэки вы можете получить и на боевой системе.
Причины, Вам уже выше озвучили.
 
Хм...
Цитата
Вячеслав пишет:
Одна сделка, три сработки - OnTrade()
Цитата
Egor Zaytsev пишет:
Мы изучим вопрос и вернемся к Вам позже.
Надо делать так, как надо. А как не надо - делать не надо.
 
После обновления с 6ки до 7.0.4.10 появилась та же проблема. Буду как-то решать.
Брокер буквально 2 недели назад сделал обновление.
Хороший хостинг
https://hubhost.ru/server/vds/?ref=45
 
Не подскажете  как изменить код что бы он работал на фондовом?
На срочном рынке он работает нормально и снимает все заявки а на акциях не работает.
Притом не выскакивает никаких ошибок просто заявки не снимает.
Нужно что бы он снимал ВСЕ заявки в определённое время или работал через определённые интервалы времени. Вот этот код:
is_run = true
function main()
while is_run do
sleep(1000)
t = {
["CLASSCODE"]="TQBR",
["SECCODE"]="",
["BASE_CONTRACT"]="%",
["ACTION"]="KILL_ALL_ORDERS",
["ACCOUNT"]="СВОЙ СЧЁТ",
["CLIENT_CODE"]="СВОЙ КОД",
["TRANS_ID"]="1"
  }
  res=sendTransaction(t)
   end
end
Единственное я изменил с    ["ACTION"]="KILL_ALL_FUTURES_ORDERS",
на   ["ACTION"]="KILL_ALL_ORDERS",
 
Цитата
Никита Васильев пишет:
Не подскажете как изменить код что бы он работал на фондовом?
На срочном рынке он работает нормально и снимает все заявки а на акциях не работает.
Притом не выскакивает никаких ошибок просто заявки не снимает.
Нужно что бы он снимал ВСЕ заявки в определённое время или работал через определённые интервалы времени. Вот этот код:
is_run = true
function main()
while is_run do
sleep(1000)
t = {
["CLASSCODE"]="TQBR",
["SECCODE"]="",
["BASE_CONTRACT"]="%",
["ACTION"]="KILL_ALL_ORDERS",
["ACCOUNT"]="СВОЙ СЧЁТ",
["CLIENT_CODE"]="СВОЙ КОД",
["TRANS_ID"]="1"
}
res=sendTransaction(t)
end
end
Единственное я изменил с ["ACTION"]="KILL_ALL_FUTURES_ORDERS",
на ["ACTION"]="KILL_ALL_ORDERS",
Добрый день.

Судя по представленному коду - он должен работать.
Уточним, что параметр TRANS_ID для каждой транзакции должен быть уникальным.
Попробуйте сменить на другое значение, которого ранее при подаче транзакции не было. Если все же проблема сохранится,
то выложите тот код программы, который вы запускаете на рабочем месте. Мы проверим входные параметры.
 
Для QLua условие уникальности TRANS_ID не является обязательным, т.е. работоспособность функции sendTransaction не зависит от уникальности этого параметра.
А по "KILL_ALL_ORDERS" здесь есть ответ: KILL_ALL_ORDERS из Qpile и QLua
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Цитата
Старатель пишет: Для QLua условие уникальности TRANS_ID не является обязательным, т.е. работоспособность функции sendTransaction не зависит от уникальности этого параметра. А по "KILL_ALL_ORDERS" здесь есть ответ: KILL_ALL_ORDERS из Qpile и QLua
Как думаю с наскока не получится удалять все заявки по типу как на ФОРТСЕ. Тогда хотя бы удалять заявки по одной. Вот скрипт но он не работает : is_run = true function main() while is_run do sleep(1000) t = { ["CLASSCODE"]="TQBR", ["SECCODE"]="SBER", ["BASE_CONTRACT"]="%", ["ACTION"]="KILL_ORDER", ["ACCOUNT"]="своё счёт", ["CLIENT_CODE"]="свой код", ["TYPE"]="L", ["OPERATION"]="B", ["TRANS_ID"]="1", ["ORDER_KEY"]="", } res=sendTransaction(t) message(res,1) end end выскакивает ошибка(Не указано значение поля "Заявка"): Но ведь я не знаю какие номера заявок так как они бывают разные. КАК ТО МОЖНО ЭТО ИСПРАВИТЬ? Вообще то из стакана можно убрать все заявки нажав (снять все заявки).Вот какой код квик отсылает когда выбирают строчку снять все заявки в стакане?

 
Здравствуйте,
Попробуйте следующую функцию

Код
 function KillAllOrders(classCode, secCode, brokerref)
   function myFind(C,S,F, BR)
      return (C == classCode) and (S == secCode) and (bit.band(F, 0x1) ~= 0) and (BR == brokerref)
   end
   local res=1
    local ord = "orders"
   local orders = SearchItems(ord, 0, getNumberOf(ord)-1, myFind, "class_code,sec_code,flags,brokerref")
   if (orders ~= nil) and (#orders > 0) then
      for i=1,#orders do
         local transaction={
                  ["TRANS_ID"]=tostring(1000*os.clock()),
                  ["ACTION"]="KILL_ORDER",
                  ["CLASSCODE"]=classCode,
                  ["SECCODE"]=secCode,
                  ["ORDER_KEY"]=tostring(getItem(ord,orders[i]).order_num)
            }
         local res=sendTransaction(transaction) 
      end
   end
   return res 
end

 
Не получилось. Может скрипт надо изменить как ни буть? Что ни буть добавить или убавить?
Добавлял , удалял :["ACCOUNT"]=СВОЙ,

["CLIENT_CODE"]=СВОЙ,

["CLASSCODE"]="TQBR",

["SECCODE"]="SBER",
Все равно не получается
 
Цитата
Никита Васильев пишет:
Все равно не получается
ЧТо именно не получается?
И зачем Вы что то добавляли в примере?
Вам просто надо вызвать функцию KillAllOrders с параметрами (код класса, код бумаги, код клиента)
Если Вам надо без кода клиента можно так:

Код
 function KillAllOrders(classCode, secCode)
   function myFind(C,S,F, BR)
      return (C == classCode) and (S == secCode) and (bit.band(F, 0x1) ~= 0) 
   end
   local res=1
    local ord = "orders"
   local orders = SearchItems(ord, 0, getNumberOf(ord)-1, myFind, "class_code,sec_code,flags")
   if (orders ~= nil) and (#orders > 0) then
      for i=1,#orders do
         local transaction={
                  ["TRANS_ID"]=tostring(1000*os.clock()),
                  ["ACTION"]="KILL_ORDER",
                  ["CLASSCODE"]=classCode,
                  ["SECCODE"]=secCode,
                  ["ORDER_KEY"]=tostring(getItem(ord,orders[i]).order_num)
            }
         local res=sendTransaction(transaction) 
      end
   end
   return res 
end
 
 
 Как с помощью SearchItems собрать таблицу с активными(снятыми) стоп заявками? в таблице стоп заявок три заявки (1 активная, 2 снятые) Делаю так, не получается
Код
function xx(cc)
   if cc.status == "killed" then 
      return true
      else
         return false
      end
end

   t = 0
   t = getNumberOf("stop_orders")
   if (t > 0) then
      n = {}
      n = SearchItems("stop_orders", 0, t - 1, xx)
   
      message(tostring(n))
      
   end
 
Здравствуйте,
В таблице stop_orders нет такого поля status(см документацию)
поэтому функция не работает
 
вот так?
Код
function xx(cc)
   if cc.bit.band(flags,0)>0 then 
      return true
      else
         return false
      end
end

   t = 0
   t = getNumberOf("stop_orders")
   if (t > 0) then
      n = {}
      n = SearchItems("stop_orders", 0, t - 1, xx)
   
      message(tostring(n[3]))
      
   end
 
в результате в массиве n должны быть таблицы со значением заявок, которые подходят под условие (активные или нет).
т.е. скажем
n[0][массив с первой стоп заявкой]
n[1][массив со второй стоп заявкой]
или нет?
 
Цитата
Валентин написал:
if cc.bit.band(flags,0)>0 then

Это некорректное использование.
Вот так надо
if bit.band(cc.flags,0)>0 then
 
Цитата
Sergey Gorokhov написал:
Цитата
Валентин   написал:
if cc.bit.band(flags,0)>0 then
Это некорректное использование.
Вот так надо
if bit.band(cc.flags,0)>0 then

Приведенное условие есть тождественная ложь. Будьте внимательны.
 
Всем привет! Подскажите начинающему, какую команду добавить в код робота, чтобы получить текущую цену фьючерса из квик ?
 
Цитата
petrovichpas написал:
Всем привет! Подскажите начинающему, какую команду добавить в код робота, чтобы получить текущую цену фьючерса из квик ?
Добрый день.

Для этого Вам необходимо воспользоваться функцией getParamEx.
Функция предназначена для получения значений всех параметров биржевой информации  из Таблицы текущих торгов.

Формат вызова следующий:

TABLE getParamEx (STRING class_code, STRING sec_code, STRING  param_name)

более подробно в руководстве пользователя Qlua. Раздел Функции взаимодействия скрипта Lua и Рабочего места  QUIK.
 
Цитата
Цитата
Egor Zaytsev написал:

Для этого Вам необходимо воспользоваться функцией getParamEx.
Функция предназначена для получения значений всех параметров биржевой информации  из Таблицы текущих торгов.

Формат вызова следующий:

TABLE getParamEx (STRING class_code, STRING sec_code, STRING  param_name)

более подробно в руководстве пользователя Qlua. Раздел Функции взаимодействия скрипта Lua и Рабочего места  QUIK.
Благодарю за ответ! Все работает.
 
Будьте добры, подскажите а каким образ выставляются стоп-заявки по уже выставленным заявкам ?
И как выставить лимитированный тэйк-профит после срабатывания заявки?
Прочитал все ветки форума но так и не допер, робот не запускается.
Код выставления заявок приложил.

price=tonumber(getParamEx("SPBFUT","SiH7","last").param_value)

for v = 50,50,50 do

     --покупка

     buy = {

["CLASSCODE"] = "SPBFUT",

["SECCODE"] = "SiH7",

["ACTION"]="NEW_ORDER",

["ACCOUNT"] = "7618",

["CLIENT_CODE"] = "7618",

["TYPE"]= "L",

["OPERATION"]= "B",

["QUANTITY"]= "1",

["PRICE"]= tostring(price-v),

["TRANS_ID"]= "1"

}

     res = sendTransaction(buy)

     message("Выставили заявочку на покупку",1)


     --продажа

     sell = {

["CLASSCODE"]="SPBFUT",

["SECCODE"]="SiH7",

["ACTION"]="NEW_ORDER",

["ACCOUNT"]="7618",

["CLIENT_CODE"]="7618",

["TYPE"]="L",

["OPERATION"]="S",

["QUANTITY"]="1",

["PRICE"]=tostring(price+v),

["TRANS_ID"]="2"

}

     res = sendTransaction(sell)

     message("Выставили заявочку на продажу",1)
 
end
 
Цитата
petrovichpas написал:
Будьте добры, подскажите а каким образ выставляются стоп-заявки по уже выставленным заявкам ?
По уже выставленным, это стоп "по исполнению"? Если так, то это ACTION=NEW_STOP_ORDER и STOP_ORDER_KIND равный одному из вариантов:
«ACTIVATED_BY_ORDER_SIMPLE_STOP_ORDER» – стоп-лимит по исполнению заявки,
«ACTIVATED_BY_ORDER_TAKE_PROFIT_STOP_ORDER» – тэйк-профит по исполнению заявки,
«ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER» - тэйк-профит и стоп-лимит по исполнению заявки.
Пример транзакции есть в документации на терминал QUIK
-Раздел 5. Торговые операции клиента
--Импорт транзакций
---Формат .tri-файла с параметрами транзакций
----Примеры строк, которые могут содержаться в файле
 
Sergey Gorokhov, спасибо! Жить стало немного легче)).  
 
Цитата
Sergey Gorokhov написал:
Если так, то это ACTION=NEW_STOP_ORDER и STOP_ORDER_KIND равный одному из вариантов:
«ACTIVATED_BY_ORDER_SIMPLE_STOP_ORDER» – стоп-лимит по исполнению заявки,
«ACTIVATED_BY_ORDER_TAKE_PROFIT_STOP_ORDER» – тэйк-профит по исполнению заявки,
«ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER» - тэйк-профит и стоп-лимит по исполнению заявки.
1. Эти заявки выставляются по исполнению другой заявки или в в том числе по уже исполненной?
Иными словами, если основная заявка выставлена, но пока выставлялась 2-я заявка по исполнению 1-й, первая уже выполнилась, то 2-я заявка "по исполнению" исполнится немедленно?
Т.е. ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER, если в параметрах будет указана уже исполненная заявка, будет вести себя как просто TAKE_PROFIT_AND_STOP_LIMIT_ORDER?
2. Эти заявки можно "привязывать" только к лимитным заявкам или к стоп тоже можно?
 
Цитата
Sergey Gorokhov написал:
Если так, то это ACTION=NEW_STOP_ORDER и STOP_ORDER_KIND равный одному из вариантов:
«ACTIVATED_BY_ORDER_SIMPLE_STOP_ORDER» – стоп-лимит по исполнению заявки,
«ACTIVATED_BY_ORDER_TAKE_PROFIT_STOP_ORDER» – тэйк-профит по исполнению заявки,
«ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER» - тэйк-профит и стоп-лимит по исполнению заявки.
1. Эти заявки выставляются по исполнению другой заявки или в в том числе по уже исполненной?
Иными словами, если основная заявка выставлена, но пока выставлялась 2-я заявка по исполнению 1-й, первая уже выполнилась, то 2-я заявка "по исполнению" исполнится немедленно?
Т.е. ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER, если в параметрах будет указана уже исполненная заявка, будет вести себя как просто TAKE_PROFIT_AND_STOP_LIMIT_ORDER?
2. Эти заявки можно "привязывать" только к лимитным заявкам или к стоп тоже можно?
3. Лимитные заявки автоматически снимаются после клиринга, а заявки "по исполнению" так же автоматически снимаются? И вообще что происходит если снимается заявка, к которой привязана заявка "по исполнению"?
4. Почему исполнение только "TODAY". Конечно, лимитная живет только сегодня, но позиция по ней остается и на завтра и стоп как продлить?
 
Drionn Drionn,

Стоп заявка "По исполнению" срабатывает по исполнению активной лимитированной заявки.
Подробней в документации на терминал QUIK:
-Раздел 5. Торговые операции клиента
--Заявка с условием «по исполнению»
 
Цитата
Sergey Gorokhov написал:
Стоп заявка "По исполнению" срабатывает по исполнению активной лимитированной заявки.
Подробней в документации на терминал QUIK:
-Раздел 5. Торговые операции клиента
--Заявка с условием «по исполнению»
Спасибо.
Однако в указанной документации речь идет об интерактивном способе, а меня интересует qlua.
Кроме того условие "по исполнению" имеет двойной смысл.
Первый - по событию перехода "активная" в "исполнена"
Второй - она может применяться к уже исполненной без ожидания исполнения.
Так она работает в обоих смыслах или только для первого?
В документации я не обнаружил что происходит с заявкой "по исполнению" если основная (к которой она привязана) будет снята?
 
Цитата
Drionn Drionn написал:
Однако в указанной документации речь идет об интерактивном способе, а меня интересует qlua.

Вы спрашиваете про поведение стоп заявки, а оно не зависит от того через интерфейс ее подавать или через Lua.
"по исполнению" - означает ровно то что означает. а именно ПО исполнению. А не НА исполненной. т.е. по событию перехода заявки из "активная" в "исполнена".
Цитата
Drionn Drionn написал:
Так она работает в обоих смыслах или только для первого?

Читаем документацию:
Цитата

Заявки «по исполнению» представляют собой условные заявки, условием активации (начала проверки их стоп-цены сервером QUIK) которых является исполнение определенной активной заявки («заявки-условия»).

Цитата
Drionn Drionn написал:
В документации я не обнаружил что происходит с заявкой "по исполнению" если основная (к которой она привязана) будет снята?
Читаем документацию:
Цитата

Если заявка-условие снята или отвергнута торговой системой, то снимаются все связанные с ней заявки «по исполнению».
 
Добрый вечер! Не пойму как проверить исполнена ли заявка, не могли бы Вы привести пример по аналогии:
if bit.band(order["flags"],1)>0 tnen
message("активна",1)
if bit.band(order["flags"],4)>0 then
message("продажа",1)
 
if bit.band(order.flags,1) + bit.band(order.flags,2)==0  then message("исполнена",1)
 
if bit.band(order.flags,1) + bit.band(order.flags,2)==0  then message("исполнена",1) end;
 
Цитата
Николай Камынин написал:
if bit.band(order.flags,1) + bit.band(order.flags,2)==0  then message("исполнена",1) end;
Благодарю за исчерпывающий ответ!
 
Всем доброго утра! Благодаря форумчанам продвинулся в написании собственного робота. Сейчас пытаюсь исправить недостаток при выставлении заявок.
Можно ли каким-то образом выставляя заявку прописать условие, чтобы при частичном исполнении, остаток снимался? Вроде как вручную это сделать можно, скрин прилагаю. Или нужно заниматься удалением неисполненного  остатка через КИЛЛ_ОРДЕР?
 
petrovichpas,

Условие исполнения, указывается в параметре EXECUTION_CONDITION
см документацию на терминал QUIK
-Раздел 6. Совместная работа с другими приложениями
--Импорт транзакций
---Формат .tri-файла с параметрами транзакций
 
Как можно написать на Lua скрипт что бы  при исполнении стоп заявки выставлялась стоп и тэйк профит? Например при загрузке этого скрипта выскакивает ошибка не найдена связаная заявка ,так как ["BASE_ORDER_KEY"]="0", ,если 0 убрать все равно выскакивает ошибка нет номера базовой заявки.оно и понятно при выставлении скрипта её неоткуда взять . Как исправить скрипт что бы можно было выставлять стоп на стоп, откуда ему брать номер выставленной стоп заявки?                    price=16200

for v=1,1,1 do

--продажа

     t = {

                 ["CLASSCODE"]="SPBFUT",

                 ["SECCODE"]="SRU7",

                 ["ACTION"]="NEW_STOP_ORDER",

                 ["ACCOUNT"]="SPBFUT",

                 ["CLIENT_CODE"]="98324",

                 ["TYPE"]="0",

                 ["OPERATION"]="S",

                 ["QUANTITY"]="1",

                 ["STOPPRICE"]=tostring(price-v*5),

                 ["PRICE"]=tostring(price-v*6),

                 ["STOP_ORDER_KIND"]="ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER",

                 ["OFFSET"]="5",                  

                 ["OFFSET_UNITS"]="PRICE_UNITS",

                 ["SPREAD"]="3",

                 ["SPREAD_UNITS"]="PRICE_UNITS",

                 ["BASE_ORDER_KEY"]="0",

                 ["USE_BASE_ORDER_BALANCE"]="YES",

                 ["ACTIVATE_IF_BASE_ORDER_PARTLY_FILLED"]="YES",

                 ["MARKET_TAKE_PROFIT"]="YES",

                 ["STOPPRICE2"]="19090",

                 ["MARKET_STOP_LIMIT"]="YES",

                 ["TRANS_ID"]="1",

           }

     res=sendTransaction(t)

     message(res,1)
end
 
Добрый день.
Цитата
Как исправить скрипт что бы можно было выставлять стоп на стоп, откуда ему брать номер выставленной стоп заявки?

Вы указываете ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER, это означает, что выставляется тэйк-профит и стоп-лимит по исполнению заявки. Именно заявки, а не стоп заявки. Вам нужно указать номер уже выставленной, активной заявки.  
 
Как отследить факт изменения текущей чистой позиции по конкретному инструменту срочного рынка и вывести сообщение с указанием этого факта и указанием актуального значения этой текущей чистой позиции? Спасибо.
 
Цитата
Олег Лефлер написал:
Как отследить факт изменения текущей чистой позиции по конкретному инструменту срочного рынка и вывести сообщение с указанием этого факта и указанием актуального значения этой текущей чистой позиции? Спасибо.
Добрый день.

Можете обратиться к таблице позиций по клиентским счетам.
Параметр, который отвечает за текущие позиции: totalnet.
Можно настроить вывод сообщений или запись в файл каждое изменение.
Вся информация доступна в справке QLUA.chm.  
 
Здравствуйте! Есть вопрос по снятию частично исполненных лимитных заявок.

Выставлено 5 лотов, исполнено 2. Ещё действующая заявка на оставшиеся 3 лота снимается по общим правилам или есть какие-то особенности?
 
Цитата
Александр Волфовиц написал:
Здравствуйте! Есть вопрос по снятию частично исполненных лимитных заявок.

Выставлено 5 лотов, исполнено 2. Ещё действующая заявка на оставшиеся 3 лота снимается по общим правилам или есть какие-то особенности?
Добрый день.

Если это лимитированная заявка, фондовый рынок с признаком поставить в очередь, то да, снимется по общим правилам.  
 
При выставлении стоп заявки  когда цена касается цены стоп заявки выставляется лимитная заявка.
А если лимитная заявка неисполняется то она висит в терминале .
Неподскажете как изменить эту часть заявки в стоп заявке что бы выставленная лимитная заявка после срабатывания стоп заявки в случаи неисполнения сама снималась или отклонялась биржей?
t = {

                 ["CLASSCODE"]="SPBFUT",

                 ["SECCODE"]="SPZ6",

                 ["ACTION"]="NEW_STOP_ORDER",

                 ["ACCOUNT"]="SPBFUT001jl",

                 ["CLIENT_CODE"]="888888",

                 ["TYPE"]="0",

                 ["OPERATION"]="S",

                 ["QUANTITY"]="1",

                 ["STOPPRICE"]=tostring(price-v*20),

                 ["PRICE"]=tostring(price-v*20),

                 ["TRANS_ID"]="1"

           }

     res=sendTransaction(t)

     message(res,1)

end

 
Здравствуйте, Николай Колесников.
Если правильно Вас понимаем, Вы хотите, чтобы в момент, когда цена достигает значения стоп-цены - выставлялась заявка по этой же цене, и в случае, если сразу не будет найдено встречное предложение и заключена сделка - то заявка должна быть снята. Это соответствует определению рыночной заявки.
Для того, чтобы подать рыночную заявку - необходимо изменить следующие поля
Код
...
["TYPE"]="M"
...
["PRICE"]="0"
...

Также предлагаем Вам ознакомиться с возможными значениями следующих полей, которые Вы можете использовать:
Код
["ACTION"]="KILL_ORDER"
- снять заявку
Код
["ACTION"]="KILL_STOP_ORDER"
- снять стоп-заявку
Условие исполнения заявки, необязательный параметр. Возможные значения:
Код
["EXECUTION_COUNDITION"]="FILL_OR_KILL" 
- немедленно или отклонить.

Подробнее о возможных параметрах транзакции и их значениях можно в Руководстве Пользователя QUIK.chm, Формат .tri-файла с параметрами транзакции. Руководство находится в каталоге с файлами терминала.
Страницы: 1 2 След.
Читают тему
Наверх