Transaq
СБО "Transaq" => Подсистема ATF => Topic started by: makeev on 09.09.2011, 20:07:50
-
Я заметил, что на одной свечки робот может выставить только 2 заявки разных типов (long и short), а далее хоть и условия соблюдаются, но он их не выставит. Я предполагаю, что это сделано специально, дабы избежать ошибок, но все же возможно ли увеличить число заявок на одной свечки?
-
да вроде бы нет таких ограничений. Все ограничения только у вас в коде
-
Используйте вместо buy, sell и transact buyMultiple, sellMultiple и transactMultiple.
-
Используйте вместо buy, sell и transact buyMultiple, sellMultiple и transactMultiple.
Чтоб проверить написал вот такой скрипт(см. ниже) . Тут по умолчанию стоит один лот, но при исполнении сигнала на рынок выводится более чем один. Получается, что при выставлении сделки не учитывается условие "and portfolio==0 " . Подскажите почему?
static portfolio=0;
var file;
function init(){
file = new_object("file");
file.ropen("portfolio"+getClient() +".txt");
if (file.isopen()) {
portfolio = file.readLn();
file.close();
}}
function onATFTrade(var id)
{
var x = getTrade(id);
var lots=x["quantity"];
if ( x["operation"]==OP_BUY){portfolio=portfolio+x["quantity"];}
if ( x["operation"]==OP_SELL){portfolio=portfolio-x["quantity"];}
file.wopen("portfolio"+getClient() +".txt");
file.seek(0);
file.writeLn(portfolio);
file.close();
}
function calc()
{
line[0]=portfolio;
if (close>high[-1] and portfolio==0 ){trade_action::buyMultiple(1,::lots);}
if (close<low[-1] and portfolio>0 ){trade_action::sellMultiple(portfolio,::lots);}
if (close<low[-1] and portfolio==0 ){trade_action::sellMultiple(1,::lots);}
if (close>high[-1] and portfolio<0 ){trade_action::buyMultiple(abs(portfolio),::lots);}
}
-
Скорее всего происходит примерно следующее:
1. Вызывается calc()
2. Выставляется заявка (заявка A)
3. Происходит какая-то другая рыночная сделка (не эта).
4. По этой сделке опять вызывается calc().
5. Внутри выставляется заявка (заявка Б).
6. Только после этого исполняется заявка А и происходит собственно сделка.
7. Потом уже исполняется заявка Б.
Таким образом между пунктами 3 и 5 еще сделка просто не прошла.
-
Скорее всего происходит примерно следующее:
1. Вызывается calc()
2. Выставляется заявка (заявка A)
3. Происходит какая-то другая рыночная сделка (не эта).
4. По этой сделке опять вызывается calc().
5. Внутри выставляется заявка (заявка Б).
6. Только после этого исполняется заявка А и происходит собственно сделка.
7. Потом уже исполняется заявка Б.
Таким образом между пунктами 3 и 5 еще сделка просто не прошла.
"2. Выставляется заявка (заявка A)" - я думал тут меня функция onATFTrade(var id) спасет. у меня же нет подтверждения исполнения заявки.
-
Да, функция onATFTrade вызывается сразу как совершается сделка, но дело в том, что прежде чем проихойдет ваша сделка, может пройти какие-то время (пусть доли секунды, но в это время может вызываться calc). Для отслеживания выставления заявки можно использовать onATFOrder.