Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
24.01.2025, 21:00:18
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: trade_action::cancelOrder(order) « предыдущая тема следующая тема »
Страниц: [1] 2 3 Печать
Автор Тема: trade_action::cancelOrder(order)  (Прочитано 21391 раз)
daytrader
Full Member
***
Сообщений: 174


Просмотр профиля Email
« : 11.05.2011, 16:04:26 »

function onATFOrder(var id)
этой функцией я получаю  ID заявки выставленную ATF

могу ли я по этому ID ее снять и как?
версия ATF 1.8

PS
пробую через trade_action::cancelOrder(id)
но то ли сама функция не работает на 1.8, то ли не могу ее корректно передать в calc()

nxz, здесь order - это структура, а не идентификатор.
Quote
В качестве параметра указывается либо идентификатор заявки, либо сам объект заявки, при этом заявка сниманиется по номеру, и лишь в случае, если номер заявки не указан, используется идентификатор

как здесь структуру тогда делать? какая она?
Из учебника как-тоне очень понял что указывать... точнее понятно что можно ID но снимается по номеру. Но если номера нет то по ID - замкнутый круг прям ...
« Последнее редактирование: 11.05.2011, 16:41:59 от daytrader » Записан
daytrader
Full Member
***
Сообщений: 174


Просмотр профиля Email
« Ответ #1 : 12.05.2011, 18:05:53 »

так... кто-нибудь ну помогите что ли :) Целый день молчать такого еще не было :)
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #2 : 13.05.2011, 12:24:26 »

Судя по тому, что вы пишете, должно работать. Приведите код целиком - будет проще понять что происходит.
Записан
daytrader
Full Member
***
Сообщений: 174


Просмотр профиля Email
« Ответ #3 : 13.05.2011, 13:48:57 »

делаю вот что:
Quote
function onATFOrder(var id) {
var order = getOrder(id);
}

получили ID заявки

но в function calc() я не могу ее передать видимо, ибо когда пишу в ней:
Quote
if (id !=0) {
trade_action::cancelOrder(id) }

ничего не происходит - заявка на месте.

Когда же я убрал условие if - ATF ругается что переменная id не задана.

Я так понимаю что я ее задаю в первой функции но как передать ее во вторую?

в общем запутался на этом месте.
« Последнее редактирование: 13.05.2011, 13:52:44 от daytrader » Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #4 : 13.05.2011, 13:56:54 »

сохраните ид в глобальную переменную (объявленную как статик перед всеми функциями) и ее уже используйте при снятии
Записан
daytrader
Full Member
***
Сообщений: 174


Просмотр профиля Email
« Ответ #5 : 13.05.2011, 14:31:27 »

т.е. в начале перед вызовом функций я пишу:
var id;

а дальше пишу:
function onATFOrder(var id) {
...
}

или

function onATFOrder(id) {
...
}

я так понимаю что при вызове этой функции мы как раз и присваиваем id.
верно?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #6 : 13.05.2011, 14:55:44 »

Code: [Select]
static trnid = 0;

function onATFOrder(var id)
{
  trnid = id;
}

function calc()
{
  if (trnid) {
    trade_action::cancelOrder(trnid);
    trnid = 0;
  }
}

Например так.
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #7 : 13.05.2011, 20:58:03 »

Heller, как работает эта функция в варианте передачи ей хэша - обязательно ли передавать ей полностью правильно заполненный хэш? Дело в том, что организовывать сохранение полных хэшей в файле, по сравнению с сохранением одного id существенно более геморройно с точки зрения написания и жрет больше ресурсов. Можно ли как-нибудь обхитрить ATF и дать ему хэш, в котором заполнено только одно поле "orderno"?
Тогда для активных заявок можно было бы сохранять только биржевой номер заявки...
« Последнее редактирование: 15.05.2011, 12:21:05 от ddd323 » Записан
daytrader
Full Member
***
Сообщений: 174


Просмотр профиля Email
« Ответ #8 : 15.05.2011, 09:44:27 »

Heller спасибо!
я конечно наглею наверное - но с примерами намного удобнее :)

PS
для условных (стопов) это будет работать?

PPS
еще вопрос:
if (trnid) или все таки if (trnid !=0)
« Последнее редактирование: 15.05.2011, 14:38:16 от daytrader » Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #9 : 16.05.2011, 11:33:17 »

На самом деле if(trnid) и if(trnid!=0) ничем не отличаются. Числа внутри if приводятся к логическому значению, и 0 - это "ложь", остальное - истина.  Хотя конечно if(trnid!=0) - это более явно. У меня просто привычка.

Про объект заявки - да, на самом деле он просто проверяет в хеше в первую очередь наличие поля "orderno", а потом уже если его не находит, то "trdid". Вот собственно и вся логина.

Для стопов и условных это будет работать.
Записан
daytrader
Full Member
***
Сообщений: 174


Просмотр профиля Email
« Ответ #10 : 16.05.2011, 11:58:17 »

Спасибо! тестирую :)
а по поводу != это я просто так привык, но буду знать... обновлю код немного.
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #11 : 19.05.2011, 09:25:21 »

Уважаемые разработчки, при снятии  из скрипта условной заявки по trnid должен вызываться onATFOrder на соответствующее изменение статуса с OS_WAITING на OS_DISABLED?
По логике вроде должен, но 2жды проверял (подавал на свече в 10.00 в onNewCandle соответствующий запрос) onATFOrder по результатам снятия заявки не вызывается. Но прикол в том, что если снимать ее (руками, а не из скрипта!) в 23.52, когда сессия уже закончена onATFOrder! (а не onClientOrder)  вызывается...
(Наблюдения с текущего финамовского АТФ 1.8)
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #12 : 20.05.2011, 11:11:47 »

Сегодня еще раз проверил. Думал прежнее невызывание onATFOrder возможно из-за того, что заявку ставил на основном сервере, а снимал на резерврном. Сегодня все проверил строго на одном - onATForder не вызывается. Так что очень бы  хотелось бы получить ответы на вопросы изипредыдущего поста, включая комментарий к факту вызова onATForder а не onClientorder при действиях руками
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #13 : 20.05.2011, 11:53:09 »

Логика тут такая: при выставлении заявки из скрипта ATF, ее идентификатор запоминается в списке заявок этого скрипта (!). Когда происходят какие-то изменения в состоянии заявки, если ее идентификатор находится в этом списке, то вызывается функция onATFOrder(), в противном случае - onClientOrder().

Таким образом не важно как снимается заявка - важно лишь то, как она была выставлена. Причем список связанных со скриптом заявок - это именно список, который запоминается внутри индикатора. При любых действиях, которые приводят к перерасчеты индикатора, он теряется, так как скрипт фактически начинает работать заново.
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #14 : 20.05.2011, 13:38:21 »

ну то есть при переходе через ночь или любой другой разрыв с сервером onATForder по старым заявкам вызываться не будет, но onClientOrder будет (т.к. он вызывается по всем заявкам этого клиента по этой (где скрипт) бумаге если   их нет в списке "памяти" скрипта). Правильно?

Heller, эта история будет улучшаться с учетом планов делать сохраняемый и восстанавливаемый кеш переменных скрипта, чтобы избавит нас от файловых операций по сохранению статуса переменных?
« Последнее редактирование: 20.05.2011, 19:01:42 от ddd323 » Записан
Страниц: [1] 2 3 Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: trade_action::cancelOrder(order) « предыдущая тема следующая тема »
Перейти в:  


Войти

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