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


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



Спасибо:




14 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 08.09.2011
Ответить


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


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

XMbIPb

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


Mikhail Sukhov Перейти

По быстрее в каком плане?

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

5 EmulationTrader лишних.

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 08.09.2011
Ответить


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


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

Justforg

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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.09.2011
Ответить


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


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

Justforg

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


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()
Program_min.py.txt 2,3KB (0)
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.09.2011
Ответить


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

Justforg

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


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


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

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

Alexander

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


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


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

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


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

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

Alexander

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


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


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

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


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

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

Justforg

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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 23.09.2011
Ответить


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

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


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

Justforg

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


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


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


http://stocksharp.codepl...hangeset/view/9777#72785 - `
Код
// стартовое значения для генерации случайных данных
security.LastTrade.Price = 155000;

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

Alexander

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


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


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


https://stocksharp.codepl...hangeset/view/9777#72785 - `
Код
// стартовое значения для генерации случайных данных
security.LastTrade.Price = 155000;

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


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


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

loading
clippy