Расхождения в результатах тестирования


Расхождения в результатах тестирования
Atom
31.01.2012


S# 4.0.17
Сделки реальные, стаканы - генерируются.

Стратегия осуществляет вход лимитными заявками. Проблема в том что если запускать тестирование с одинаковыми параметрами несколько раз, результаты расходятся в некоторых местах. Если копнуть глубже - при одном прогоне стратегия может зайти там, где не зашла в другом прогоне, хотя заявку выставляла точно на тот же объем и по той же цене.

Если посмотреть все сделки, цена ходила ЗА данную лимитную заявку (но в пределах одной секунды), то есть в реальности заявка хотя бы частично исполнилась бы.

Вопрос: как работает механизм срабатывания лимитных заявок при тестировании? Используется ли для этого стакан, если да то зачем?



Спасибо:


< 1 2 
Mikhail Sukhov

Фотография
Дата: 02.02.2012
Ответить


Supervisor Перейти
Нашел причину данной ошибки и проблемы в целом.
Я использовал единый static Storage на всю программу (не только для тестирования).
Создание отдельного экземпляра для тестирования по какой-то причине решило эту проблему.


Не понял как было и на что исправили.
Спасибо:

Supervisor

Фотография
Дата: 03.02.2012
Ответить


Было так:
Код

public static class Core
{
   ...
   public static TradingStorage Storage { get; private set; }

   static Core()
   {
      ...

      // Это хранилище использовал не только для тестирования, но параллельно и для сохранения поступающих свечей например
      Storage = new TradingStorage(new FileStorage("History")) 
      { 
         BasePath = "History" 
      };
   }
}


public static class Emulator
{
   public static void StartEmulation()
   {
      ...
      Trader = new EmulationTrader(new[] { Security }, new[] { Portfolio })
      {
         ...
         Storage = Core.Storage,
      };
   }
}


Исправил на так:
Код

public static class Emulator
{
   public static void StartEmulation()
   {
      ...
      Trader = new EmulationTrader(new[] { Security }, new[] { Portfolio })
      {
         ...
         Storage = new TradingStorage(new InMemoryStorage()) { BasePath = Core.Storage.BasePath },
      };
   }
}


Сам честно говоря не понимаю причину ошибки, почему нельзя было ссылаться на одно хранилище.
Спасибо:

zorran

Фотография
Дата: 15.02.2012
Ответить


В демо-приложении SampleHistoryTesting расхождения, разные значения получаются без изменения параметров и кода.

Используются данные из RIU9@RTS.zip.

версия stock# - 4.019
Спасибо:

Mikhail Sukhov

Фотография
Дата: 15.02.2012
Ответить


zorran Перейти
В демо-приложении SampleHistoryTesting расхождения, разные значения получаются без изменения параметров и кода.


Ничего не понял.
Спасибо:

zorran

Фотография
Дата: 15.02.2012
Ответить


Нажимаем кнопку "Старт" и после окончания работы программы, получаем одно значение net profit.
Нажимаем еще раз кнопку "Старт", и получаем уже другое значение net profit.
Такого не должно быть, если исторические данные идентичны.
Спасибо:

Mikhail Sukhov

Фотография
Дата: 15.02.2012
Ответить


zorran Перейти
Нажимаем кнопку "Старт" и после окончания работы программы, получаем одно значение net profit.
Нажимаем еще раз кнопку "Старт", и получаем уже другое значение net profit.
Такого не должно быть, если исторические данные идентичны.


Такого не должно быть, если чисто на исторических данных. Пример использует не только исторические данные.
Спасибо:

zorran

Фотография
Дата: 16.02.2012
Ответить


Вы хотите сказать, что пример из архива StockSharp_4.0.19.zip (уже скомпилированный) что-то еще использует?
Странно, я по коду посмотрел - там пересечение SMA вроде только.
Спасибо:

Supervisor

Фотография
Дата: 16.02.2012
Ответить


zorran Перейти
Вы хотите сказать, что пример из архива StockSharp_4.0.19.zip (уже скомпилированный) что-то еще использует?
Странно, я по коду посмотрел - там пересечение SMA вроде только.

Насколько помню, там используется случайная генерация стаканов. Отсюда и расхождения
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy