Используйте вместо 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);}
}