Цитата(ДобренькийПапаша @ 21.8.2010, 13:43 ) | 1: return value.Last() + (value1.Last() * value2.Last()); |
Да это я просто для примера привёл.
Задача в следующем, есть стратегия которая должна работать в двух режимах, без изменения кода, к примеру сделали сборку и используем в двух режимах, исторического тестирования и работы в реальном времени. к примеру класс стратегии представляет из себя что то типа этого.
| Код | class Strategy { private List<double> mainValue = new List<double>(); private IList<double> GetExternalData(string name, int number) { } public void Execute() { List<double> optionalValue1= GetExternalData(name1, 1); List<double> optionalValue2= GetExternalData(name2, 2); double result = mainValue.Last() + (optionalValue1.Last() * optionalValue2.Last()); } public List<double> MainValue { get { return this.mainValue; } set { this.mainValue = value; } } }
|
а код для его тестирование что то типа этого
| Код | class BackTest { public void Execute(List<double> value, Strategy strategy) { foreach (double tempValue in value) { strategy.MainValue.Add(tempValue); strategy.Execute(); } } }
|
К примеру в BackTest мы передали стратегию и заполненный value скажем от 1 до 10.
| Код | var value = new List<double>(){1,2,3,4,5,6,7,8,9,10};
|
При каждой итерации BackTest берет значение из value и добавляет в strategy.MainValue а потом делает расчёт strategy.Execute(); вопрос вот в чём, если на этой итерации тестирования mainValue равно 5 то как сделать так, что значения optionalValue1 и optionalValue2 получаемые из GetExternalData тоже были бы равны 5. P.S. в репозитории который здесь не представлен данные для всех значений имеются (то есть mainValue, optionalValue1, optionalValue2 заполнены значениями от 1 до 10).
А если проще. Нужно синхронизировать значение mainValue и optionalValue что бы к примеру не получилось так что mainValue.Last() равен 5 а optionalValue.Last() равен 6 или 3.
|