Проблемы экспорта
Atom
18.03.2012


Появилась потребность экспорта тиков в текстовый формат для загрузки в Amibroker.
Использовал версию гидры 4.0.22
Обнаружил такие проблемы и неточности.
1) Солюшн не собирается из-за постбилда плагина Plaza. Не находит какой-то файл. Мне не надо. Отключил.
2) Экспорт не возможен без загрузки данных в грид. Это косяк, потому что на большое количество строк грид памяти жрёт немеряно.
Нет информации об окончании экспорта, кроме отвисания формы. Поправил. И то, и другое и зависание. Раз доступ мне не дали, берите файлы отсюда.
TradesWindow.rar 3 KB (217)

Теги:


Спасибо:


< 1 2 3 4  >
Mikhail Sukhov

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


Порефакторил ваши изменения. С прогресс баром лучше было бы сделать, чтобы он опирался на даты. Новая дата - увеличили прогресс.
Спасибо:

VassilSanych

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


Mikhail Sukhov Перейти
Порефакторил ваши изменения.

ReadRange не работает (возвращает данные только за первый день)
выгрузка в эксель опять отваливается (во вкладке присутствуют ещё строки, кроме строк данных)
PS
Поправка: ReadRange не включает последнюю дату. Так оно должно быть?
PPS
Поправка 2: не из-за лишней строки, а из-за потерянного конца цикла

Поправил поведение экспорта для соответствия поведению ReadRange,
исправил экспорт в эксель
Спасибо:

Mikhail Sukhov

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


VassilSanych Перейти
Mikhail Sukhov Перейти
Порефакторил ваши изменения.

ReadRange не работает (возвращает данные только за первый день)
выгрузка в эксель опять отваливается (во вкладке присутствуют ещё строки, кроме строк данных)
PS
Поправка: ReadRange не включает последнюю дату. Так оно должно быть?


Нет, это баг, поправлю.

По выгрузке данных:

  1. pdb файл не так интересен для разработки, как xml.
  2. В релиз режиме будет работать быстрее. А так как это форматирование может вызывать много раз, то это даже необходимо.
  3. Увидел, что SmartFormat собран только под .NET 3.5 Предлагаю его пересобрать под 4.0. А вообще, проект жив?
  4. Может эти строчки для форматирования занести в app.config? И использовать сразу несколько форматов. Например, для Ами, Метаса и т.д.?
  5. Как насчет сделать выгрузку таким образом и для других типов данных? Например, для тех же свечек.
Спасибо:

VassilSanych

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


Если это баг, то придётся править выгрузку назад (и прогресс), потому что я её уже поправил.
Строго говоря по английски to - означает до (не включая), а включая - thru

1. не согласен: pdb необходим для отладки и более точной информации об ошибках в рантайме
2-3. сборка SmartFormat в References собрана мной в релиз-режиме 4.0 Client
4. строка и так читается из текстового файла
5-6 на данный момент мне это не интересно (свечки Ами и так сам рисует, а Метас я не использую). Тот формат, который я оставил, более-менее соответствует изначальному формату Финама и воспринимается Амиброкером (код инструмента удобен для автоматического создания инструмента в Ами при загрузке и стыковке данных из нескольких файлов)

Вообще конечно круче было бы заменить SmartFormat (который подтормаживает из-за рефлексии) на кодогенерацию обычного string.Format по шаблону T4, но больно много работы.
Спасибо:

VassilSanych

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


Mikhail Sukhov Перейти
С прогресс баром лучше было бы сделать, чтобы он опирался на даты. Новая дата - увеличили прогресс.

Для того, чтобы такое поведение было возможно не только в методах с перебором в цикле (как сейчас), но и, допустим, в выгрузке в XML,
необходимо, чтобы ReadRange принимал на вход делегат информирования и сам дёргал его по приращению даты или по каждой сделке.
Второй вариант даже лучше: можно, например, счётчик на форме нарисовать. Обновлять такой счётчик по каждой сделке конечно нельзя (WPF будет жрать больше половины ресурсов), но вполне можно обновлять переменную по делегату, а форму - по таймеру.
Спасибо:

Mikhail Sukhov

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


VassilSanych Перейти

