Exemplo n.º 1
0
Arquivo: QDMS.cs Projeto: zino974/QPAS
        public List <OHLCBar> GetData(EntityModel.Instrument instrument, DateTime from, DateTime to, BarSize frequency = BarSize.OneDay)
        {
            if (!_client.Connected)
            {
                return(null);
            }

            RefreshInstrumentsList();

            var qdmsInst = instrument.GetQDMSInstrument(_instrumentsList);

            if (qdmsInst == null) //nothing like this in QDMS, just grab local data
            {
                return(null);
            }
            StoredDataInfo dataInfo = TryGetStorageInfo(qdmsInst);

            //Here we check if there's is absolutely no
            if ((dataInfo == null || dataInfo.LatestDate < from || dataInfo.EarliestDate > to) &&
                !_allowFreshData)
            {
                return(null);
            }

            //grab the data
            return(RequestData(qdmsInst, from, to, frequency));
        }
Exemplo n.º 2
0
Arquivo: QDMS.cs Projeto: zino974/QPAS
        public List <OHLCBar> GetAllData(EntityModel.Instrument instrument, BarSize frequency = BarSize.OneDay)
        {
            if (!_client.Connected)
            {
                return(new List <OHLCBar>());
            }

            RefreshInstrumentsList();

            //find instrument
            var qdmsInst = instrument.GetQDMSInstrument(_instrumentsList);

            if (qdmsInst == null) //nothing like this in QDMS, just grab local data
            {
                return(new List <OHLCBar>());
            }

            StoredDataInfo dataInfo = TryGetStorageInfo(qdmsInst);

            if (dataInfo == null)
            {
                return(new List <OHLCBar>());
            }

            return(GetData(
                       instrument,
                       dataInfo.EarliestDate,
                       dataInfo.LatestDate,
                       frequency));
        }
Exemplo n.º 3
0
Arquivo: QDMS.cs Projeto: zino974/QPAS
        public decimal?GetLastPrice(EntityModel.Instrument instrument, out DateTime lastDate)
        {
            lastDate = new DateTime(1, 1, 1);

            var qdmsInst = instrument.GetQDMSInstrument(_instrumentsList);

            if (qdmsInst == null || !qdmsInst.ID.HasValue)
            {
                return(null);
            }

            StoredDataInfo dataInfo = TryGetStorageInfo(qdmsInst);

            if (dataInfo == null)
            {
                return(null);
            }

            var lastAvailableDate = dataInfo.LatestDate;

            //Send out the request for the data
            var req = new HistoricalDataRequest
            {
                Instrument        = qdmsInst,
                StartingDate      = lastAvailableDate.AddDays(-1),
                EndingDate        = lastAvailableDate,
                Frequency         = BarSize.OneDay,
                DataLocation      = _allowFreshData ? DataLocation.Both : DataLocation.LocalOnly,
                RTHOnly           = true,
                SaveDataToStorage = false
            };
            var id = _client.RequestHistoricalData(req);

            _requestIDs.Add(id, false);


            //Wait until the data arrives
            int i = 0;

            while (i < 100)
            {
                Thread.Sleep(20);
                lock (_arrivedDataLock)
                {
                    if (_requestIDs[id])
                    {
                        var data = _arrivedData[qdmsInst.ID.Value].Last();
                        _arrivedData.Remove(qdmsInst.ID.Value);
                        lastDate = data.DT;
                        return(data.Close);
                    }
                }
                i++;
            }

            return(null);
        }
Exemplo n.º 4
0
Arquivo: QDMS.cs Projeto: zino974/QPAS
        /// <summary>
        /// Retrieve a list of sessions that describe the regular trading hours for this instrument.
        /// </summary>
        public List <InstrumentSession> GetSessions(EntityModel.Instrument instrument)
        {
            RefreshInstrumentsList();
            var qdmsInstrument = instrument.GetQDMSInstrument(_instrumentsList);

            if (qdmsInstrument == null || qdmsInstrument.Sessions == null)
            {
                _logger.Log(LogLevel.Info, string.Format("QDMS instrument not found for local instrument: {0}", instrument));
                return(new List <InstrumentSession>());
            }
            return(qdmsInstrument.Sessions.ToList());
        }
