Спасибо за ответ.
Чуть переделал скрипт. Он покупает 1 лот, через три бара увеличивает размер позиции до 2 еще через три бара закрывает позицию.

Вижу следующее:
- после покупки 1 лота на всех барах размер позиции равен 1
- после увеличения размера позиции на барах до открытия позиции выводит 0, 1 там где был 1 лот и 2 там где лотов 2. То есть все соответствует реальности!!!!
-после закрытия позиции на барах до открытия позиции выводит 0, 1 там где был 1 лот и 2 там где лотов 2 и 2 после закрытия позиции. Врет опять.

Странно что GetShares показывает не корректные данные на барах когда позиции не существовало. Еще более странно, что после изменения размера позиции результаты на барах до открытия позиции становятся верными. Мне кажется это выглядит как баг. Ну или в этом есть какой-то смысл от меня скрытый. В любом случае теперь понятно как с этим работать.

Заменил pos.GetShares на такую вот простенькую функцию:
public double RealGetShares(IPosition pos, int bar)
{
if (!pos.IsActiveForBar(bar))
return 0;

return pos.GetShares(bar);
}

судя по моим простеньким тестам подправляет работу GetShares и возвращает корректный размер позиции по номеру бара, что соответствует описанию функции GetShares (мне кажется она все таки забагованная и подобного условия не хватает в самом методе).

Vil, Nektodron спасибо за помощь вы очень помогли.

P.S. Очень раздражал вот этот ответ: "Ответ тот же. TSLab ничего не хранит между пересчетами, позиции должны насчитываться с нуля." Как видно, с нуля ничего насчитывать не надо.







Отредактировано OldMo (Tue Sep 03 2019 02:07 PM)