1) Я прекрасно понимаю, что для нормальных стратегий требуется информация по нескольким предыдущим барам. Но почему во всех примерах идёт цикл по Всем барам?...
...Т.е. если в настройках указано "пересчёт после каждого бара" то при каждом Execute source.Bars.Count будет увеличиваться, и, как правило, на единицу?
Если, пусть тупо-банально, хочу покупать/продавать на пересечении МАшек, то можно без цикла делать
IList<double> sma_fast_arr = Series.SMA(source.ClosePrices, FastPeriod);
double sma_fast = sma_fast_arr[sma_fast_arr.Count - 1];
double sma_slow = ...
и, исходя из этих sma осуществлять покупку/продажу?
2) i+1 -й? Или [barsCount+1]? Или [barsCount]? Или [barsCount-1]? Какой из них в прошлом/будущем? ))
3) Зачем вообще в методе source.Positions.BuyIfGreater есть поле barNum?
4) Как работает конструкция вида? :
IList<double> high = ctx.GetData("Highest", new[] {HighPeriod.ToString()},
delegate { return Series.Highest(source.HighPrices, HighPeriod); });
Система единожды вычисляет Series.Highest и далее юзает их, что повышает скорость оптимизации? При этом каждому такому кешу задаётся уникальное имя с параметрами. По этим имени и параметрам при следующем обращении кеш поймёт, что обращаются к уже посчитанной последовательности, пересчитывать её не надо, и выдаст готовое? Но на следующем тике имя и параметр HighPeriod не изменятся, тогда как закешированные результаты будут устаревшими, поскольку изменились source.HighPrices. Как и по каким признакам система делает выводы, что надо юзать закешированное?
Еще раз спасибо
Отредактировано IDeed (Thu Apr 30 2015 01:43 PM)