Не выставляет заявку на продажу\покупку

Страницы: 1
RSS
Не выставляет заявку на продажу\покупку
 
Написал я всё же скрипт по ограничению выставления заявок.
У программиста самое неприятное, когда всё работает, но не так)
Вообщем у меня всё аналогично. После 3 заявкой в течении минуты, скрипт должен заблокировать клавиатуру и мышь, включить таймер на время этой блокировки и погасить всю позицию по заданному инструменту ( SiZ5 )
Всё отлично, но в окне Котировки позиция не закрывается, с ней ничего не происходит. Знающие люди, можете объяснить почему, пожалуйста) Весь интернет облазил с этим скриптом)
Скрипт блокировки пока не вставлял. Заранее спасибо)
Скрипт
 
Проблема в количестве лотов. Если я в транзакции сам прописываю количество, то всё хорошо
["QUANTITY"]   = "3"
А если пишу через переменную - количество лотов в позиции, то не ничего не происходит.
BuyVol = getItem("FUTURES_CLIENT_HOLDING",i).totalnet; -- Количество лотов в позиции BUY
lenght = string.len(BuyVol)
vol = string.sub(BuyVol,1,length) + 1
....
["QUANTITY"]   = tostring(vol)

Если вывести переменную через Message, то она содержит правильное количество лотов в позиции ( 13, 12 и т п )
 
Цитата
Владимир Ишанин пишет:
А если пишу через переменную - количество лотов в позиции, то не ничего не происходит.
BuyVol = getItem("FUTURES_CLIENT_HOLDING",i).totalnet; -- Количество лотов в позиции BUY
lenght = string.len(BuyVol)
vol = string.sub(BuyVol,1,length) + 1
....
["QUANTITY"] = tostring(vol)
А что здесь? Вот так не проще?
Код
["QUANTITY"] = tostring(getItem("FUTURES_CLIENT_HOLDING",i).totalnet + 1)
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель пишет:
Цитата
Владимир Ишанин пишет:
А если пишу через переменную - количество лотов в позиции, то не ничего не происходит.
BuyVol = getItem("FUTURES_CLIENT_HOLDING",i).totalnet; -- Количество лотов в позиции BUY
lenght = string.len(BuyVol)
vol = string.sub(BuyVol,1,length) + 1
....
["QUANTITY"] = tostring(vol)
А что здесь? Вот так не проще?
Код
  [ "QUANTITY" ]  =  tostring( getItem ( "FUTURES_CLIENT_HOLDING" ,i).totalnet  +   1 )  
У меня может быть заявка и на покупку, если я в шорте, а там позиция отрицательная и через Math.abs делается..  
 
У меня в таблице транзакций заявки регистрируются, но моя позиция при этом никак не изменяется, что может быть не так?
Скриншот

Я уже в недоумении от этого)


Код
bid= getParamEx("SPBFUT","SiZ5","OFFER").param_value -- Определяем цену 
bid1 = string.sub(bid,1,5) - убираем нули после точки
bid2 = getParamEx("SPBFUT","SiZ5","SEC_PRICE_STEP").param_value - Определяем шаг
bid3 = string.sub(bid2,1,5) 
local Transaction={
      ["TRANS_ID"]   = tostring(trans_id_FUT),
      ["CLASSCODE"]=   "SPBFUT",
      ["SECCODE"]=   "SiZ5",
      ["ACTION"]     = "NEW_ORDER",
      ["OPERATION"]  = "S", -- покупка (BUY)
      ["TYPE"]       = "M", -- по рынку (MARKET)
      ["QUANTITY"]   = "10", -- количество
      ["ACCOUNT"]    = TRADE_ACC,
      ["PRICE"]      = tostring(bid1+5*bid3) -- Выставляем цену + 5 пунктов
   }
 
А в чём проблема?
Код
["QUANTITY"] = tostring(math.abs(getItem("FUTURES_CLIENT_HOLDING", i).totalnet) + 1)
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Владимир Ишанин пишет:
У меня в таблице транзакций заявки регистрируются, но моя позиция при этом никак не изменяется, что может быть не так?
Позиция изменяется при исполнении заявки, т.е. после сделки.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель пишет:
Цитата
Владимир Ишанин пишет:
У меня в таблице транзакций заявки регистрируются, но моя позиция при этом никак не изменяется, что может быть не так?
Позиция изменяется при исполнении заявки, т.е. после сделки .
Т.е. у меня не проходит сделка, получается, хотя заявка регистрируется.
Есть ли какой-то способ узнать, почему сделка не проходит?
Или по данной цене нету такого количества, которое я запрашиваю.. Тогда как из этого выходить
 
