Алгоритм работать не будет. Я уже вам писал, что нельзя смешивать ручное управление заявками и позиции. Либо то, либо другое.
sec.Positions.LastPositionActive - это использовать нельзя.
Nektodron, вернёмся к нашим баранам. Дело не в sec.Positions.LastPositionActive, встроил предложенный Вами метод определения значения/цены открытой позиции и кол-ва контрактов (пробовал подставлять значения lotsBalance и curQty(вариант ниже)), но всё-равно после открытия позиции, на каждом баре вместо ордера на переворот (или частичное закрытие) в ТСлаб проходит сообщение: 11:15:30.00:Скрипт: RT2. Не могу создать заявку с нулевым количеством!
Прошу попробовать, как это работает:
...
private double CalcCurrentPrice(ISecurityRt rtSec, out double curQty, out double curPrice)
{
curQty = 0;
curPrice = 0;
if (rtSec != null)
{
var orders = rtSec.Orders.OrderBy(ord => ord.Date);
foreach (var order in orders)
{
if (order.IsExecuted)
{
int bs = (order.IsBuy ? 1 : -1);
double qty = order.Quantity * bs;
double price = order.Price;
double newQty = curQty + qty;
bool isGrowPos = Math.Abs(newQty) > Math.Abs(curQty);
if (isGrowPos)
{
curPrice = newQty == 0 ? 0 : (curQty*curPrice + qty*price)/newQty;
}
curQty = newQty;
}
}
}
curPrice = curQty == 0 ? 0 : curPrice;
return curPrice;
}
...
CalcCurrentPrice(secRt, out curQty, out curPrice); // и вызываем метод
...
Какие ещё есть идеи?
P. S. Ещё момент, сначала выставляются новые ордера, потом отменяются старые.