Exemple #1
0
        public static void TryBuildPayload()
        {
            if (IsSubscribed)
            {
                Current++;
                if (Current >= Frequency)
                {
                    Current = 0;
                    lock (LockObj)
                    {
                        Dictionary <string, string> items = new Dictionary <string, string>();

                        if (Global.State.AlgoTraderSubscriptions["main"] == true)
                        {
                            AlgoTraderMain main = new AlgoTraderMain();
                            main.CurrentTime          = AlgoTraderState.CurrentTime.ToString();
                            main.SelectedSymbol       = SelectedSymbol;
                            main.SelectedStrategyName = AlgoTraderMethods.GetStrategyName(SelectedStrategyId);
                            main.SelectedStrategyId   = SelectedStrategyId;

                            using (var output = new StringWriter())
                            {
                                JSON.Serialize(main, output, Options.PrettyPrint);
                                items.Add("algoTraderMain", output.ToString());
                            }
                        }


                        if (Global.State.AlgoTraderSubscriptions["log"] == true)
                        {
                            UIObjects.AlgoTraderLog log = new UIObjects.AlgoTraderLog();
                            log.Log = Global.State.AlgoTrader.TC.Log.Read(Verbosity.Verbose);
                            //log.Log = System.Web.HttpUtility.JavaScriptStringEncode(Global.State.AlgoTrader.TC.Log.Read(Verbosity.Verbose));

                            using (var output = new StringWriter())
                            {
                                JSON.Serialize(log, output, Options.PrettyPrint);
                                items.Add("algoTraderLog", output.ToString());
                            }
                        }

                        if (Global.State.AlgoTraderSubscriptions["overview"] == true)
                        {
                            AlgoTraderOverview overview = buildOverviewObject();

                            using (var output = new StringWriter())
                            {
                                JSON.Serialize(overview, output, Options.PrettyPrint);
                                items.Add("algoTraderOverview", output.ToString());
                            }
                        }

                        if (Global.State.AlgoTraderSubscriptions["chart"] == true)
                        {
                            AlgoTraderChart chart = buildChartObject();

                            using (var output = new StringWriter())
                            {
                                JSON.Serialize(chart, output, Options.Default);
                                items.Add("algoTraderChart", output.ToString());
                            }
                        }


                        Payload = SerializerMethods.DictionarySerializedValuesToJSON(items);
                    }
                }
            }
        }
