Не идут сделки в SampleSMA
Atom
19.03.2010
dart


Сегодня открыл учебный квик в БКС (он там 5.15) чтобы версию S#1.7 попробовать. Приложенный wnd файл не открылся. Пишет ошибку переполнение памяти и квик вылетает. Вобщем вручную настроил. Единственное в таблице стоп-заявки нескольких полей не нашёл (время действия, активна с, активны по и т.д.). Ну да бог с ним. Всё работает нормально Sample, SampleConsole, SampleCandle. В SampleSMA строятся свечки, скользящие средние пересекаются вверх, вниз - а сделки не идут. Может потому что в OnProcess после Gettimeframecandle алгоритм доходит до строк if (candle == null) return true; а дальше не идёт?


Теги:


Спасибо:


< 1 2 3  >
dart

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


Да, текущая свечка постоянно меняется - это видно, в соответствии с ценой последних сделок. На бирже, то есть в квике и на графике в S# время 19:50. Местное, то которое на компьютере 22:50. Разница может быть плюс/минус секунд 20 .

Спасибо:

Mikhail Sukhov

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


Видимо в этом и причина - время не московское. Инициализируйте MarketTimeOffset или подведите время.

Спасибо:

dart

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


Да я уж понял. В документации по 1.7 есть пунктик - биржевое время. Может стоит MarkettimeOffset в текст примеров вставлять скажем с нулем для Москвы, а каждый сам будет необходимый сдвиг подставлять? А в 1.5 я что-то его не нашёл. Вермя на компе не могу подвести, только на учебном квике. На боевом дата в Глобалсервер записывается.

Спасибо:

denis

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


поставил бряк на последней строчке в SMA.cs public void Add(TimeFrameCandle candle) { if (candle == null) throw new ArgumentNullException("candle");

                   var value = this.Value;

                   // добавляем новое начало
                    value += candle.ClosePrice / this.Length;
                    _buffer.Add(candle);

и посмотрел буфер, сравнил this.Value с СМА в квик-джуниор, сходятся. Сделок придется долго ждать, там все растет :) Сейчас я ему мозги выключу, посмотрю чего выкинет. а вот уже приехал еррор :) прикладываю скрин

https://docs.google.com/leaf?id=0Bw2gQDvf41vtN2RkZGZjNzItMjJhMC00Mjc4LWFmMjgtY2VkOWVkYzI3MTJh&sort=name&layout=list&num=50

т.е. симлСМА пытается чего-то делать.

Спасибо:

dart

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


Почему то MarketTime выдаёт не биржевое время, а локальное. Вот код: // путь к Квик директории const string quikPath = @"C:\BCS_Work\Учебный QUIK БКС"; using (var waitHandle = new ManualResetEvent(false)) { // создаем соединение с Quik-ом using (var trader = new QuikTrader(quikPath)) { // выводим текущее время биржи Console.WriteLine(trader.MarketTime); // устанавливаем смещение на +3 часа. // Например, если выбрана биржа РТС (Москва) с временной зоной +3, то в итоге получится временная зона +6 (Новосибирск). trader.MarketTimeOffset = TimeSpan.FromHours(3); // выводим текущее время биржи с учетом смещения Console.WriteLine(trader.MarketTime);

Первый раз (до MarketTimeOffset) вывело локальное время (+3 к Москве). Второй раз, (после MarketTimeOffset) к локальному ещё три часа добавило. Причём самое интересное, после того совершения сделки время сделки указывает московское.

Спасибо:

Mikhail Sukhov

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


QuikTrader не имеет возможности получать биржевое время. Поэтому выводит DateTime.Now. Для корректировки я как раз и ввел MarketTimeOffset.

Да, есть такое. Квик гонит данные только в московском времени. Создает проблемы?

Спасибо:

dart

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


То есть, скажем для Новосибирска должно быть, биржевое время ( = московскому = квиковскому) 17:00, локальное 20:00, Markettime (после MarketTimeOffset) 23:00?

Спасибо:

Mikhail Sukhov

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


Не понял логики. Москва - это +3, Новосиб - это +6. Соответвенно, если Вы в новосибе, нужно делать -3, а не +3. Иначе получится уже Хабаровскй. Делать минус можно так (собственно как плюс, только там знак минус =) ):

trader.MarketTimeOffset = TimeSpan.FromHours(-3);

Спасибо:

dart

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


Я так и делаю в SampleSMA:

private void Connect_Click(object sender, RoutedEventArgs e) { if (this.Path.Text.IsEmpty()) MessageBox.Show(this, "Путь к Quik не выбран"); else if (this.Account.Text.IsEmpty()) MessageBox.Show(this, "Счет не задан"); else { _trader = new QuikTrader(this.Path.Text); _trader.MarketTimeOffset = TimeSpan.FromHours(-3); _candleManager = new CandleManager(_trader); _trader.NewSecurities += securities => this.Sync(() =>

выскакивает ошибка (не сразу, а спустя какое-то время):

System.InvalidOperationException: Последовательность не содержит элементов в System.Linq.Enumerable.First[TSource](IEnumerable ¶ source) в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(IEnumerable ¶ quotes, ITrader trader, OrderCurrentOrder) в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(Security security, OrderDirections orderDirection, ITrader trader, OrderCurrentOrder) в Ecng.Trading.Algo.QuotingStrategy.get_FilteredQuotes() в Ecng.Trading.Algo.QuotingStrategy.GetBestPrice() в Ecng.Trading.Algo.MarketQuotingStrategy.GetNewPrice() в Ecng.Trading.Algo.QuotingStrategy.IsNeedReRegister() в Ecng.Trading.Algo.QuotingStrategy.OnProcess() в Ecng.Trading.Algo.Strategy.Process()

И в этом случае скользящие рисуются не до последней свечки , а до пред- пред-последней, то есть третьей с конца свечки. Без .MarketTimeOffset рисуются до последней.

Спасибо:

Mikhail Sukhov

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


Стакан нужно экспортировать для SampleSMA. Уже найдена эта бага в примере ранее.

Насчет свечек. Странное поведение. Посмотрю.

Спасибо:
< 1 2 3  >

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

loading
clippy