По результатам общения с тех. поддержкой отвечаю на свой первый вопрос.

Есть два метода BuyIfGreater, которые отличаются числом передаваемых аргументов. Один из них позволяет задать slippage - проскальзывание.

Quote:
void TSLab.Script.IPositionsList.BuyIfGreater (
int barNum,
double shares,
double price,
double slippage,
string signalName
)


Если использовать метод без указания проскальзывания slippage, то TSLab берет проскальзывание из настроек Агента.

В моем примере в настройках агента стояло проскальзывание 3000, поэтому и вышло 78390+3000=81390, что оказалось за пределом лимита в 81290.

sec.FinInfo.MaxPrice - позволяет получить верхний действующий лимит цены. Аналогично определяется нижний.

Тогда код будет примерно такой:
Code:
orderEntry = symbol.ClosePrices[i] + atr; 
slippage = sec.FinInfo.MaxPrice - orderEntry;
symbol.Positions.BuyIfGreater(i + 1, 1, orderEntry, slippage, "Открытие Лонг");


и цена не будет уходить за лимит.