Цитата
Владимир Ишанин пишет:
Цитата
Старатель пишет:
Цитата
Владимир Ишанин пишет:
У меня в таблице транзакций заявки регистрируются, но моя позиция при этом никак не изменяется, что может быть не так?
Позиция изменяется при исполнении заявки, т.е. после сделки .
Т.е. у меня не проходит сделка, получается, хотя заявка регистрируется.
Есть ли какой-то способ узнать, почему сделка не проходит?
Или по данной цене нету такого количества, которое я запрашиваю.. Тогда как из этого выходить
Можно в стакане посмотреть что вообще есть и чего нет.
 
Т.е. я так понял, чтобы полностью закрыть свою позицию, скрипт должен проверить объем контрактов по лучшей цене и если мне их не хватит, он должен проверить следующую цену и купить контрактов по этой цене и если снова не закроется делать эту последовательность дальше, пока не закроется? Или можно где-то прописать, чтобы он покупал всё, начинаю от лучшей цены и так далее пока не закроется одной функцией или параметром?
 
Таблицы заявок, сделок, очереди котировок (стакан), возможно, вам помогут.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Владимир Ишанин пишет:
Т.е. я так понял, чтобы полностью закрыть свою позицию, скрипт должен проверить объем контрактов по лучшей цене и если мне их не хватит, он должен проверить следующую цену и купить контрактов по этой цене и если снова не закроется делать эту последовательность дальше, пока не закроется? Или можно где-то прописать, чтобы он покупал всё, начинаю от лучшей цены и так далее пока не закроется одной функцией или параметром?
Ну, в общем случае, для уверенности что заявка будет непременно исполнена - да.
Но для этой цели существует понятие g:Исполнение по рынку

Кроме того у заявки есть разные флаги. Типа "исполнить или отклонить".
Тут надо для себя решить, что важнее: цена исполнения или объем или сам факт исполнения заявки.
 
Цитата
Imersio Arrigo пишет:
Цитата
Владимир Ишанин пишет:
Т.е. я так понял, чтобы полностью закрыть свою позицию, скрипт должен проверить объем контрактов по лучшей цене и если мне их не хватит, он должен проверить следующую цену и купить контрактов по этой цене и если снова не закроется делать эту последовательность дальше, пока не закроется? Или можно где-то прописать, чтобы он покупал всё, начинаю от лучшей цены и так далее пока не закроется одной функцией или параметром?
Ну, в общем случае, для уверенности что заявка будет непременно исполнена - да.
Но для этой цели существует понятие g:Исполнение по рынку

Кроме того у заявки есть разные флаги. Типа "исполнить или отклонить".
Тут надо для себя решить, что важнее: цена исполнения или объем или сам факт исполнения заявки.
Вот у меня есть исполнение по рынку в моей транзакции, но он все равно не исполняет его. Моя заявка снимается.. Можешь подсказать пожалуйста, почему.. Я стараюсь эту проблему найти в гугле, но пока безуспешно.. вроде бы всё так просто, выставить заявку и увеличить\уменьшить позицию свою, даже написано всё правильно, по-моему.. но не работает или очень редко..
Код
Скриншот таблиц
 
 
Скриншот
 
Это "недокументированные возможности"  :lol:
У вас в одной транзакции указывается и признак рыночной заявки (["TYPE"] = "M") и цена (["PRICE"] = tostring(bid1+5*bid3)). Видимо, с такими параметрами заявка выставляется с условием "Немедленно или отклонить", и если не находит встречного предложения, то сразу отклоняется.
Надо задавать либо лимитированную заявку с ценой, либо маркет-заявку с нулевой ценой.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель пишет:
Это "недокументированные возможности"
У вас в одной транзакции указывается и признак рыночной заявки (["TYPE"] = "M") и цена (["PRICE"] = tostring(bid1+5*bid3)). Видимо, с такими параметрами заявка выставляется с условием "Немедленно или отклонить", и если не находит встречного предложения, то сразу отклоняется.
Надо задавать либо лимитированную заявку с ценой, либо маркет-заявку с нулевой ценой.
Извините, видимо, я совсем глупый.. Я понял, что мне нужна не лимитированная заявка, а маркет-заявка, по рыночной цене, пока не закроюсь. Вы сказали, с нулевой ценой, я поставил.. Теперь вылазит всегда ошибка - Ошибка создания заявки. [FORTS][32] "Цена сделки вне лимита".
Я прошарил весь форум с такой ошибкой, в некоторых местах пишут, что может быть из-за брокера такое, некоторые пишут, что нужно покупать по максимальной\минимальной цене..
Код
local Transaction={
      ["TRANS_ID"]   = tostring(trans_id_FUT),
      ["CLASSCODE"]=   "SPBFUT",
      ["SECCODE"]=   "SiZ5",
      ["ACTION"]     = "NEW_ORDER",
      ["OPERATION"]  = "S", -- покупка (BUY)
      ["TYPE"]       = "M", -- по рынку (MARKET)
      ["QUANTITY"]   = "3", -- количество
      ["ACCOUNT"]    = TRADE_ACC,
      ["PRICE"]      = "0"
   }
Скриншот
 
