Transaq
СБО "Transaq" => Подсистема ATF => Topic started by: nxz on Июня 04, 2011, 11:26:52 am
-
Написал собственные функции для выставления заявок на покупку и продажу
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()
// Автостарт
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);
}
Все прекрасно работает!!! :)
Решил оптимизировать код и сделать одну функцию которая бы выставляла заявки и на покупку и на продажу.
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);
}
которая вызывается из того же места программы
// Автостарт
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);, а вторая следующая за ней выполняться НЕ ХОЧЕТ!!! ???
Пробывал менять их местами, те же грабли...
Да же запустил все три функции параллельно
// Автостарт
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); - НЕТ!!! >:(
Что за чудеса?
-
Попробуйте заменить trade_action::transact(order); на не очень заметную и пропиаренную trade_action::transactMultiple(order); и чудеса, возможно, прекратятся
Если не прекратились, то поэксперементируйте с объявлением хэша order. Попробуйте его локально определять, а если нет - попробуйте его объявление с var на статик поменять.
-
Здесь явно просматривается работа пользовательской функциии по принципу "не более одного сигнала на свечку", в данном случае не более одного раза вызова пользовательской функции за свечу. Так ли это? Почему так? Будем ждать ответа разработчиков.
-
Товарищи разработчики! Эта тема была не замечена или что-то неправильно сформулировано в первом посте. Почему пользовательская функция отказывается выполняться многократно. Подскажите где ошибка.
-
Именно потому что если хотите, чтобы функция срабатывала многократно, надо использовать функцию transactMultiple.