for (int x = i; curD2.Day == curD3.Day; x++)
это цикл является вечным, т.к. ни curD2, ни curD3 в цикле не изменяются. В итоге, объекты в список добавляются, пока не кончается память.
Да, тут я перемудрил, вот исправленный работоспособный код индикатора, который выводит в течение дня на 5-и минутках цену закрытия первого бара, но осталась проблема, помогите пож решить:
КОД:
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;
using TSLab.Script.Helpers;
namespace test
{ public class MyStochK : IBar2DoubleHandler, IContextUses
{public IList<double> Execute(ISecurity source)
{ var Hi = source.HighPrices;
var Cl = source.ClosePrices;
var closes = source.ClosePrices;
IList<double> list = new List<double>(closes.Count);
var x = 0;
for (int i = 1;i < closes.Count; i++)
{ var curD = source.Bars[i].Date;
var curD1 = source.Bars[i-1].Date;
if (curD.Day == curD1.Day)
{
x = x+1;
var stochK1 = Cl[i-x];
list.Add(stochK1);
}
else
{
var stochK = Cl[i];
x = 0;
list.Add(stochK);
}
}
return list;
}
public IContext Context { get; set; }
}
}
ПРОБЛЕМА: не выводит значение индикатора на последнем баре в графике вообще (скрин), т.к. заглядывает в будущее на +1, это по той причине что цикл начинается с i=1, если его начать с 0(что нарисует последний бар), тогда "ошибка: индекс выйдет за пределы диапазона" вот в этой строке: var curD1 = source.Bars[i-1].Date; [i-1] использую для сравнивания текущего с предыдущим баром? я же не могу использовать i=-1 для начала цикла...