Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Мая 28, 2022, 12:45:20 pm
Начало Помощь Поиск Войти Регистрация
Новости:

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Снятие лимитного ордера « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Снятие лимитного ордера  (Прочитано 5370 раз)
Scandinav
Newbie
*
Сообщений: 13


Просмотр профиля Email
« : Февраля 05, 2014, 10:49:18 pm »

Добрый день.

Возможно ли реализовать каким-то образом следующее:

Выставляется лимитный ордер. Если он не исполняется по определенному критерию, то снимается. Лимитники ведь не имеют статуса заявки? Как быть?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #1 : Февраля 06, 2014, 09:03:36 am »

Все заявки имеют статус. Лимитные заявки, пока они не сняты, имеют статус OS_ACTIVE (поле "status" в структуре заявки). При выставлении заявки функция trade_action::* возвращает номер транзакции, по которому эту заявку всегда можно снять.
Записан
Scandinav
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #2 : Февраля 06, 2014, 11:09:35 am »

Если выставить лимитную заявку на продажу выше текущей цены, то статус действительно возвращается. А если выставить ту же заявку но на покупку выше текущей цены, то статуса нет, проверьте. Как ее отслеживать?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #3 : Февраля 07, 2014, 10:42:51 am »

Я не очень понимаю что значит "статус возвращается". Можете показать пример кода, по которому вы посчитали, что "статус не возвращается"?
Записан
Scandinav
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #4 : Февраля 07, 2014, 12:05:13 pm »

//Vistavlenie limitnogo ordera
function tradeBuyLimit(var price)
{
   //Esli parametr zadan zapominaem svechu, na kotoroi bilo vastavlenie ordera
   if(timeOutAfterOrder_RTS != 0)
   {
      var t1 = getSystemTime();
      tradeCandle_RTS = (getCandleByTime(t1)-1);
   }

//Vistavlyaem zayavku
var order = new_object("hash");
order["operation"] = OP_BUY;

   //Esli cena kruglaya, to uvelichit lotnost` parametrom lotsStrongLevel_RTS
   if ((fmod(price, 100) == 0) || (fmod(price, 50) == 0))
      {
      order["quantity"] = lotsCount_RTS + lotsStrongLevel_RTS;
      }
      else
      {
         order["quantity"] = lotsCount_RTS;
      }
      
order["price"] = price;
order["validbefore"] = TILL_CANCELED;
order["confirm_dialog"] = false;
trade_action::transact(order);
}

После выполнения trade_action:: должна срабатывать функция onOrder(), однако она срабаытывает только с случает, если ордер выставляется выше текущей цены, если он выставляется ниже текущей цены, то onOrder() не вызывается, но заявка на графике видна и статус у нее OS_ACTIVE
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #5 : Февраля 10, 2014, 09:40:52 am »

А что происходит в функции onOrder? Если заявка выставляется выше цены, то скорее всего заявка будет удовлетворена тут же по рыночной цене, и поэтому заявка сразу будет иметь статус OS_MATCHED. Может быть вы эту ситуацию как-то пропускаете?
Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #6 : Февраля 10, 2014, 09:53:41 am »

По сути тут нужно смотреть как присваивается price, ведь если он из спреда  - то  : какие If - ы стоят в самой функции onOrder() (ведь там у вас стоит алерт что он сработал)

Хотя как я помню еще в версии 1.16 onATFOrder(id) - использовали эту штуку,...потом были новости, что она не актуальна. Но тем не менее попробуйте ее.
« Последнее редактирование: Февраля 10, 2014, 09:59:11 am от White Noise » Записан
Scandinav
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #7 : Февраля 10, 2014, 11:04:52 am »

А что происходит в функции onOrder? Если заявка выставляется выше цены, то скорее всего заявка будет удовлетворена тут же по рыночной цене, и поэтому заявка сразу будет иметь статус OS_MATCHED. Может быть вы эту ситуацию как-то пропускаете?
Да банально алерт типа Alert("V funkcii OnOrder");, никаких if-ов там нет. Заявка не удовлетворена и висит в статуса Активная, если кликнуть на нее на графике и посмотреть статус. То есть банально не осуществляется обращение к функции OnOrder.

По сути тут нужно смотреть как присваивается price, ведь если он из спреда  - то  : какие If - ы стоят в самой функции onOrder() (ведь там у вас стоит алерт что он сработал)

Хотя как я помню еще в версии 1.16 onATFOrder(id) - использовали эту штуку,...потом были новости, что она не актуальна. Но тем не менее попробуйте ее.

Попробую, позже, отпишусь.
« Последнее редактирование: Февраля 10, 2014, 11:06:23 am от Scandinav » Записан
White Noise
Full Member
***
Сообщений: 164


White Noise

ICQ Messenger - 411196569
Просмотр профиля Email
« Ответ #8 : Февраля 10, 2014, 12:47:31 pm »

Но помните, что она должна стоять вне всяких скобок любой другой функции - и боже упаси calc(); лучше в самый верх ее поставьте.
Записан
Scandinav
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #9 : Февраля 10, 2014, 12:49:36 pm »

Да что вы, конечно она будет стоять отдельно и до init и calc.
Записан
Scandinav
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #10 : Февраля 11, 2014, 04:52:10 pm »

Проверил.
Также при выставлении лимитного ордера на продажу выше текущей цены, ни OnOrder, ни onATFOrder не вызываются. Хотя заявка на графике появляется. Как с этим быть?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #11 : Февраля 13, 2014, 12:19:51 pm »

Я по-прежнему не могу воспроизвести ситуацию с тем, что onOrder не срабатывает. Написал простой код:

Code: [Select]
function onOrder(var trnid) {
  signal::output("It works!");
}

Добавляю этот скрипт на график, выставляю заявку на покупку выше текущей цены. Получаю сообщение в окне вывода. Или как-то не так пытаюсь воспроизвести описываемую ситуацию?
Записан
Scandinav
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #12 : Февраля 13, 2014, 12:42:32 pm »

А выставьте на продажу, а не на покупку. Посмотрим, что у вас получится.
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #13 : Февраля 13, 2014, 01:15:07 pm »

Тоже работает.
Записан
Страниц: [1] Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Снятие лимитного ордера « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!