コード例 #1
0
        private static List <CandleDataPacked> GetMinuteCandlesUnpacked(string symbol,
                                                                        DateTime start, DateTime end)
        {
            var tickerCode = DalSpot.Instance.GetFXICodeBySymbol(symbol);

            if (tickerCode == 0)
            {
                Logger.ErrorFormat("Ошибка в GetMinuteCandlesUnpacked: инструмент не определен: {0}", symbol);
                return(null);
            }

            var values  = new object[3];
            var candles = new List <CandleDataPacked>();

            try
            {
                using (var connection = new SqlConnection(connectionString))
                {
                    var commandSql = string.Format("SELECT date, [open], HLC FROM QUOTE " +
                                                   "WHERE ticker={0} AND date BETWEEN '{1:yyMMdd HH:mm}' " +
                                                   "AND '{2:yyMMdd HH:mm}'", tickerCode, start, end);
                    var command = new SqlCommand(commandSql)
                    {
                        Connection = connection
                    };
                    connection.Open();
                    using (var reader = command.ExecuteReader())
                    {
                        CandleDataPacked previousCandle = null;
                        while (reader.Read())
                        {
                            if (reader.GetValues(values) != values.Length)
                            {
                                continue;
                            }
                            var candle = new CandleDataPacked
                            {
                                timeOpen = (DateTime)values[0],
                                open     = (float)(double)values[1],
                                HLC      = (int)values[2]
                            };
                            candle.close = candle.open; // default
                            if (previousCandle != null)
                            {
                                previousCandle.close = candle.open;
                            }
                            previousCandle = candle;
                            candles.Add(candle);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("Ошибка в GetMinuteCandlesUnpacked({0}, {1:dd.MM.yyyy HH:mm}, " +
                                   "{2:dd.MM.yyyy HH:mm}) : {3}", symbol, start, end, ex);
                return(null);
            }
            return(candles);
        }
コード例 #2
0
ファイル: CandleData.cs プロジェクト: rafysanchez/TradeSharp
 public CandleData(CandleDataPacked spec, int pointCost)
 {
     open      = spec.open;
     timeOpen  = spec.timeOpen;
     timeClose = spec.timeOpen.AddMinutes(1);
     close     = spec.close;
     MakeHlcFromOffset16(spec.HLC, pointCost);
 }
コード例 #3
0
        /// <summary>
        /// Вызывает хранимую процедуру 'GetLastQuote' или 'FindQuote'
        /// </summary>
        public QuoteData GetQuoteStoredProc(string ticker, DateTime?start = null)
        {
            if (string.IsNullOrEmpty(ticker))
            {
                return(null);
            }

            SqlConnection conn     = null;
            SqlDataReader rdr      = null;
            var           tickerId = DalSpot.Instance.GetFXICodeBySymbol(ticker);
            var           date     = default(DateTime);
            var           open     = -1f;
            var           lhc      = -1;

            try
            {
                var connectionString = ConfigurationManager.ConnectionStrings["QuoteBase"].ConnectionString;
                conn = new SqlConnection(connectionString);
                conn.Open();

                var procName = start.HasValue ? "FindQuote" : "GetLastQuote";

                var cmd = new SqlCommand(procName, conn)
                {
                    CommandType = CommandType.StoredProcedure
                };
                cmd.Parameters.Add(new SqlParameter("@ticker", tickerId));
                if (start.HasValue)
                {
                    cmd.Parameters.Add(new SqlParameter("@date", start.Value));
                }

                rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    if (!int.TryParse(rdr["ticker"].ToString(), out tickerId))
                    {
                        return(null);
                    }
                    if (!DateTime.TryParse(rdr["date"].ToString(), out date))
                    {
                        return(null);
                    }
                    if (!float.TryParse(rdr["open"].ToString(), out open))
                    {
                        return(null);
                    }
                    if (!int.TryParse(rdr["HLC"].ToString(), out lhc))
                    {
                        return(null);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка в методе GetQuoteStoredProc", ex);
                return(null);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
                if (rdr != null)
                {
                    rdr.Close();
                }
            }

            var candelDataPacked = new CandleDataPacked
            {
                HLC      = lhc,
                open     = open,
                timeOpen = date,
                close    = open // default
            };
            var candleData = new CandleData(candelDataPacked, DalSpot.Instance.GetPrecision10(ticker));
            var useOpen    = start.HasValue && date == start.Value;

            return(GetQuoteWithDefaultSpread(candleData, ticker, useOpen));
        }