Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм тестирования на исторических данных. 
:(
    Опции темы
compaq
Дата 21.8.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Есть класс
Код

  class Strategy
    {
        private List<double> value;
 
        public Strategy(IList<double> value)
        {
            this.value = value;
        }
 
        private IList<double> GetExternalData(string name, int number)
        {
            
        }
        
        public int Execute()
        {
             List<double> value1 = GetExternalData(name1, 1);
             List<double> value2 = GetExternalData(name2, 2);
             return value.Last() + (value1.Last() * value2.Last());
        }
    }

в нём есть два метода, метод Execute() который вызывается когда в value добавлено новое значение и метод GetExternalData() который запрашивает у репозитория другие данные, если они понадобятся в расчётах. При работе в "боевом режиме" (то есть в “реальном времени”) все просто, добавил в value новое значение и вызвал Execute(). А как быть если нужно предварительно эту стратегию оттестировать на исторических данных, то есть значения value уже известны к примеру за 2009 год. И я хочу посмотреть как поведет себя стратегия на этих данных.

Это сообщение отредактировал(а) compaq - 21.8.2010, 11:53
PM MAIL   Вверх
ДобренькийПапаша
Дата 21.8.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Поправьте меня, если я не прав, но по-моему, то, что формальный аргумент у вас в конструктуре имеет тип интерфейса IList, не гарантирует того, что вы не получите исключение времени выполнения, так как реализация типом интерфейса IList не гарантирует его приведения к типу List<T>.

А насчёт стратегий я вообще ничего не понял:
Код

return value.Last() + (value1.Last() * value2.Last());

Этот код для меня просто сакраментальный...

Ваш класс получает List<T> каких-то значений? Если дальше вам с ними надо что-то делать, делайте в каком-нибудь методе... Не совсем понятно, что вы имели ввиду!


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
compaq
Дата 23.8.2010, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Цитата(ДобренькийПапаша @  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; }
        }
    }


а код для его тестирование что то типа этого  smile 
Код

    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).

А если проще.  smile 
Нужно синхронизировать значение mainValue и optionalValue что бы к примеру не получилось так что mainValue.Last() равен 5 а optionalValue.Last() равен 6 или 3.



PM MAIL   Вверх
ДобренькийПапаша
Дата 23.8.2010, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Цитата(compaq @  23.8.2010,  10:11 Найти цитируемый пост)
как сделать так, что значения optionalValue1 и optionalValue2 получаемые из GetExternalData тоже были бы равны 5.


На каждой же итерации пробегайте в цикле по массиву чисел из репозитория, находите нужное значение через сравнение и обменивайте его местами с числом, стоящим на i-том месте (на i-той итерации).




--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.