Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Сентября 13, 2024, 09:32:34 pm
Начало Помощь Поиск Войти Регистрация
Новости:

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Функции пользователя « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Функции пользователя  (Прочитано 4491 раз)
nxz
Full Member
***
Сообщений: 241


Просмотр профиля Email
« : Июня 04, 2011, 11:26:52 am »

Написал собственные функции для выставления заявок на покупку и продажу
Code: [Select]
function fBuy (var kol, var cena) {
signal::notify("Заявка на покупку " + kol + " контракта по " + cena);
order["tp_quantity"] = kol;
order["operation"] = OP_BUY;
order["tp_level"] = 1;
order["tp_activationprice"] = cena;
trade_action::transact(order);
}
function fSell (var kol, var cena) {
signal::notify("Заявка на продажу " + kol + " контракта по " + cena);
order["tp_quantity"] = kol;
order["operation"] = OP_SELL;
order["tp_level"] = 1;
order["tp_activationprice"] = cena;
trade_action::transact(order);
}
которые вызываются из тела функции calc()
Code: [Select]
// Автостарт
if (st != 2 and atz == 1 and knl == 1 and isTradingAllowed() == true) {
signal::notify("АВТОЗАПУСК!");
stz = 0; lotz = 0; op = 0; pr = 0; // Обнуляем исходные данные
fBuy (lot, lo);
fSell (lot, hi);
}
Все прекрасно работает!!! :)

Решил оптимизировать код и сделать одну функцию которая бы выставляла заявки и на покупку и на продажу.
Code: [Select]
function fMyTrade (var oper, var kol, var cena) {
var baysell;
if (oper == 1) {baysell = "покупку ";}
else {baysell = "продажу ";}
signal::notify("Заявка на " + baysell + kol + " контракта по " + cena);
order["tp_quantity"] = kol;
order["operation"] = oper;
order["tp_level"] = 1;
order["tp_activationprice"] = cena;
trade_action::transact(order);
}
которая вызывается из того же места программы
Code: [Select]
// Автостарт
if (st != 2 and atz == 1 and knl == 1 and isTradingAllowed() == true) {
signal::notify("АВТОЗАПУСК!");
stz = 0; lotz = 0; op = 0; pr = 0; // Обнуляем исходные данные
fMyTrade (OP_BUY, lot, lo);
fMyTrade (OP_SELL, lot, hi);
}
И возникли чудеса :o
Выполняется только одна, первая функция fMyTrade (OP_BUY, lot, lo);, а вторая следующая за ней выполняться НЕ ХОЧЕТ!!! ???
Пробывал менять их местами, те же грабли...

Да же запустил все три функции параллельно
Code: [Select]
// Автостарт
if (st != 2 and atz == 1 and knl == 1 and isTradingAllowed() == true) {
signal::notify("АВТОЗАПУСК!");
stz = 0; lotz = 0; op = 0; pr = 0; // Обнуляем исходные данные
fBuy (lot, lo);
fSell (lot, hi);
fMyTrade (OP_BUY, lot, lo);
fMyTrade (OP_SELL, lot, hi);
}
Функции fBuy (lot, lo); и fSell (lot, hi); и fMyTrade (OP_BUY, lot, lo); - выполняются, последняя fMyTrade (OP_SELL, lot, hi); - НЕТ!!! >:(

Что за чудеса?
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #1 : Июня 04, 2011, 04:00:45 pm »

Попробуйте заменить trade_action::transact(order); на не очень заметную и пропиаренную trade_action::transactMultiple(order); и чудеса, возможно, прекратятся
Если не прекратились, то поэксперементируйте с объявлением хэша order. Попробуйте его локально определять, а если нет - попробуйте его объявление с var на статик поменять.
« Последнее редактирование: Июня 04, 2011, 04:03:25 pm от ddd323 » Записан
nxz
Full Member
***
Сообщений: 241


Просмотр профиля Email
« Ответ #2 : Июня 04, 2011, 04:31:35 pm »

Здесь явно просматривается работа пользовательской функциии по принципу "не более одного сигнала на свечку", в данном случае не более одного раза вызова пользовательской функции за свечу. Так ли это? Почему так? Будем ждать ответа разработчиков.
Записан
nxz
Full Member
***
Сообщений: 241


Просмотр профиля Email
« Ответ #3 : Июня 08, 2011, 07:46:50 am »

Товарищи разработчики! Эта тема была не замечена или что-то неправильно сформулировано в первом посте. Почему пользовательская функция отказывается выполняться многократно. Подскажите где ошибка.
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #4 : Июня 08, 2011, 09:39:52 am »

Именно потому что если хотите, чтобы функция срабатывала многократно, надо использовать функцию transactMultiple.
Записан
Страниц: [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!