// скорость тиков вверх private void TickBuySpeed(string _timeTrade, double _time_mcs, double _price) { double speed = 0; double TotalMillisec_trade = ConvertFunc.TotalMillisecondTradeCalc(_timeTrade, _time_mcs); if (_price > previosPriceBuy) { double delta_millisec = TotalMillisec_trade - startTimeBuy; startTimeBuy = TotalMillisec_trade; if (delta_millisec <= 0) { return; } speed = sec / delta_millisec; exchangeInformation.SpeedTickBuy = AverageSpeed(speed, speedListBuy); previosPriceBuy = _price; } else { if (_price < previosPriceBuy) { previosPriceBuy = _price; } } }
/// <summary> /// Pасчет скорости сделок в сд/сек /// </summary> /// <param name="_timeTrade">время сделки 00:00:00</param> /// <param name="_time_mcs">время микросекунды</param> public void TradesSpeed(string _timeTrade, double _time_mcs) { double speed = 0; double TotalMillisec_trade = ConvertFunc.TotalMillisecondTradeCalc(_timeTrade, _time_mcs); double delta_millisec = TotalMillisec_trade - TotalMillisec_trade_previos; TotalMillisec_trade_previos = TotalMillisec_trade; if (delta_millisec <= 0) { return; } speed = sec / delta_millisec; speedList.Add(speed); if (speedList.Count < countSpeedList) { return; } else { exchangeInformation.SpeedTrades = speedList.Average(); speedList.RemoveAt(0); } }
/// <summary> /// Скорость сделок с группировкой по тикам /// </summary> /// <param name="_timeTrade">время сделки 00:00:00</param> /// <param name="_time_mcs">время сделки микросекунды</param> /// <param name="_priceTrade">цена сделки</param> public void SpeedTradesTickMeasure(string _timeTrade, double _time_mcs, double _priceTrade) { if (!ServiceFunc.CheckFunc.CheckTimeSession(_timeTrade, ref session_check)) { return; } double speed = 0; double TotalMillisec_trade = ConvertFunc.TotalMillisecondTradeCalc(_timeTrade, _time_mcs); if (_priceTrade != priceTradesPrevios) { double delta = TotalMillisec_trade - TotalMillisecTradeStart; TotalMillisecTradeStart = TotalMillisec_trade; if (delta < 0) { exchangeInformation.SpeedTradesTick = 0; MessageBox.Show("delta меньше НУЛЯ!"); } else { if (delta == 0) { delta = 1; } // если delta==0, будем считать, что сделки в тике прошли с минимальным разрывом. speed = sec / delta; double maxspeed_for_view = 100; // ограничение для отображения на графике if (speed > maxspeed_for_view) { speed = maxspeed_for_view; } exchangeInformation.SpeedTradesTick = speed; SpeedAvg(speed); } } else { /*здесь вариант если буду считать скорость до смены тика*/ } priceTradesPrevios = _priceTrade; }