コード例 #1
0
        protected async Task Sends()
        {
            //var servicesSelected = string.Join(',', values.Select(i => valuesName[i]));
            serviceRequestText = await TDAStreamerData.getServiceRequest(values, symbol);

            await TDAStreamerJs.InvokeAsync <string>("tdaSendRequest", serviceRequestText);
        }
コード例 #2
0
        protected async Task Logout()
        {
            string request = TDAStreamerData.getLoginRequest(isLogout: true);

            var dud = await TDAStreamerJs.InvokeAsync <string>("tdaSendRequest", request);

            StateHasChanged();
        }
コード例 #3
0
        protected void serviceRequestChanged(RadzenSplitButtonItem item)
        {
            if (item == null)
            {
                return;
            }

            serviceSelection      = item.Value;
            TDAStreamerData.chain = "102120C337,102120P337";
            serviceRequestText    = TDAStreamerData.getServiceRequestOld(serviceSelection, symbol);
            //LogText(serviceRequestText);
        }
コード例 #4
0
        private async Task TDA_Process_Data(string jsonResponse)
        {
            var dataJsonSvcArray = JObject.Parse(jsonResponse)["data"];

            foreach (var svcJsonObject in dataJsonSvcArray)
            {
                var svcName = svcJsonObject["service"].ToString();
                //if (simulatorSettings!=null && simulatorSettings.isSimulated)
                svcDateTime = GetServiceTime(svcJsonObject);

                var svcJson        = svcJsonObject.ToString();
                var svcFieldedJson = svcJson;

                /// Decode
                /// Get field names corresponding to field numbers
                List <string> svcFields = TDAConstants.TDAResponseFields[svcName];
                /// Replace field numbers with field names
                for (int i = 1; i < svcFields.Count; i++)
                {
                    string sIndex = $"\"{i}\":";
                    svcFieldedJson = svcFieldedJson.Replace(sIndex, $" \"{svcFields[i]}\":");
                }

                if (TDAStreamerData.simulatorSettings != null && !TDAStreamerData.simulatorSettings.buildDatabaseDuringSimulate)
                {
                    LogText("DECODED: " + svcFieldedJson);
                }

                var svcJsonObjectDecoded = JObject.Parse(svcFieldedJson);
                //var contents = svcJsonObjectDecoded["content"].ToString();

                /// Send to connected hub
                ///
                await TDAStreamerData.captureTdaServiceData(svcFieldedJson);

                clock = TDAChart.svcDateTime.ToString(clockFormat);

                /// Send to message queue
                /// We can replay these messages later from simulator
                /// Need to NOT reswnd
                dictTopicCounts[svcName] += 1;
                if (!simulate)
                {
                    await FilesManager.SendToMessageQueue(symbol, svcName, svcDateTime, svcFieldedJson);
                }
                //await Send(svcName, svcFieldedJson);
                StateHasChanged();
            }
        }
コード例 #5
0
        private async Task RunOnClick()
        {
            try
            {
                var filsList = dirInput.GetFiles().OrderBy(f => f.LastWriteTime);
                foreach (var file in filsList)
                {
                    /// Read earliest file from the TIMESALE_EQUITY folder
                    var json = File.ReadAllText(file.FullName);

                    /// Decode the json
                    TDAStreamerData.captureTdaServiceData(json);
                    //if (file.Name.StartsWith(CONSTANTS.TIMESALE_EQUITY))
                    //    TDAStreamerData.Decode_TimeSales(CONSTANTS.TIMESALE_EQUITY, json);
                    //else if (file.Name.StartsWith(CONSTANTS.QUOTE))
                    //    await TDAStreamerData.Decode_Quote(json);

                    /// Move file to Archive
                    var archiveFolder = CONSTANTS.messageQarchiveFolder + CONSTANTS.TIMESALE_EQUITY + @"\";
                    File.Move(file.FullName, archiveFolder + file.Name);

                    /// Create the output
                    /// Save Output to Output folder file
                    /// Send output to SignalR
                    ///
                    if (TDAStreamerData.timeSales.ContainsKey("QQQ"))
                    {
                        Count = TDAStreamerData.timeSales["QQQ"].Count;
                    }

                    await Task.Yield();

                    StateHasChanged();
                }
                await Task.CompletedTask;
            }
            catch (Exception e)
            {
                snackBarIsOpen = true;
                msg            = e.ToString();
                //StateHasChanged();
            }
        }
