Не формируются свечи
Atom Ответить
29.10.2012


Коллеги!

Никак не соображу в чем проблема, вот код (версия 4.1.4) :



Вроде все делаю как в мануале и как во многих ветках форума тут, однако свечи упорно не формируются, список candles1 - пустой.
Дело даже не доходит до методов CreateCandle, UpdateCandle, IsCandleFinishedBeforeChange в самой реализации RangeHLCandleBuilder : CandleBuilder<RangeHLCandle> , в метод GetSupportedRanges один раз заходит, судя по всему из candleManager.Start(series);

Помогите кто чем может!

Теги:


Спасибо:




16 Ответов
Moadip

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


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

По пунктам:
1. makeDealsFromHistory - это я так понимаю класс который берет сделки из txt и делает из них Trade.
Так может сразу брать тики которые сохранены гидрой?

2. DateTime from = trades.Min(trade => trade.Time).AddDays(-1);
DateTime to = trades.Max(trade => trade.Time).AddDays(1);

Не понятен смысл этих строк. допустим есть сделки с 10 по 20 октября.
Тогда в from будет 9 ноября а в to 21. Для чего?Blink

3. RangeHLCandle. Возможна есть проблемы в этом дочернем классе.
Для начала думаю лучше добиться чтобы в чарт выводились свечки, взяв какой нибудь готовый класс свечек из S#.
Потом уже делать со своими дочерними классами. Это надо, чтобы поэтапно исключить возможные места с ошибками.
Спасибо:

Tauler

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


По пунктам 1 и 2 - они родились уже в процессе отладки

1. Ну вот такой у меня источник :) Не факт ,что буду Гидру использовать. В итоге мы имеем список сделок.

2.Сделки в текстовом файле за 29 число, время не указано. Эти строки для того, чтобы гарантировано они попали в период времени.

3. Да RangeHLCandle проще простого:

Код

public class RangeHLCandle : Candle
    {
        public override object Arg
        {
            get { return Range; }
            set { Range = (decimal) value; }
        }

        public decimal Range { get; set; }
    }
Автор топика
Спасибо:

Tauler

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


Проблема в том, что
"Дело даже не доходит до методов CreateCandle, UpdateCandle, IsCandleFinishedBeforeChange"
Автор топика
Спасибо:

Tauler

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


Попробую сейчас со стандартными свечками.

Я вот думаю - может в Trade я какое то значимое свойство пропускаю?
Заполняю при создании Trade свойства Id, Price, Volume , перед созданием RawConvertableCandleBuilderSource<Trade> проставляю Security и OrderDirection. Security везде одинаковая

Код
security = new Security
                           {
                               Id = "GAZP@EQNE",
                               MinStepSize = 0.01m,
                               Exchange = Exchange.Micex
                           };
Автор топика
Спасибо:

Tauler

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


C RangeCandle тоже не катит. Ощущение, что до строителя свечей дело вообще не доходит
Автор топика
Спасибо:

Moadip

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


[IMG]http://i45.fastpic.ru/thumb/2012/1029/ef/25443b6668c349c05794c1df2a97d6ef.jpeg[/IMG]

Пример сделок в txt



Класс для парсинга txt файла


Спасибо: Tauler

Tauler

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


Магия какая-то ,у меня все точно так же переделано, свечей- 0. У Вас какая версия стокшарпа? у меня 4.1.1
Автор топика
Спасибо:

Moadip

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


Одна из последних сборок 4.1.5
Спасибо:

Tauler

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


Ваш пример у меня работает, буду копать. Спасибо !
Автор топика
Спасибо:

Tauler

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


Твою ж мать ! :)
Знаете в чем бага была? А моем файле у сделок время 00:00:00, вот и за этого видимо по ним свечки не строились.
С одной стороны - у Exchage.Rts есть четко указанные интервалы, с другой - ну для RangeCandle какая на фиг разница :)


Михаил, это бага, фича или known issue?
Автор топика
Спасибо:

Tauler

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


Коллеги, осталось чуть чуть до полной победы разума над бездушной машиной :)

в событии проверки на то, закончена свечка или нет мне надо сверить время пришедшей сделки со временем предыдущей.

Делаю так:

IList<ICandleBuilderSourceValue> data = Container.GetValues(series, candle).ToList();

но в итоге в data пусто. С контейнерами я ничего не химичил,вот оба конструктора:

Код
public RangeHLCandleBuilder()
        {}

        public RangeHLCandleBuilder(ICandleBuilderContainer container) : base(container)
        {} 


Есть какие либо мысли?

Вручную нигде в этот контейнер не надо ничего совать?
Автор топика
Спасибо:

Tauler

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


Отцы-основатели, ну вы хоть помогите :)
Автор топика
Спасибо:

Tauler

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


Код
protected override bool IsCandleFinishedBeforeChange(CandleSeries series, RangeHLCandle candle, ICandleBuilderSourceValue value)
        {
            Container.AddValue(series, candle, value);
            var data = Container.GetValues(series, candle);
            int i = data.Count();
         }


Даже тут i получается 0. В чем секрет, никто не знает? Версия стокшарпа 4.1.4
Автор топика
Спасибо:

Tauler

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


Нашел секрет. Почему то по умолчанию свойство Container.ValuesKeepTime = 00:00:00. Хотя в документации Время хранения ICandleBuilderSourceValue в памяти. По-умолчанию равно 2-ум дням. Но заметил - если в конструкторе

Код
public RangeHLCandleBuilder()
        {
            Container.ValuesKeepTime = TimeSpan.FromMinutes(1);
        }


то в коллекции IList<ICandleBuilderSourceValue> data = Container.GetValues(series, candle).ToList(); есть сделки.
Но сам процесс построения свечей гораздо дольше.
Автор топика
Спасибо:

Mikhail Sukhov

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


Tauler Перейти
Нашел секрет. Почему то по умолчанию свойство Container.ValuesKeepTime = 00:00:00. Хотя в документации Время хранения ICandleBuilderSourceValue в памяти. По-умолчанию равно 2-ум дням.


Спасибо, поправим.
Спасибо:

Tauler

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


Михаил, хочу обратить внимание,что при Container.ValuesKeepTime = 00:00:00 свечки порезвей строятся. Ну или мне показалось.
Автор топика
Спасибо:


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

loading
clippy