Transaq

СБО "Transaq" => Подсистема ATF => Topic started by: nxz on Июня 04, 2011, 11:26:52 am

Title: Функции пользователя
Post by: nxz on Июня 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); - НЕТ!!! >:(

Что за чудеса?
Title: Re: Функции пользователя
Post by: ddd323 on Июня 04, 2011, 04:00:45 pm
Попробуйте заменить trade_action::transact(order); на не очень заметную и пропиаренную trade_action::transactMultiple(order); и чудеса, возможно, прекратятся
Если не прекратились, то поэксперементируйте с объявлением хэша order. Попробуйте его локально определять, а если нет - попробуйте его объявление с var на статик поменять.
Title: Re: Функции пользователя
Post by: nxz on Июня 04, 2011, 04:31:35 pm
Здесь явно просматривается работа пользовательской функциии по принципу "не более одного сигнала на свечку", в данном случае не более одного раза вызова пользовательской функции за свечу. Так ли это? Почему так? Будем ждать ответа разработчиков.
Title: Re: Функции пользователя
Post by: nxz on Июня 08, 2011, 07:46:50 am
Товарищи разработчики! Эта тема была не замечена или что-то неправильно сформулировано в первом посте. Почему пользовательская функция отказывается выполняться многократно. Подскажите где ошибка.
Title: Re: Функции пользователя
Post by: Heller on Июня 08, 2011, 09:39:52 am
Именно потому что если хотите, чтобы функция срабатывала многократно, надо использовать функцию transactMultiple.