Для того, чтобы такое поведение было возможно не только в методах с перебором в цикле (как сейчас), но и, допустим, в выгрузке в XML,
необходимо, чтобы ReadRange принимал на вход делегат информирования и сам дёргал его по приращению даты или по каждой сделке.


Зачем, если можно не устраивать перекрестную зависимость и сделать код элегантнее?

Код

var totalDates = to - from;
var percPerDate = 100 / totalDates;

for from to
{
  foreach (var trade in Read(curr))
  {
    FormatToFile(trade);
  }

  progress.Value += percPerDate;
}


В принципе можно хранилище добавить функцию определения кол-во записей (оно храниться в метаданных), и тогда можно обновлять прогресс бар, скажем, для каждой 100-ой сделки.
Спасибо:

Mikhail Sukhov

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


VassilSanych Перейти
Если это баг, то придётся править выгрузку назад (и прогресс), потому что я её уже поправил.
Строго говоря по английски to - означает до (не включая), а включая - thru


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

VassilSanych Перейти

1. не согласен: pdb необходим для отладки и более точной информации об ошибках в рантайме
2-3. сборка SmartFormat в References собрана мной в релиз-режиме 4.0 Client
4. строка и так читается из текстового файла
5-6 на данный момент мне это не интересно (свечки Ами и так сам рисует, а Метас я не использую). Тот формат, который я оставил, более-менее соответствует изначальному формату Финама и воспринимается Амиброкером (код инструмента удобен для автоматического создания инструмента в Ами при загрузке и стыковке данных из нескольких файлов)


1. xml еще лучше для intellisence
2. что такое client?
4. все правильно. только сейчас при каждом апдейте Гидры вам нужно будет переписывать свой файл заново. Ваш формат не подходит, так как он номер игнорирует, а для коммон формата нужны все поля. Поэтому и предлагаю добавить поддержку нескольких форматов.
5. Ами умеет делать насколько я знаю только ТФ свечки, и не произвольного интервала. Поэтому, для таких ограниченных программ я в Гидру и добавил формирование свечек, чтобы они интерпретировались как обычные свечки, и тем самым могли бы отрисовываться. Более того, при небольшом телодвижении можно сделать через Гидру RT feed.

VassilSanych Перейти

Вообще конечно круче было бы заменить SmartFormat (который подтормаживает из-за рефлексии) на кодогенерацию обычного string.Format по шаблону T4, но больно много работы.


А сколько по времени сейчас для РИ 1 день выгружается?
Спасибо:

VassilSanych

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



Делегат - это не перекрёстная зависимость, а всего-лишь обратный вызов (декларироваться он может и там же, где и Read).
Если в вызове нет необходимости, такому параметру можно просто присваивать null в перегруженном методе.

Mikhail Sukhov Перейти

Зачем, если можно не устраивать перекрестную зависимость и сделать код элегантнее?

Код

var totalDates = to - from;
var percPerDate = 100 / totalDates;

for from to
{
  foreach (var trade in Read(curr))
  {
    FormatToFile(trade);
  }

  progress.Value += percPerDate;
}


В принципе можно хранилище добавить функцию определения кол-во записей (оно храниться в метаданных), и тогда можно обновлять прогресс бар, скажем, для каждой 100-ой сделки.


Сейчас примерно так, как описано и работает.
Но экспорт в XML, например, принимает на вход коллекцию и инкапсулирует её перебор.
Т.е. нет доступа к элементу коллекции во время его получения.
Спасибо:

VassilSanych

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


Если нет желания добавлять такую функциональность в ядро, как вариант, можно конечно опять сделать обёртку над коллекцией.

Всё это гипотетически, потому что конкретно мне нынешней функциональности экспорта пока достаточно.
Спасибо:

VassilSanych

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


VassilSanych Перейти

Но экспорт в XML, например, принимает на вход коллекцию и инкапсулирует её перебор.


Только сейчас заметил, что это обычный цикл, но через LINQ.
Не суть.
Просто, считаю, стоит задуматься об более интерактивном интерфейсе получения данных, если это получение занимает ощутимое время.
Спасибо:
< 1 2 3 4  >

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

loading
clippy