По результатам общения с тех. поддержкой
отвечаю на свой первый вопрос.
Есть два метода BuyIfGreater, которые отличаются числом передаваемых аргументов. Один из них позволяет задать slippage - проскальзывание.
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 - позволяет получить верхний действующий лимит цены. Аналогично определяется нижний.
Тогда код будет примерно такой:
orderEntry = symbol.ClosePrices[i] + atr;
slippage = sec.FinInfo.MaxPrice - orderEntry;
symbol.Positions.BuyIfGreater(i + 1, 1, orderEntry, slippage, "Открытие Лонг");
и цена не будет уходить за лимит.