Transaq

СБО "Transaq" => Подсистема ATF => Topic started by: makeev on 09.09.2011, 20:07:50

Title: Потолок количества заявок
Post by: makeev on 09.09.2011, 20:07:50
Я заметил, что на одной свечки робот может выставить только 2 заявки разных типов (long и short), а далее хоть и условия соблюдаются, но он их не выставит. Я предполагаю, что это сделано специально, дабы избежать ошибок, но все же возможно ли увеличить число заявок на одной свечки? 
Title: Re: Потолок количества заявок
Post by: daytrader on 12.09.2011, 07:54:58
да вроде бы нет таких ограничений. Все ограничения только у вас в коде
Title: Re: Потолок количества заявок
Post by: Heller on 12.09.2011, 10:09:21
Используйте вместо buy, sell и transact buyMultiple, sellMultiple и transactMultiple.
Title: Re: Потолок количества заявок
Post by: makeev on 17.09.2011, 06:26:32
Используйте вместо 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);}




}


 
Title: Re: Потолок количества заявок
Post by: Heller on 19.09.2011, 10:13:56
Скорее всего происходит примерно следующее:

1. Вызывается calc()
2. Выставляется заявка (заявка A)
3. Происходит какая-то другая рыночная сделка (не эта).
4. По этой сделке опять вызывается calc().
5. Внутри выставляется заявка (заявка Б).
6. Только после этого исполняется заявка А и происходит собственно сделка.
7. Потом уже исполняется заявка Б.

Таким образом между пунктами 3 и 5 еще сделка просто не прошла.
Title: Re: Потолок количества заявок
Post by: makeev on 19.09.2011, 11:19:35
Скорее всего происходит примерно следующее:

1. Вызывается calc()
2. Выставляется заявка (заявка A)
3. Происходит какая-то другая рыночная сделка (не эта).
4. По этой сделке опять вызывается calc().
5. Внутри выставляется заявка (заявка Б).
6. Только после этого исполняется заявка А и происходит собственно сделка.
7. Потом уже исполняется заявка Б.

Таким образом между пунктами 3 и 5 еще сделка просто не прошла.


"2. Выставляется заявка (заявка A)"   - я думал тут меня функция onATFTrade(var id) спасет.  у меня же нет подтверждения исполнения заявки.
Title: Re: Потолок количества заявок
Post by: Heller on 20.09.2011, 14:37:42
Да, функция onATFTrade вызывается сразу как совершается сделка, но дело в том, что прежде чем проихойдет ваша сделка, может пройти какие-то время (пусть доли секунды, но в это время может вызываться calc). Для отслеживания выставления заявки можно использовать onATFOrder.