Коллеги!
Никак не соображу в чем проблема, вот код (версия 4.1.4) :
security = new Security { Id = "GAZP@EQNE", MinStepSize = 0.01m, Exchange = Exchange.Micex };
List<Trade> trades = makeDealsFromHistory(edtPathToHistoryFile.Text);
foreach (var trade in trades)
{
trade.Security = security;
trade.OrderDirection = OrderDirections.Sell;
}
DateTime from = trades.Min(trade => trade.Time).AddDays(-1);
DateTime to = trades.Max(trade => trade.Time).AddDays(1);
var builderSource = new RawConvertableCandleBuilderSource<Trade>(security, from , to, trades);
CandleSeries series = new CandleSeries(typeof(RangeHLCandle), security, edtStockRange.Value);
CandleManager candleManager = new CandleManager();
candleManager.Sources.Add(new RangeHLCandleBuilder { Sources = { builderSource }});
candleManager.Start(series);
List<RangeHLCandle> candles1 = series.GetCandles<RangeHLCandle>().ToList();
chartMain.Series[0].Points.DataBind(candles1, String.Empty, "LowPrice,HighPrice,OpenPrice,ClosePrice",
"Tooltip = HighPrice");
}
}
Вроде все делаю как в мануале и как во многих ветках форума тут, однако свечи упорно не формируются, список candles1 - пустой. Дело даже не доходит до методов CreateCandle, UpdateCandle, IsCandleFinishedBeforeChange в самой реализации RangeHLCandleBuilder : CandleBuilder<RangeHLCandle> , в метод GetSupportedRanges один раз заходит, судя по всему из candleManager.Start(series);
Помогите кто чем может!
コメント (16)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Судя по коду вы пытаетесь прочитать сделки из txt файла, собрать из них свечки и вывести в чарт.
По пунктам:
makeDealsFromHistory - это я так понимаю класс который берет сделки из txt и делает из них Trade. Так может сразу брать тики которые сохранены гидрой?
DateTime from = trades.Min(trade => trade.Time).AddDays(-1); DateTime to = trades.Max(trade => trade.Time).AddDays(1);
Не понятен смысл этих строк. допустим есть сделки с 10 по 20 октября. Тогда в from будет 9 ноября а в to 21. Для чего?😳
По пунктам 1 и 2 - они родились уже в процессе отладки
2.Сделки в текстовом файле за 29 число, время не указано. Эти строки для того, чтобы гарантировано они попали в период времени.
Проблема в том, что "Дело даже не доходит до методов CreateCandle, UpdateCandle, IsCandleFinishedBeforeChange"
Попробую сейчас со стандартными свечками.
Я вот думаю - может в Trade я какое то значимое свойство пропускаю? Заполняю при создании Trade свойства Id, Price, Volume , перед созданием RawConvertableCandleBuilderSource<Trade> проставляю Security и OrderDirection. Security везде одинаковая
C RangeCandle тоже не катит. Ощущение, что до строителя свечей дело вообще не доходит
Пример сделок в txt
Класс для парсинга txt файла
Магия какая-то ,у меня все точно так же переделано, свечей- 0. У Вас какая версия стокшарпа? у меня 4.1.1
Одна из последних сборок 4.1.5
Ваш пример у меня работает, буду копать. Спасибо !
Твою ж мать ! :) Знаете в чем бага была? А моем файле у сделок время 00:00:00, вот и за этого видимо по ним свечки не строились. С одной стороны - у Exchage.Rts есть четко указанные интервалы, с другой - ну для RangeCandle какая на фиг разница :)
Михаил, это бага, фича или known issue?
Коллеги, осталось чуть чуть до полной победы разума над бездушной машиной :)
в событии проверки на то, закончена свечка или нет мне надо сверить время пришедшей сделки со временем предыдущей.
Делаю так:
IList<ICandleBuilderSourceValue> data = Container.GetValues(series, candle).ToList();
но в итоге в data пусто. С контейнерами я ничего не химичил,вот оба конструктора:
public RangeHLCandleBuilder()
Отцы-основатели, ну вы хоть помогите :)
Даже тут i получается 0. В чем секрет, никто не знает? Версия стокшарпа 4.1.4
Нашел секрет. Почему то по умолчанию свойство Container.ValuesKeepTime = 00:00:00. Хотя в документации Время хранения ICandleBuilderSourceValue в памяти. По-умолчанию равно 2-ум дням. Но заметил - если в конструкторе
public RangeHLCandleBuilder()
Спасибо, поправим.
Михаил, хочу обратить внимание,что при Container.ValuesKeepTime = 00:00:00 свечки порезвей строятся. Ну или мне показалось.