← Назад

Как тестить сразу несколько стаканов?

Чтобы получить лучшие офферы на начало каждой секунды из истории шести стаканов - нужно создать шесть тестовых инструментов, создать для каждого EmulationTrader и с интервалом в секунду запрашивать GetMarketDepth(Security).BestAsk для каждого стакана.. или есть способ лучше(быстрее)?

Комментарии (14)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Mikhail Sukhov
Mikhail Sukhov

XMbIPb: Чтобы получить лучшие офферы на начало каждой секунды из истории шести стаканов - нужно создать шесть тестовых инструментов, создать для каждого EmulationTrader и с интервалом в секунду запрашивать GetMarketDepth(Security).BestAsk для каждого стакана.. или есть способ лучше(быстрее)?

По быстрее в каком плане? Судя по предложенному способу 5 EmulationTrader лишних.

XMbIPb
XMbIPb Автор

Mikhail Sukhov: По быстрее в каком плане? Чтоб не ждать секунду между запросами.. как ещё можно получить состояние всех шести стаканов на определённый момент времени(например на 10:00:01,02 и т.д.)? Mikhail Sukhov: 5 EmulationTrader лишних. Т.е. достаточно создать эмулятор только для одного инструмента или ему можно как-то передать сразу несколько бумаг?

Mikhail Sukhov
Mikhail Sukhov

XMbIPb: Т.е. достаточно создать эмулятор только для одного инструмента или ему можно как-то передать сразу несколько бумаг?

Эмулятор не создается для бумаги. Эмулятор создается сам по себе. Бумаги заполняются в него.

Justforg
Justforg

