← Zurück

[BUG?] IsSyncRegister

Свойство CandleManager.IsSyncRegister, судя по всему, не работает.

Тестовый код:

AddInfoLog("IsSyncRegister = {0}", _candleManager.IsSyncRegister);
AddInfoLog("Регистрация свечек...");
//_candleToken = _candleManager.RegisterCandles((new TimeFrameCandle()).GetType(), this.Security, TimeSpan.FromMinutes(1));
_candleToken = _candleManager.RegisterTimeFrameCandles(Security, _timeFrame);
AddInfoLog("Свечки зарегистрированы.");

AddInfoLog("candlesize will be "+(Math.Max(Math.Max(_longPer, _shortPer), _atrPer) + 1));

var cc = _candleManager.GetCandles(_candleToken, Math.Max(Math.Max(_longPer, _shortPer), _atrPer) + 1);
AddInfoLog("cc size = {0}",cc.Count());

Thread.Sleep(5000);

AddInfoLog("Попытка №2");

cc = _candleManager.GetCandles(_candleToken, Math.Max(Math.Max(_longPer, _shortPer), _atrPer) + 1);
AddInfoLog("cc size = {0}", cc.Count());

Результат:

AC$ 31.08.2011 14:27:15.009 IsSyncRegister = True
AC$ 31.08.2011 14:27:15.010 Регистрация свечек...
AC$ 31.08.2011 14:27:15.049 Свечки зарегистрированы.
AC$ 31.08.2011 14:27:15.050 candlesize will be 28
AC$ 31.08.2011 14:27:15.053 cc size = 0
AC$ 31.08.2011 14:27:20.054 Попытка №2
AC$ 31.08.2011 14:27:20.058 cc size = 28

Могу попробовать самостоятельно пофиксить, если откроете мне тот участок кода.

War dieses Thema hilfreich?

Thema teilen

Kommentare (15)

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

Mikhail Sukhov
Mikhail Sukhov
  • нужно еще SyncCandleSource
Church
Church Autor

Могу попробовать.

Alexander
Alexander

Church: Могу попробовать.

Вы наверное не поняли. Фиксить ничего пока пробовать не надо.

Необходимо использовать IsSyncRegister и SyncCandleSource, у вас - только IsSyncRegister используется.

Church
Church Autor

У меня вот так:

                this._candleManager = new CandleManager(new SyncTraderCandleSource(Trader))
                {
                    IsSyncRegister = true,
                };
Mikhail Sukhov
Mikhail Sukhov

Church: У меня вот так:

            this._candleManager = new CandleManager(new SyncTraderCandleSource(Trader))
            {
                IsSyncRegister = true,
            };

И? Работает?
Church
Church Autor

Нет 😳

Mikhail Sukhov
Mikhail Sukhov

Church: Нет 😳

Так а сделки то есть на тот момент, когда вы первый раз вызываете GetCandles? Регистрация регистрацией, но если у вас сделки не накачены, то CandleManager их из воздуха не сотворит.

Church
Church Autor

Ну, трейдер инициализируется на несколько десятков строк кода раньше. Я думал, что эта синхронизация затормозит поток до тех пор, пока не прогрузятся сделки (и по ним не создадутся свечки) до текущего момента.

Mikhail Sukhov
Mikhail Sukhov

Church: Я думал, что эта синхронизация затормозит поток до тех пор, пока не прогрузятся сделки

Такое нужно делать на уровне кода, и именно сделать лок до тех пор, пока не будут получены текущие свечки. И вот уже далее и вызывать GetCandles.

Church
Church Autor

Сейчас у меня именно так, но поскольку функция требуется во многих стратегях, думал что она может уже быть включена в S#.

Mikhail Sukhov
Mikhail Sukhov

Church: Сейчас у меня именно так, но поскольку функция требуется во многих стратегях, думал что она может уже быть включена в S#.

Во многих ботах? Ни разу такое не требовалось. А что вы делаете, если не секрет, что оно вам понадобилось?

Church
Church Autor

Простая стратегия на свечках. Нужно либо а) подождать пока сформируется история и рассчитать нужные индикаторы на последних свечках, либо б) пропускать все свечки по мере формирования через индикатор.add, пока не дойдем до рыночного времени.

Mikhail Sukhov
Mikhail Sukhov

Church: Простая стратегия на свечках. Нужно либо а) подождать пока сформируется история и рассчитать нужные индикаторы на последних свечках, либо б) пропускать все свечки по мере формирования через индикатор.add, пока не дойдем до рыночного времени.

Исторические свечки подгружаются за раз, их ждать не нужно. Так что все равно не понятно, зачем блокировать построение свечек в реальном времени.

Church
Church Autor

В смысле "за раз"? Если имеете в виду только в начале работы стратегии - то да. Но если не встраивать искусственных задержек, то метод GetCandles выдает нули или самые утренние свечки.

Mikhail Sukhov
Mikhail Sukhov

Church: В смысле "за раз"? Если имеете в виду только в начале работы стратегии - то да. Но если не встраивать искусственных задержек, то метод GetCandles выдает нули или самые утренние свечки.

Я понял о чем речь. Вы в OnStarting просто запоминаем время старта. И далее фильтруем свечки, меньшие этого времени.