Тестирование на свечках.
Atom Ответить
30.01.2013


Здравствуйте! Загрузил 4.1.7. Очень хотелось тестирование на свечках поиспытывать. И натолкнулся на следующую проблемку. Свечки, приходящие при тестировании не соответствуют действительности. Стал экспериментировать, выводя свечи на график. Вывел один день 2012.01.03 на график, через гидру двумя способами с постройкой свечек из сделок и без постройки, графика получились одинаковыми. А вот график, который я строю при тестировании на свечах от них отличается. А количество свечей 10 минуток(на них экспериментировал) за весь 2012год при тестировании, приходит больше чем в гидре создается, хоть с постройкой свечек из сделок хоть без постройки. Может, кто то уже тестировал на свечках, проблем не возникало? Ошибиться то вроде негде...
Код получения графика.


Код
       private void Test_Click(object sender, RoutedEventArgs e)
        {
            var timeFrame = TimeSpan.FromMinutes(10);

            // хранилище, через которое будет производиться доступ к тиковой и котировочной базе
            var storageRegistry = new StorageRegistry();

            // изменяем путь, используемый по умолчанию
            ((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = PathStorage;

            // используем алфавитное хранилище
            ((LocalMarketDataDrive)storageRegistry.DefaultDrive).UseAlphabeticPath = true;

            var startTime = new DateTime(2012, 1, 1);
            var stopTime = new DateTime(2012, 1, 3);

            // задаем шаг ProgressBar
            var progressStep = ((stopTime - startTime).Ticks / 100).To<TimeSpan>();

                // создаем тестовый инструмент, на котором будет производится тестирование
                var security = SelectedSecurity;

                // тестовый портфель
                var portfolio = new Portfolio { Name = "test account" };

                // создаем шлюз для эмуляции
                // инициализируем настройки (инструмент в истории обновляется раз в секунду)
                var trader = new EmulationTrader(new[] { security },new[] { portfolio })
                {
                    MarketTimeChangedInterval = timeFrame,
                    StorageRegistry = storageRegistry,

                    // использовать свечки
                    UseCandlesTimeFrame = timeFrame,
                };

                trader.Connect();
                trader.StartExport();

                var candleManager = new CandleManager(trader);
                var series = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame);
                InitChart();
                candleManager.Processing += DrawCandles;
                candleManager.Start(series);

                var nextTime = startTime + progressStep;

                // и подписываемся на событие изменения времени, чтобы обновить ProgressBar
                trader.MarketTimeChanged += d =>
                {
                    if (trader.CurrentTime >= nextTime || trader.CurrentTime >= stopTime)
                    {
                        nextTime += progressStep;
                        this.GuiAsync(() => ProgressBar.Value++);
                    }
                };

                trader.StateChanged += (oldState, newState) =>
                {
                    if (trader.State == EmulationStates.Stopped)
                    {
                        this.GuiAsync(() =>
                        {
                            if (trader.IsFinished)
                            {
                                ProgressBar.Value = ProgressBar.Maximum;
                                MessageBox.Show("Закончено за " + (DateTime.Now - _startEmulationTime));
                            }
                            else
                                MessageBox.Show("Отменено");
                        });
                    }
                    
                };

            trader.Start(startTime, stopTime);

            _startEmulationTime = DateTime.Now;

        }
        private void DrawCandles(CandleSeries series, Candle candle)
        {
            if (candle.State == CandleStates.Finished)
            {
                this.GuiAsync(
                    () => _chartWindow.Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
                        {
                            {_candlesElem, candle},
                        }));
            }
        }



Спасибо:




6 Ответов
Mikhail Sukhov

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


Есть кое-какая проблема. Спасибо за фидбэк, разбераемся.
Спасибо:

profts

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


У меня вообще свечки не приходят. Код один в один. Свечки формировал гидрой от 4.1.2. Сегодня специально установил последнюю гидру 4.1.8, закачал сделки и свечки разных таймфреймов за месяц.

Убираю "UseCandlesTimeFrame = timeFrame" - свечки строятся и выводятся на график. С этим параметром прога моментально пишет "Закончено за...", график пустой.
Как-будто не видит файлы с формированными свечами за данный период.
Правило:
"_series
.WhenCandlesFinished()
.Do(ProcessCandle)
.Apply(this);" также не срабатывает ни разу.
Спасибо:

Иван З.

Фотография
Курсы Автор статей Благотворитель
Дата: 07.02.2013
Ответить


Версию S# какую используете? И путь к истории какой?
Автор топика
Спасибо:

profts

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


4.1.8.
Путь C:\C#Programs\Hystory2. В Hystory2 папки с инструментами.
UseAlphabeticPath = false;

Собственно как может быть дело в пути, если свечки из тиков он формирует нормально, а готовые свечки по тому же пути брать не хочет.

Иван, а есть скайп? не могли бы помочь?
Спасибо:

Иван З.

Фотография
Курсы Автор статей Благотворитель
Дата: 07.02.2013
Ответить


Гидра версией до 4.1.7 закачивала свечи и сохраняла в файл типа candles_Candle_1.00_00_00dates.bin, а Гдра версией с 4.1.7 сохраняет в файл типа candles_TimeFrameCandle_00-01-00dates.bin. Т.е. история закачанная гидрой версии до 4.1.7, источник версии 4.1.7 уже не видит. Проверте наличие свечек, а гидра строит график данного тф без построения свечек из тиков? Скайп есть, сечас поговорить не смогу.
Автор топика
Спасибо:

Иван З.

Фотография
Курсы Автор статей Благотворитель
Дата: 07.02.2013
Ответить


кстати источник версии 4.1.7 не видит только свечи, а тики видит, так что дело может быть и в пути. Добавте первую букву наименования инструмента, например
Код
private const string PathStorage = @"C:\History\S";

Это для SPFB.RTS@RTS
Автор топика
Спасибо:


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

loading
clippy