Пытаюсь сделать примерно то же самое; но несмотря на добавление нескольких RandomWalkTradeGenerator (по одному на каждую бумагу) генерируются стаканы только для первой добавленной (хотя события добавления бумаг от trader'а генерируются для всех). Это баг или я что-то делаю не так?

Mikhail Sukhov
Mikhail Sukhov

Justforg: Пытаюсь сделать примерно то же самое; но несмотря на добавление нескольких RandomWalkTradeGenerator (по одному на каждую бумагу) генерируются стаканы только для первой добавленной (хотя события добавления бумаг от trader'а генерируются для всех). Это баг или я что-то делаю не так?

Можете привести мини код инициализации и старта тестера?

Justforg
Justforg

Mikhail Sukhov: Можете привести мини код инициализации и старта тестера?

Используемый код (на IronPython):


gen_securities = [
  Security(Id="TST1", Code="TST1", Name="whatevername", MinStepSize=5,
    MinStepPrice=2, Decimals=0, Exchange=Exchange.Test),
  Security(Id="TST2", Code="TST2", Name="whatevername2", MinStepSize=5,
    MinStepPrice=2, Decimals=0, Exchange=Exchange.Test),
  ]
logManager = StrategyLogManager()
logManager.Listeners.Add(FileLogListener("log.txt"))
portfolio = Portfolio(Name="twst account", BeginAmount=Currency(Value=1000000))
trader = EmulationTrader(List[Security](gen_securities),
  List[Portfolio]([portfolio]),
  MarketTimeChangedInterval=TimeSpan.FromMinutes(50))
for security in gen_securities:
    security.LastTrade.Price = 155000
    trader.TradeGenerators[security] = RandomWalkTradeGenerator(security)
    trader.DepthGenerators[security] = TrendMarketDepthGenerator(security)

def new_securities(securities):
    for security in securities:
        print "security", security
        trader.RegisterQuotes(security)

def quotes_changed(depths):
    for depth in depths:
        print "Quotes: [{2}] {0} / {1}".format(depth.BestAsk.ToString(), depth.BestBid.ToString(), depth.Security)

def connect_done():
    print "connected"
    trader.NewSecurities += new_securities
    trader.QuotesChanged += quotes_changed
    trader.StartExport()
    trader.Start(DateTime(2009, 6, 1), DateTime(2009, 6, 2))

trader.Connected += connect_done
trader.Connect()

sys.stdin.readline()

Mikhail Sukhov
Mikhail Sukhov

Багу нашли, в 3.2.11 поправим. Нужно было сразу сказать, что это эмуляция и бага специфична только для эмуляции. У топик стартера проблема с историей, которая не подтвердилась.

Justforg
Justforg

Mikhail Sukhov: Багу нашли, в 3.2.11 поправим. Нужно было сразу сказать, что это эмуляция и бага специфична только для эмуляции. У топик стартера проблема с историей, которая не подтвердилась.

Я так понимаю речь про 3.2.12?

В любом случае, в ревизии 9575 (с codeplex) бага и правда исправлена; только вот сходу тестирование не работает (в том числе SampleEmulationTesting) — security.LastTrade в равняется null и поэтому 'security.LastTrade.Price = …' падает с Exception (конечно же, если вставить туда новый Trade() то работает). И мета-вопрос по этому: такую информацию по проблемам в нерелизных версиях куда по-хорошему постить?

Alexander
Alexander

Justforg:

Mikhail Sukhov: Багу нашли, в 3.2.11 поправим. Нужно было сразу сказать, что это эмуляция и бага специфична только для эмуляции. У топик стартера проблема с историей, которая не подтвердилась.

Я так понимаю речь про 3.2.12?

В любом случае, в ревизии 9575 (с codeplex) бага и правда исправлена; только вот сходу тестирование не работает (в том числе SampleEmulationTesting) — security.LastTrade в равняется null и поэтому 'security.LastTrade.Price = …' падает с Exception (конечно же, если вставить туда новый Trade() то работает). И мета-вопрос по этому: такую информацию по проблемам в нерелизных версиях куда по-хорошему постить?

Спасибо за репорт. Было очень важное исправление, из-за него может падать.

Пишите сюда, на форум. Единственное - в соответствующие темы. :)

Alexander
Alexander

Justforg:

Mikhail Sukhov: Багу нашли, в 3.2.11 поправим. Нужно было сразу сказать, что это эмуляция и бага специфична только для эмуляции. У топик стартера проблема с историей, которая не подтвердилась.

Я так понимаю речь про 3.2.12?

В любом случае, в ревизии 9575 (с codeplex) бага и правда исправлена; только вот сходу тестирование не работает (в том числе SampleEmulationTesting) — security.LastTrade в равняется null и поэтому 'security.LastTrade.Price = …' падает с Exception (конечно же, если вставить туда новый Trade() то работает). И мета-вопрос по этому: такую информацию по проблемам в нерелизных версиях куда по-хорошему постить?

в какой момент времени security.LastTrade == null? Если в самом начале - то это верное поведение, так и должно быть. То как было раньше - неверно. Если посреди работы вылезает такое - то ошибка.

Напишите подробнее, по коду не смог ошибку найти.

Justforg
Justforg

Полагаю это и есть верное поведение, но тогда стоит исправить Sample (SampleEmulationTesting).

А в какие именно соответствующие темы писать?

Mikhail Sukhov
Mikhail Sukhov

Justforg: Полагаю это и есть верное поведение, но тогда стоит исправить Sample (SampleEmulationTesting).

А в какие именно соответствующие темы писать?

А что исправить и на что? Можно с кусками кода?

Justforg
Justforg

Mikhail Sukhov:

Justforg: Полагаю это и есть верное поведение, но тогда стоит исправить Sample (SampleEmulationTesting).

А что исправить и на что? Можно с кусками кода?

http://stocksharp.codeplex.com/SourceControl/changeset/view/9777#72785 - `

// стартовое значения для генерации случайных данных
security.LastTrade.Price = 155000;

` - очевидно не должно работать, если я правильно понимаю (то есть пример падает при запуске).

Alexander
Alexander

Justforg:

Mikhail Sukhov:

Justforg: Полагаю это и есть верное поведение, но тогда стоит исправить Sample (SampleEmulationTesting).

А что исправить и на что? Можно с кусками кода?

http://stocksharp.codeplex.com/SourceControl/changeset/view/9777#72785 - `

// стартовое значения для генерации случайных данных security.LastTrade.Price = 155000;

> ` - очевидно не должно работать, если я правильно понимаю (то есть пример падает при запуске).

Спасибо, поправлю.