コード例 #6
0
        void ResetArchive()
        {
            try
            {
                var destinationDirectory = CONSTANTS.messageQinputFolder + CONSTANTS.TIMESALE_EQUITY;
                var sourceDirectory      = CONSTANTS.messageQarchiveFolder + CONSTANTS.TIMESALE_EQUITY;

                Directory.Delete(destinationDirectory);
                Directory.Move(sourceDirectory, destinationDirectory);
                Directory.CreateDirectory(sourceDirectory);

                TDAStreamerData.Reset();
            }
            catch (Exception e)
            {
                snackBarIsOpen = true;
                msg            = e.ToString();
                //StateHasChanged();
            }
        }
コード例 #7
0
        public void getPrintsData()
        {
            TDAStreamerData.getPrintsData(ref printsData, seconds, isPrintsSize, symbol);
            total = printsData.Sum(t => t.Revenue).ToString("n0");

            long oneMinuteAgo = (long)(DateTime.Now.ToUniversalTime().AddSeconds(-seconds) - new DateTime(1970, 1, 1)).TotalMilliseconds;
            var  reds         = TDAStreamerData.timeSales[symbol].Where(t => t.level == 1 && t.time >= oneMinuteAgo).Sum(t => t.size)
                                + TDAStreamerData.timeSales[symbol].Where(t => t.level == 2 && t.time >= oneMinuteAgo).Sum(t => t.size);

            var greens = TDAStreamerData.timeSales[symbol].Where(t => t.level == 4 && t.time >= oneMinuteAgo).Sum(t => t.size)
                         + TDAStreamerData.timeSales[symbol].Where(t => t.level == 5 && t.time >= oneMinuteAgo).Sum(t => t.size);
            float nBids = 1;

            if (reds == 0 && greens == 0)
            {
                nBids = 0;
            }
            if (reds == 0)
            {
                reds = (1 / 11) * greens;
            }
            nBids = 100 * ((greens / reds) - 1);
            bids  = nBids.ToString("n0");

            if (nBids < -10)
            {
                badgeClass = "btn-danger btn btn-circle";
            }
            else if (nBids > 10)
            {
                badgeClass = "btn-success btn btn-circle";
            }
            else
            {
                badgeClass = " btn btn-circle";
            }

            StateHasChanged();
        }
