Добрый день подскажите пожалуйста, компиляция проходит успешно, но в ТСлабе получаю ошибку:
Click to reveal..
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.ThrowHelper.ThrowArgumentOutOfRangeException()
в System.Collections.Generic.List`1.get_Item(Int32 index)
в ДФР.DFR.Execute(ISecurity source) в c:\Users\НР\Documents\SharpDevelop Projects\DFR\DFR.cs:строка 24
в TSLab.User.Script.<>c__DisplayClass3.<Execute>b__2() в c:\Users\НР\AppData\Local\TSLab\TSLab\temp\code15.cs:строка 51
в TSLab.DataSource.ObjectsCacheBase`3.Get(TKey name, CacheObjectMaker`1 maker)
в TSLab.ScriptEngine.BaseTemplateContext.GetData(String handlerName, String[] parameters, CacheObjectMaker`1 maker)
в TSLab.User.Script.Execute(IContext context, ISecurity var0) в c:\Users\НР\AppData\Local\TSLab\TSLab\temp\code15.cs:строка 48



Код, того, что компилирую:

Click to reveal..
Code:
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;

namespace ДФР
{
	public class DFR : IBar2DoubleHandler, IContextUses
	{
		[HandlerParameter]
		public int Period { get; set; }
		
		public IList<double> Execute(ISecurity source)
		{
		    var high = Context.GetData("Highest", new[] { Period.ToString() },
		                               () => Series.Highest(source.HighPrices, Period));
		    var low = Context.GetData("Lowest", new[] { Period.ToString() },
		                               () => Series.Lowest(source.LowPrices, Period));
		    var closes = source.ClosePrices;
		    IList<double> list = new List<double>(closes.Count);

		    for (int i = 0; i < closes.Count; i++)
		    { var K = System.Math.Log(closes[i]/closes[i-1]);
		        list.Add(K);
		    }
        
		    return list;
		}
		
		public IContext Context { get; set; }
	}}


При этом нет ошибок, если все то же самое сделать через блок формула :



Я так понимаю, что ошибка указывает на проблему [i-1], но как тогда ее учитывать в коде C#?
Если счетчик начинать с I=1, тогда ошибку выдает другую, а график рисует со смещением относительно построения "Формула"(синий - API, красный формула), но смещение, то мне не нужно:



Помогите пожалуйста разобраться.





Attachments
ДФР.jpg (1115 downloads)
ДФР тот и другой + ошибка.jpg (978 downloads)



Отредактировано 777 (Sat Jul 10 2010 12:05 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.