Не формируются свечи

Не формируются свечи
Atom
10/29/2012
Tauler


Коллеги!

Никак не соображу в чем проблема, вот код (версия 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 , в метод GetSupportedRanges один раз заходит, судя по всему из candleManager.Start(series);

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


Tags:


Thanks:


1 2  >
Moadip

Avatar
Date: 10/29/2012
Reply


Судя по коду вы пытаетесь прочитать сделки из 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]

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

Tauler

Avatar
Date: 10/29/2012
Reply


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

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

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

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

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

        public decimal Range { get; set; }
    }
Thanks:

Tauler

Avatar
Date: 10/29/2012
Reply


Проблема в том, что "Дело даже не доходит до методов CreateCandle, UpdateCandle, IsCandleFinishedBeforeChange"

Thanks:

Tauler

Avatar
Date: 10/29/2012
Reply


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

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

security = new Security
                           {
                               Id = "GAZP@EQNE",
                               MinStepSize = 0.01m,
                               Exchange = Exchange.Micex
                           };
Thanks:

Tauler

Avatar
Date: 10/29/2012
Reply


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

Thanks:

Moadip

Avatar
Date: 10/29/2012
Reply


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


652116654;2012-10-26 10:00:00;145330;1;Sell
652116655;2012-10-26 10:00:00;145330;2;Sell
652116656;2012-10-26 10:00:00;145320;1;Sell
652116657;2012-10-26 10:00:00;145270;5;Sell
652116658;2012-10-26 10:00:00;145270;2;Sell
652116659;2012-10-26 10:00:00;145270;10;Sell
652116660;2012-10-26 10:00:00;145250;1;Sell
652116661;2012-10-26 10:00:00;145250;10;Sell
652116662;2012-10-26 10:00:00;145200;1;Sell
652116663;2012-10-26 10:00:00;145190;2;Sell
652116664;2012-10-26 10:00:00;145150;2;Sell
652116665;2012-10-26 10:00:00;145150;1;Sell
652116666;2012-10-26 10:00:00;145150;5;Sell
652116667;2012-10-26 10:00:00;145150;1;Sell
652116668;2012-10-26 10:00:00;145130;1;Sell
652116669;2012-10-26 10:00:00;145110;1;Sell
652116670;2012-10-26 10:00:00;145100;5;Sell
652116671;2012-10-26 10:00:00;145100;20;Sell
652116672;2012-10-26 10:00:00;145100;1;Sell
652116673;2012-10-26 10:00:00;145080;10;Sell
652116674;2012-10-26 10:00:00;145070;2;Sell
652116675;2012-10-26 10:00:00;145070;2;Sell
652116676;2012-10-26 10:00:00;145060;10;Sell
652116677;2012-10-26 10:00:00;145060;1;Sell
652116678;2012-10-26 10:00:00;145050;2;Sell
652116679;2012-10-26 10:00:00;145050;10;Sell
652116680;2012-10-26 10:00:00;145050;2;Sell

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


	public class TradeFromTxt
	{
		private readonly string _path ;
		private readonly Security _security;

		public TradeFromTxt(string path, Security security)
		{
			_path = path;
			_security = security;
		}

		public IEnumerable<Trade> GetTrades()
		{
			var trades = CultureInfo.InvariantCulture.DoInCulture(() => File.ReadAllLines(_path).Select(line =>
			{
				var parts = line.Split(';');

				var time = DateTime.Parse(parts[1].To<string>());
				
				return new Trade
				{
					Security = _security,
					Time = time,
					Price = parts[2].To<decimal>(),
					Volume = parts[3].To<decimal>(),
					OrderDirection = parts[4].To<OrderDirections>()
				};
			}));

			return trades;
		}
	}

Thanks: Tauler

Tauler

Avatar
Date: 10/29/2012
Reply


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

Thanks:

Moadip

Avatar
Date: 10/29/2012
Reply


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

Thanks:

Tauler

Avatar
Date: 10/29/2012
Reply


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

Thanks:

Tauler

Avatar
Date: 10/29/2012
Reply


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

Михаил, это бага, фича или known issue?

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy