// ********************************************************************** public override void ProcessTick(Tick tick) { lastPrice = tick.IntPrice; } // получение данных
// ********************************************************************** public override void ProcessTick(Tick tick) { if (tick.DateTime < firstTickDt) { return; } lock (VolumeVector) { DateTime lastDT = DateTime.MinValue; if (lastDateTimeVolume.TryGetValue(tick.SecCode, out lastDT) == false) { // начальная установка даты и времени отсчета lastDT = tick.DateTime; } Dictionary <DateTime, StockDataElement> volumes = new Dictionary <DateTime, StockDataElement>(); if (VolumeVector.TryGetValue(tick.SecCode, out volumes) == false) { createNewVolume(tick.SecCode, lastDT); VolumeVector.TryGetValue(tick.SecCode, out volumes); } StockDataElement vds = new StockDataElement(tick.SecCode, lastDT); volumes.TryGetValue(lastDT, out vds); // если время больше XXX мин, делаем новую группу long csTicks = currentTimeFrame * TimeSpan.TicksPerSecond; if (tick.DateTime.Ticks - lastDT.Ticks >= csTicks) { // новая группа //-------------------- //+ old lastDT = tick.DateTime; createNewVolume(tick.SecCode, lastDT); volumes.TryGetValue(lastDT, out vds); //- old vds.high = tick.IntPrice; vds.low = tick.IntPrice; vds.open = tick.IntPrice; vds.close = tick.IntPrice; firstLoopInCandle = true; } if (firstRound) { vds.high = tick.IntPrice; vds.low = tick.IntPrice; vds.open = tick.IntPrice; vds.close = tick.IntPrice; } //+ 02082015 Bug fix if (vds.open == 0) { vds.open = tick.IntPrice; } //+ 02082015 Bug fix if (tick.IntPrice > vds.high) { vds.high = tick.IntPrice; } if (tick.IntPrice < vds.low) { vds.low = tick.IntPrice; } vds.close = tick.IntPrice; vds.Volume += tick.Volume; vds.PriceVolumeSum += (tick.IntPrice * tick.Volume); if (tick.Op == TradeOp.Sell) { vds.VolumeSell += tick.Volume; } else { vds.VolumeBuy += tick.Volume; } firstRound = false; firstLoopInCandle = false; volumes[lastDT] = vds; VolumeVector[tick.SecCode] = volumes; // Save last tick if (vds.date >= lastTickDt && !lastCandleSend) { vds.middle = vds.PriceVolumeSum / vds.Volume; saveStockElementToDB(vds); lastCandleSend = true; } } }