Exemple #2
0
        public static AlgoTraderChart buildChartObject()
        {
            AlgoTraderChart result = new AlgoTraderChart();

            if (
                AlgoTraderShared.NodesData == null ||
                !AlgoTraderShared.NodesData.ContainsKey(SelectedSymbol) ||
                AlgoTraderShared.NodesData[SelectedSymbol] == null ||
                AlgoTraderShared.NodesData[SelectedSymbol].Nodes == null ||
                AlgoTraderShared.NodesData[SelectedSymbol].Nodes.Count == 0 ||
                AlgoTraderShared.NodesData[SelectedSymbol].Nodes.Count < (GraphCanvasWidth) + 500
                )
            {
                return(result);
            }

            int lastNodeIndex  = AlgoTraderShared.NodesData[SelectedSymbol].Nodes.Count - 1;
            int startNodeIndex = (lastNodeIndex - (GraphCanvasWidth)) + 1;

            decimal midPrice = AlgoTraderShared.NodesData[SelectedSymbol].Nodes[lastNodeIndex].TradePrice;
            decimal askPrice = AlgoTraderShared.NodesData[SelectedSymbol].Nodes[lastNodeIndex].AskPrice;
            decimal bidPrice = AlgoTraderShared.NodesData[SelectedSymbol].Nodes[lastNodeIndex].BidPrice;

            result.CurrentTradePrice = UC.DecimalToUSD(midPrice, 2);
            result.CurrentAskPrice   = UC.DecimalToUSD(askPrice, 2);
            result.CurrentBidPrice   = UC.DecimalToUSD(bidPrice, 2);

            //decimal highPrice = midPrice + 0.20M;
            //decimal lowPrice = midPrice - 0.20M;

            decimal highPrice = midPrice + 0.8M;
            decimal lowPrice  = midPrice - 0.8M;

            decimal priceSpan = highPrice - lowPrice;

            // high price plot is 0
            // low price plot is GraphCanvasHeight


            result.Data.Add(new List <AlgoTraderChartPoint>()); // tradeprice
            result.Data.Add(new List <AlgoTraderChartPoint>()); // ask price
            result.Data.Add(new List <AlgoTraderChartPoint>()); // bid price

            //int count = 0;

            decimal askPriceYAvgLast   = 0M;
            decimal bidPriceYAvgLast   = 0M;
            decimal tradePriceYAvgLast = 0M;

            for (int n = startNodeIndex; n <= lastNodeIndex; n += 1)
            {
                decimal askPriceYAvg   = 0M;
                decimal bidPriceYAvg   = 0M;
                decimal tradePriceYAvg = 0M;

                int count = 0;

                bool askEstimated   = false;
                bool bidEstimated   = false;
                bool tradeEstimated = false;

                for (int m = 0; m < 1; m++)
                {
                    if (n + m < AlgoTraderShared.NodesData[SelectedSymbol].Nodes.Count)
                    {
                        Node node = AlgoTraderShared.NodesData[SelectedSymbol].Nodes[n + m];

                        if (node.AskPriceEstimated)
                        {
                            askEstimated = true;
                        }

                        if (node.BidPriceEstimated)
                        {
                            bidEstimated = true;
                        }
                        if (node.TradePriceEstimated)
                        {
                            tradeEstimated = true;
                        }

                        askPriceYAvg   += ((highPrice - node.AskPrice) / priceSpan) * GraphCanvasHeight;
                        bidPriceYAvg   += ((highPrice - node.BidPrice) / priceSpan) * GraphCanvasHeight;
                        tradePriceYAvg += ((highPrice - node.TradePrice) / priceSpan) * GraphCanvasHeight;
                        count++;
                    }
                }


                askPriceYAvg   = askPriceYAvg / count;
                bidPriceYAvg   = bidPriceYAvg / count;
                tradePriceYAvg = tradePriceYAvg / count;


                AlgoTraderChartPoint ask_atcp   = new AlgoTraderChartPoint();
                AlgoTraderChartPoint bid_atcp   = new AlgoTraderChartPoint();
                AlgoTraderChartPoint trade_atcp = new AlgoTraderChartPoint();

                ask_atcp.Y   = askPriceYAvg;
                bid_atcp.Y   = bidPriceYAvg;
                trade_atcp.Y = tradePriceYAvg;


                if (askPriceYAvg < askPriceYAvgLast)
                {
                    ask_atcp.R = 1D;
                    ask_atcp.G = 0D;
                    ask_atcp.B = 0D;
                }
                else if (askPriceYAvg > askPriceYAvgLast)
                {
                    ask_atcp.R = 1D;
                    ask_atcp.G = 0D;
                    ask_atcp.B = 0D;
                }
                else
                {
                    ask_atcp.R = 1D;
                    ask_atcp.G = 0D;
                    ask_atcp.B = 0D;
                }
                if (askEstimated)
                {
                    //ask_atcp.R = 0.4D;
                    ask_atcp.A = 0.15D;
                }
                else
                {
                    ask_atcp.A = 1D;
                }



                if (bidPriceYAvg < bidPriceYAvgLast)
                {
                    bid_atcp.R = 0D;
                    bid_atcp.G = 0D;
                    bid_atcp.B = 1D;
                }
                else if (bidPriceYAvg > bidPriceYAvgLast)
                {
                    bid_atcp.R = 0D;
                    bid_atcp.G = 0D;
                    bid_atcp.B = 1D;
                }
                else
                {
                    bid_atcp.R = 0D;
                    bid_atcp.G = 0D;
                    bid_atcp.B = 1D;
                }
                if (bidEstimated)
                {
                    //bid_atcp.B = 0.4D;
                    bid_atcp.A = 0.15D;
                }
                else
                {
                    bid_atcp.A = 1D;
                }



                if (tradePriceYAvg < tradePriceYAvgLast)
                {
                    trade_atcp.R = 0D;
                    trade_atcp.G = 1D;
                    trade_atcp.B = 0D;
                }
                else if (tradePriceYAvg > tradePriceYAvgLast)
                {
                    trade_atcp.R = 0D;
                    trade_atcp.G = 1D;
                    trade_atcp.B = 0D;
                }
                else
                {
                    trade_atcp.R = 0D;
                    trade_atcp.G = 1D;
                    trade_atcp.B = 0D;
                }
                if (tradeEstimated)
                {
                    //bid_atcp.G = 0.4D;
                    trade_atcp.A = 0.15D;
                }
                else
                {
                    trade_atcp.A = 1D;
                }



                askPriceYAvgLast   = askPriceYAvg;
                bidPriceYAvgLast   = bidPriceYAvg;
                tradePriceYAvgLast = tradePriceYAvg;


                result.Data[0].Add(trade_atcp);
                result.Data[1].Add(ask_atcp);
                result.Data[2].Add(bid_atcp);
            }


            return(result);
            //long lastEndNano = AlgoTraderShared.NodesData[SelectedSymbol].Nodes[lastNodeIndex].EndNano;

            //long chartTimeSpan = AlgoTraderShared.NodesData[SelectedSymbol].GetNodesWithNanos
        }