← Zurück

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (14)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

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

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

XMbIPb
XMbIPb Autor

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;

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

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