Если вы торгуете на площадке фортс, то ставить признак "М" и цену = 0 не получится.
Нужно выставлять обычную лимитную заявку, но с ценой заведомо хуже текущих цен в стакане но не выходя за планку.

В примере выше, где заявка по 65607 на два лота отбилась - возможно стоял признак "немедленно или отклонить". В таком случае заявка на продажу по цене выше рынка не могла быть исполнена немедленно, и поэтому была отклонена.

Как вы можете видеть со своего же скрина, предыдущая заявка "по рынку" (а на самом деле по верхней планке) была удовлетворена, и вы купили один лот.
А вот продать не смогли.

Разбирайтесь с режимами подачи заявок. Нельзя просто так взять и смешать все в кучу и надеяться что "авось как-то сработает"
 
Цитата
Imersio Arrigo пишет:
Если вы торгуете на площадке фортс, то ставить признак "М" и цену = 0 не получится.
Нужно выставлять обычную лимитную заявку, но с ценой заведомо хуже текущих цен в стакане но не выходя за планку.

В примере выше, где заявка по 65607 на два лота отбилась - возможно стоял признак "немедленно или отклонить". В таком случае заявка на продажу по цене выше рынка не могла быть исполнена немедленно, и поэтому была отклонена.

Как вы можете видеть со своего же скрина, предыдущая заявка "по рынку" (а на самом деле по верхней планке) была удовлетворена, и вы купили один лот.
А вот продать не смогли.

Разбирайтесь с режимами подачи заявок. Нельзя просто так взять и смешать все в кучу и надеяться что "авось как-то сработает"
Спасибо огромное, дело в том, что я всегда ставил признак M и ничего не происходило.. Поставил L и всё заработало) Но теперь бывает, что цены уходят и моя заявка не срабатывает. Ну, это логично)
Есть несколько мыслей:
1. После каждого изменения стакана перетаскивать мою заявку на самую границу и до тех пор пока не погасится вся позиция. Допустим у меня позиция из 20 контрактов и я так по 1 контракту продаю у самой границе 20 раз, пока не закончатся они.
2. Вот если выбрать стакан в quik'e, там есть функция закрыть позицию.. Там ведь мы не выбираем ничего, она сама погашается. Можно ли как-то этим воспользоваться и использовать данную функцию, но уже в скрипте? Не заморачиваясь ;)
 
Цитата
Владимир Ишанин пишет:
Вы сказали, с нулевой ценой, я поставил.. Теперь вылазит всегда ошибка - Ошибка создания заявки. [FORTS][32] "Цена сделки вне лимита".
Цитата
Владимир Ишанин пишет:
2. Вот если выбрать стакан в quik'e, там есть функция закрыть позицию.. Там ведь мы не выбираем ничего, она сама погашается. Можно ли как-то этим воспользоваться и использовать данную функцию, но уже в скрипте? Не заморачиваясь ;)
Думаю, этот вопрос надо задавать техподдержке брокера или QUIK, поскольку в QUIK реализована подача маркет-поручений в секции ФОРТС.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Владимир Ишанин пишет:

1. После каждого изменения стакана перетаскивать мою заявку на самую границу и до тех пор пока не погасится вся позиция. Допустим у меня позиция из 20 контрактов и я так по 1 контракту продаю у самой границе 20 раз, пока не закончатся они.
Это ерунда какаято. объем торгов в стакане доллара достаточно велик чтобы 20 контрактов пролетели не моргнув (да что 20, там 2000 выстрелят на раз).
Что значит "у самой границы"? между бид-аск спредом? тогда да, цена может уйти.
А если выставлять у самой границы разрешенного интервала - заявку проглотят как тряпку крокодил.Владимир Ишанин пишет:
Цитата
2. Вот если выбрать стакан в quik'e, там есть функция закрыть позицию.. Там ведь мы не выбираем ничего, она сама погашается. Можно ли как-то этим воспользоваться и использовать данную функцию, но уже в скрипте? Не заморачиваясь ;)
Скорее всего при нажатии этой кнопки терминал просто генерирует команду на продажу (ну, если в лонг стоим) всех лотов сколько есть по минимально возможной цене.

Ничего не мешает в скрипте делать также.
Честно говоря, я не понимаю что у вас за сложности-то возникают :(
 
Люди, спасибо вам огромное, что помогли мне с моей неопытностью, глупостью.. Я шел из магазина и меня осенило, что выставлял заявку на продажу, по цене выше, по которой люди хотят купить контракт.. Т.е. я в очередь грубо говоря становлюсь и жду, пока цена покупки не повысится до моей.. А мне надо было ставить цену, по которой люди хотят купить и тогда сразу заявка исполнялась.. Как же я до этого сразу не дошел.. И вот, спустя несколько дней я, с вашей помощью, это понял.. Я даже побежал быстрее домой, чтобы проверить и все получилось.. Я рад) Спасибо вам огромное)
Страницы: 1
Читают тему
Наверх