Используется один инструмент, на реальном рынке.

Было ...
ISecurityRt secRt = sec as ISecurityRt;
if (!secRt.Positions.IsRealtime) return;

Поменял на

/// Торговля.
if (!sec.Positions.IsRealtime) return;
{

int i = sec.Bars.Count - 1;
if (i < 0) return;
IList<IQueueData> buyQueue = sec.GetBuyQueue(i);//получаем биржевой стакан
IList<IQueueData> sellQueue = sec.GetSellQueue(i);//получаем биржевой стакан

ISecurityRt secRt = sec as ISecurityRt;
if (secRt == null) return;
...
}
Перестало выдавать ошибку. В чем причина не понял...

Но ошибка про индекс осталась

08:57:52.29 100 Скрипт: 'Option01' System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.ThrowHelper.ThrowArgumentOutOfRangeException()
в System.Collections.Generic.List`1.get_Item(Int32 index)
в TSLab.Samples.Class_Rt.Execute(IContext ctx, ISecurity sec)
в TSLab.User.Script.Execute(IContext context, ISecurity sec)

Индекс используется только один раз вверху по тексту...
Возможно что-то не правильно здесь

//пробегаемся по всем исполненным лимитникам-нам
foreach (IOrder order in secRt.Orders)
if (order.OrderType == TSLab.DataSource.OrderType.Limit)
{
//ордер не исполнился ожидаем исполнения
if (!order.IsExecuted) return;
}

хотя закоментировав строку ошибка осталась...

Ошибка нашлась
double baseActive = Math.Round((buyQueue[0].Price + sellQueue[0].Price) / 2);

при использовании buyQueue[0].Price или sellQueue[0].Price возникает ошибка с индексом

Как ее решить?


Отредактировано WinEasily (Thu Jul 26 2012 10:45 AM)