Написал я всё же скрипт по ограничению выставления заявок. У программиста самое неприятное, когда всё работает, но не так) Вообщем у меня всё аналогично. После 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)
Владимир Ишанин пишет: А если пишу через переменную - количество лотов в позиции, то не ничего не происходит. BuyVol = getItem("FUTURES_CLIENT_HOLDING",i).totalnet; -- Количество лотов в позиции BUY lenght = string.len(BuyVol) vol = string.sub(BuyVol,1,length) + 1 .... ["QUANTITY"] = tostring(vol)
Владимир Ишанин пишет: У меня в таблице транзакций заявки регистрируются, но моя позиция при этом никак не изменяется, что может быть не так?
Позиция изменяется при исполнении заявки, т.е. после сделки .
Т.е. у меня не проходит сделка, получается, хотя заявка регистрируется. Есть ли какой-то способ узнать, почему сделка не проходит? Или по данной цене нету такого количества, которое я запрашиваю.. Тогда как из этого выходить
Владимир Ишанин пишет: У меня в таблице транзакций заявки регистрируются, но моя позиция при этом никак не изменяется, что может быть не так?
Позиция изменяется при исполнении заявки, т.е. после сделки .
Т.е. у меня не проходит сделка, получается, хотя заявка регистрируется. Есть ли какой-то способ узнать, почему сделка не проходит? Или по данной цене нету такого количества, которое я запрашиваю.. Тогда как из этого выходить
Можно в стакане посмотреть что вообще есть и чего нет.
Т.е. я так понял, чтобы полностью закрыть свою позицию, скрипт должен проверить объем контрактов по лучшей цене и если мне их не хватит, он должен проверить следующую цену и купить контрактов по этой цене и если снова не закроется делать эту последовательность дальше, пока не закроется? Или можно где-то прописать, чтобы он покупал всё, начинаю от лучшей цены и так далее пока не закроется одной функцией или параметром?
Владимир Ишанин пишет: Т.е. я так понял, чтобы полностью закрыть свою позицию, скрипт должен проверить объем контрактов по лучшей цене и если мне их не хватит, он должен проверить следующую цену и купить контрактов по этой цене и если снова не закроется делать эту последовательность дальше, пока не закроется? Или можно где-то прописать, чтобы он покупал всё, начинаю от лучшей цены и так далее пока не закроется одной функцией или параметром?
Ну, в общем случае, для уверенности что заявка будет непременно исполнена - да. Но для этой цели существует понятие g:Исполнение по рынку
Кроме того у заявки есть разные флаги. Типа "исполнить или отклонить". Тут надо для себя решить, что важнее: цена исполнения или объем или сам факт исполнения заявки.
Владимир Ишанин пишет: Т.е. я так понял, чтобы полностью закрыть свою позицию, скрипт должен проверить объем контрактов по лучшей цене и если мне их не хватит, он должен проверить следующую цену и купить контрактов по этой цене и если снова не закроется делать эту последовательность дальше, пока не закроется? Или можно где-то прописать, чтобы он покупал всё, начинаю от лучшей цены и так далее пока не закроется одной функцией или параметром?
Ну, в общем случае, для уверенности что заявка будет непременно исполнена - да. Но для этой цели существует понятие g:Исполнение по рынку
Кроме того у заявки есть разные флаги. Типа "исполнить или отклонить". Тут надо для себя решить, что важнее: цена исполнения или объем или сам факт исполнения заявки.
Вот у меня есть исполнение по рынку в моей транзакции, но он все равно не исполняет его. Моя заявка снимается.. Можешь подсказать пожалуйста, почему.. Я стараюсь эту проблему найти в гугле, но пока безуспешно.. вроде бы всё так просто, выставить заявку и увеличить\уменьшить позицию свою, даже написано всё правильно, по-моему.. но не работает или очень редко..
Это "недокументированные возможности" У вас в одной транзакции указывается и признак рыночной заявки (["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, там есть функция закрыть позицию.. Там ведь мы не выбираем ничего, она сама погашается. Можно ли как-то этим воспользоваться и использовать данную функцию, но уже в скрипте? Не заморачиваясь ;)
Скорее всего при нажатии этой кнопки терминал просто генерирует команду на продажу (ну, если в лонг стоим) всех лотов сколько есть по минимально возможной цене.
Ничего не мешает в скрипте делать также. Честно говоря, я не понимаю что у вас за сложности-то возникают :(
Люди, спасибо вам огромное, что помогли мне с моей неопытностью, глупостью.. Я шел из магазина и меня осенило, что выставлял заявку на продажу, по цене выше, по которой люди хотят купить контракт.. Т.е. я в очередь грубо говоря становлюсь и жду, пока цена покупки не повысится до моей.. А мне надо было ставить цену, по которой люди хотят купить и тогда сразу заявка исполнялась.. Как же я до этого сразу не дошел.. И вот, спустя несколько дней я, с вашей помощью, это понял.. Я даже побежал быстрее домой, чтобы проверить и все получилось.. Я рад) Спасибо вам огромное)