Exemplo n.º 5
0
        /// <summary>
        /// Returns the QPAS statistics for a QuantConnect Algorithm (uses Equity Curve)
        /// </summary>
        /// <param name="fromDate"></param>
        /// <param name="toDate"></param>
        /// <param name="trades"></param>
        /// <param name="totalPerformance"></param>
        /// <param name="rollingPerformances"></param>
        /// <param name="summary"></param>
        /// <param name="startingCapital"></param>
        /// <returns>QPAS Performance Statistics (JSON)</returns>
        public static string GetPerformanceQPAS(
            DateTime fromDate,
            DateTime toDate,
            List<Trade> trades,
            AlgorithmPerformance totalPerformance,
            Dictionary<string, AlgorithmPerformance> rollingPerformances,
            Dictionary<string, string> summary,
            decimal startingCapital)
        {
            if (trades.Count <= 0)
                return "";

            // Equity Curve Statistics
            var qpasEC = new QPAS.EquityCurve((double)startingCapital, totalPerformance.TradeStatistics.StartDateTime);
            foreach (var trade in trades)
                qpasEC.AddChange((double)trade.ProfitLoss, trade.ExitTime);

            var equityCurveStatsQPAS = QPAS.PerformanceMeasurement.EquityCurveStats(qpasEC, (int)(toDate - fromDate).TotalDays);

            // Trade Statistics
            var instrument = new EntityModel.Instrument { ID = 1, Multiplier = 1, AssetCategory = EntityModel.AssetClass.Cash };
            instrument.Symbol = trades[0].Symbol.Value;

            var qpasTrades = new List<EntityModel.Trade>();
            foreach (var trade in trades)
            {
                var qpasTrade = new EntityModel.Trade();
                qpasTrade.Orders = new List<EntityModel.Order>
                {
                    // Open Order
                    new EntityModel.Order {
                        Instrument = instrument,
                        Quantity = trade.Quantity,
                        Price = trade.EntryPrice,
                        BuySell = trade.BuyOrSell,
                        TradeDate = trade.EntryTime,
                        AssetCategory = EntityModel.AssetClass.Cash },
                    // Close Order
                    new EntityModel.Order {
                        Instrument = instrument,
                        Quantity = trade.Quantity,
                        Price = trade.ExitPrice,
                        BuySell = trade.BuyOrSellClose,
                        TradeDate = trade.ExitTime,
                        AssetCategory = EntityModel.AssetClass.Cash }
                };
                qpasTrade.ResultDollars = trade.ProfitLoss;
                qpasTrade.Commissions = trade.TotalFees;

                qpasTrades.Add(qpasTrade);
            }

            var capitalInPeriod = new List<decimal>();
            var capital = startingCapital;
            capitalInPeriod.Add(capital);
            foreach (var trade in trades)
            {
                capital += trade.ProfitLoss;
                capitalInPeriod.Add(capital);
            }

            var tradeStatsQPAS = QPAS.PerformanceMeasurement.TradeStats(qpasTrades, fromDate, toDate, capitalInPeriod);

            // Merge Results into a Sorted Dictionary
            var statsQPAS = new SortedDictionary<string, string>();
            foreach (KeyValuePair<string, string> entry in equityCurveStatsQPAS)
                statsQPAS.Add(entry.Key + " (Equity)", entry.Value);
            foreach (KeyValuePair<string, string> entry in tradeStatsQPAS)
                statsQPAS.Add(entry.Key + " (Trade)", entry.Value);

            // Return result as JSON
            return JsonConvert.SerializeObject(statsQPAS, Formatting.Indented);
        }