コード例 #8
0
        public static async Task Decode(string symbol, string content)
        {
            //if (TDABookManager.lstBookEntry.Count == 0) return;
            TDAStreamerData.jSRuntime.warn(System.Reflection.MethodBase.GetCurrentMethod().Name);

            /// Get current time and sales from streamer content
            var timeAndSales = JsonSerializer.Deserialize <TimeSales_Content>(content);

            TDAChart.svcDateTime = timeAndSales.TimeDate;


            var prevTimeAndSales = timeAndSales;

            if (TDAStreamerData.timeSales.ContainsKey(symbol) && TDAStreamerData.timeSales[symbol].Count > 0)
            {
                prevTimeAndSales = TDAStreamerData.timeSales[symbol].Last();
            }


            /// Combine bid/ask with time & sales and write to database
            /// Need to match time of print and time of quote to get accuarate buys/sells
            //Debugger.Break();

            try
            {
                /// t.Key is Quote date and time, we want last quote before t&s time
                ///
                var book = TDABookManager.lstALLBookEntry.Where(be => be.time < timeAndSales.time).Last();

                //browserService._js.GroupTable(book,"book");
                //          JsConsole.JsConsole.GroupTable(jSRuntime, book, "bbok");


                timeAndSales.bid      = book.bid;
                timeAndSales.ask      = book.ask;
                timeAndSales.askSize  = book.askSize;
                timeAndSales.bidSize  = book.bidSize;
                timeAndSales.bookTime = book.time;

                var timeNow = book.time.FromUnixTime().ToLocalTime();
                if (TDAStreamerData.simulatorSettings.isSimulated != null && (bool)TDAStreamerData.simulatorSettings.isSimulated)

                {
                    //JsConsole.JsConsole.GroupTable(TDAStreamerData.jSRuntime, timeAndSales, "timeAndSales");

                    TDAStreamerData.simulatorSettings.currentSimulatedTime = TDAChart.svcDateTime.AddSeconds(1);
                    //JsConsole.JsConsole.GroupTable(TDAStreamerData.jSRuntime, TDAStreamerData.simulatorSettings.isSimulated, "TDAStreamerData.simulatorSettings.isSimulated");
                    //JsConsole.JsConsole.GroupTable(TDAStreamerData.jSRuntime, TDAStreamerData.simulatorSettings.runDate, "TDAStreamerData.simulatorSettings.runDate");
                    //JsConsole.JsConsole.GroupTable(TDAStreamerData.jSRuntime, TDAStreamerData.simulatorSettings.startTime, "TDAStreamerData.simulatorSettings.startTime");
                    //JsConsole.JsConsole.GroupTable(TDAStreamerData.jSRuntime, TDAStreamerData.simulatorSettings.endTime, "TDAStreamerData.simulatorSettings.endTime");
                    //JsConsole.JsConsole.GroupTable(TDAStreamerData.jSRuntime, TDAStreamerData.simulatorSettings.currentSimulatedTime, "TDAStreamerData.simulatorSettings.currentSimulatedTime");
                    /// replace feed time with current time so can match book entries to time and sales

                    if (!TDAStreamerData.simulatorSettings.buildDatabaseDuringSimulate)
                    {
                        long now = (long)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalMilliseconds;
                        timeAndSales.time = now;
                    }
                }

                timeAndSales.bidIncr   = timeAndSales.bid - prevTimeAndSales.bid;
                timeAndSales.askIncr   = timeAndSales.ask - prevTimeAndSales.ask;
                timeAndSales.priceIncr = timeAndSales.price - prevTimeAndSales.price;
                var bid   = timeAndSales.bid;
                var ask   = timeAndSales.ask;
                var price = timeAndSales.price;


                timeAndSales.level = bid == 0 || ask == 0 || price == 0 ? 0 :
                                     price <bid ? 1
                                            : price == bid ? 2
                 : price> bid && price < ask ?
                                     (
                    price - bid < 0.01 ? 2
                    : (ask - price < 0.01 ? 4 : 3)
                                     )
                 : price == ask ? 4
                 : price > ask ? 5
                 : 0;
            }
            catch { }

            if (!TDAStreamerData.timeSales.ContainsKey(symbol))
            {
                TDAStreamerData.timeSales.Add(symbol, new List <TimeSales_Content>());
                ///// TODO √ DB: Add Run table row and set runId static
                /////
                //if (TDAStreamerData.isNotSimulated())
                //{
                //    var runDate = TDAChart.svcDateTime;
                //    DatabaseManager.Runs_Add(symbol, runDate);
                //    /// Save the runId for this symbol
                //    ///
                //}
            }
            // Update the Chart last close value
            TDAStreamerData.timeSales[symbol].Add(timeAndSales);
            //TDAStreamerData.timeSales[symbol].Add(timeAndSales);
            /// TODO √ DB: Add to Streamed table using timeAndSales time and get streamId
            ///
            //if (TDAStreamerData.isNotSimulated())
            //{
            //    var dateTime = timeAndSales.TimeDate;
            //    DatabaseManager.Streamed_Add(symbol, dateTime);
            //}
            /// TODO √ DB: Add to Buys / Sells table
            /// 1 & 2 = Sells (sold at bid or below bid)
            /// 4 & 5 = Buys (bought at ask or above ask)
            /// 3 = 1/2 Buys and 1/2 Sells (bought or sold between bid and ask)
            ///
            if (TDAStreamerData.isNotSimulated())
            {
                switch (timeAndSales.level)
                {
                case 1:
                case 2:
                    var size = (int)timeAndSales.size;
                    DatabaseManager.Sells_Add(timeAndSales, size);
                    break;

                case 3:
                    var sizeBoth = (int)timeAndSales.size / 2;
                    DatabaseManager.Sells_Add(timeAndSales, sizeBoth);
                    DatabaseManager.Buys_Add(timeAndSales, sizeBoth);
                    break;

                case 4:
                case 5:
                    var sizeBuy = (int)timeAndSales.size;
                    DatabaseManager.Buys_Add(timeAndSales, sizeBuy);
                    break;
                }
            }
            // string json = JsonSerializer.Serialize<TimeSales_Content>(timeAndSales);
            //await FilesManager.SendToMessageQueue("TimeSales", timeAndSales.TimeDate, json);

            //int value=0;
            //foreach (var seconds in CONSTANTS.printSeconds)
            //{
            //    if (dictPies.ContainsKey(seconds.ToString()))
            //    {
            //        var slices = dictPies[seconds.ToString()];

            //        var reds = slices[0].Revenue + slices[2].Revenue;
            //        var greens = slices[3].Revenue + slices[4].Revenue;

            //        var it = reds > greens ? -1
            //                : greens > reds ? 1
            //                : 0;
            //        value += it;
            //    }
            //    gaugeValues.Add(DateTime.Now, value);
            //}

            await Task.CompletedTask;
        }