Не идут сделки в SampleSMA


Не идут сделки в SampleSMA
Atom
3/19/2010


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

Tags:


Thanks:


< 1 2 3  >
dart

Avatar
Date: 3/19/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/19/2010
Reply


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

Thanks:

dart

Avatar
Date: 3/19/2010
Reply


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

Thanks:

denis

Avatar
Date: 3/20/2010
Reply


поставил бряк на последней строчке в 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

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

Thanks:

dart

Avatar
Date: 3/23/2010
Reply


Почему то 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) к локальному ещё три часа
добавило. Причём самое интересное, после того совершения сделки время
сделки указывает московское.
Thanks:

Mikhail Sukhov

Avatar
Date: 3/23/2010
Reply


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

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

Thanks:

dart

Avatar
Date: 3/23/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/23/2010
Reply


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

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

Thanks:

dart

Avatar
Date: 3/23/2010
Reply


Я так и делаю в 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 рисуются до последней.

Thanks:

Mikhail Sukhov

Avatar
Date: 3/23/2010
Reply


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

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

Thanks:
< 1 2 3  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy