Ejemplo n.º 1
0
        public void ToDataTable_Should_Ignore_Incompatible_Types_If_Specified()
        {
            var list  = new List <DataTableItem>();
            var item1 = new DataTableItem("1");

            list.Add(item1);

            var dataTable = list.ToDataTable(IncompatibleDataColumnTypeHandling.Ignore);

            dataTable.Columns.Contains("IncompatibleValue").Should().BeFalse();
        }
Ejemplo n.º 2
0
        public void ToDataTable_Should_Use_AsString_On_Incompatible_Types_If_Specified()
        {
            var list  = new List <DataTableItem>();
            var item1 = new DataTableItem("1");

            list.Add(item1);

            var dataTable = list.ToDataTable(IncompatibleDataColumnTypeHandling.AsString);

            dataTable.Rows[0]["IncompatibleValue"].Should().Be(DBNull.Value);
        }
Ejemplo n.º 3
0
        public void ToDataTable_Overload_Should_Use_ToString_On_Incompatible_Types()
        {
            var list  = new List <DataTableItem>();
            var item1 = new DataTableItem("1");

            list.Add(item1);

            var dataTable = list.ToDataTable(CultureInfo.CurrentCulture);

            dataTable.Rows[0]["IncompatibleValue"].Should().Be("ToStringWasUsed");
        }
Ejemplo n.º 4
0
        public void ToDataTable_Should_Use_ToString_On_Incompatible_Types_By_Default()
        {
            var list  = new List <DataTableItem>();
            var item1 = new DataTableItem("1");

            list.Add(item1);

            var dataTable = list.ToDataTable();

            dataTable.Rows[0]["IncompatibleValue"].Should().Be("ToStringWasUsed");
        }
Ejemplo n.º 5
0
        public void ToDataTable_Should_Try_To_Convert_Incompatible_Types_ToString()
        {
            var list  = new List <DataTableItem>();
            var item1 = new DataTableItem("1");

            list.Add(item1);

            var dataTable = list.ToDataTable();

            dataTable.Rows[0]["FormattableValue"].Should().Be("IsFormattable");
        }
Ejemplo n.º 6
0
        public void ToDataTable_Should_Return_Equivalent_DataTable()
        {
            var list  = new List <DataTableItem>();
            var item1 = new DataTableItem("1");

            list.Add(item1);
            list.Add(new DataTableItem("2"));

            var dataTable = list.ToDataTable();

            dataTable.Rows.Count.Should().Be(2);
            dataTable.Rows[0]["Id"].Should().Be("1");
            dataTable.Rows[1]["Id"].Should().Be("2");

            dataTable.Rows[0]["StringValue"].Should().Be(item1.StringValue);
            dataTable.Rows[0]["NullString"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["BoolValue"].Should().Be(item1.BoolValue);
            dataTable.Rows[0]["NullBool"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["ByteValue"].Should().Be(item1.ByteValue);
            dataTable.Rows[0]["NullByte"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["CharValue"].Should().Be(item1.CharValue);
            dataTable.Rows[0]["NullChar"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["DateTimeValue"].Should().Be(item1.DateTimeValue);
            dataTable.Rows[0]["NullDateTime"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["DecimalValue"].Should().Be(item1.DecimalValue);
            dataTable.Rows[0]["NullDecimal"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["DoubleValue"].Should().Be(item1.DoubleValue);
            dataTable.Rows[0]["NullDouble"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["GuidValue"].Should().Be(item1.GuidValue);
            dataTable.Rows[0]["NullGuid"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["ShortValue"].Should().Be(item1.ShortValue);
            dataTable.Rows[0]["NullShort"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["IntValue"].Should().Be(item1.IntValue);
            dataTable.Rows[0]["NullInt"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["LongValue"].Should().Be(item1.LongValue);
            dataTable.Rows[0]["NullLong"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["SByteValue"].Should().Be(item1.SByteValue);
            dataTable.Rows[0]["NullSByte"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["FloatValue"].Should().Be(item1.FloatValue);
            dataTable.Rows[0]["NullFloat"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["TimeSpanValue"].Should().Be(item1.TimeSpanValue);
            dataTable.Rows[0]["NullTimeSpan"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["UShortValue"].Should().Be(item1.UShortValue);
            dataTable.Rows[0]["NullUShort"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["UIntValue"].Should().Be(item1.UIntValue);
            dataTable.Rows[0]["NullUInt"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["ULongValue"].Should().Be(item1.ULongValue);
            dataTable.Rows[0]["NullULong"].Should().Be(DBNull.Value);
            (dataTable.Rows[0]["ByteArrayValue"] as byte[])[0].Should().Be(item1.ByteArrayValue[0]);
            dataTable.Rows[0]["NullByteArray"].Should().Be(DBNull.Value);
            dataTable.Rows[0]["NullableIntNotNull"].Should().Be(item1.NullableIntNotNull);
        }
Ejemplo n.º 7
0
        public static AlgoTraderOverview buildOverviewObject()
        {
            AlgoTraderOverview result = new AlgoTraderOverview();


            /* ###################### SYMBOLS ###################### */

            AlgoTraderDataTable symbolsDataTable = new AlgoTraderDataTable();

            symbolsDataTable.Name = "overview-symbols";

            if (String.IsNullOrEmpty(SelectedSymbol))
            {
                symbolsDataTable.HideColumn = (!String.IsNullOrEmpty(SelectedStrategyId) ? 1 : -1);
                symbolsDataTable.Show       = true;
                symbolsDataTable.Title      = "Symbols (" + AlgoTraderShared.WatchList.Count.ToString() + ")";

                StringBuilder sb = new StringBuilder();

                // name, strategies, positions, orders, actions, realized, unrealized

                List <DataTableItem> dataTableItems = new List <DataTableItem>();
                for (int n = 0; n < AlgoTraderShared.WatchList.Count; n++)
                {
                    WatchItem wi = AlgoTraderShared.WatchList[n];

                    string symbol = wi.Symbol;

                    DataTableItem dataTableItem = new DataTableItem();

                    dataTableItem.ColumnValues.Add("symbol", wi.Symbol);
                    dataTableItem.ColumnValues.Add("strategies", wi.Strategies.Count);



                    //dataTableItem.Name = wi.Symbol;
                    //dataTableItem.SubItems = wi.Strategies.Count;

                    dataTableItem.ColumnValues.Add("orders", AlgoTraderShared.Orders.FindAll(o => o.Symbol == symbol).Count);
                    dataTableItem.ColumnValues.Add("actions", AlgoTraderShared.StrategyActions.FindAll(a => a.Symbol == symbol).Count);

                    List <Position> positions = AlgoTraderShared.Positions.FindAll(p => p.Symbol == symbol);

                    dataTableItem.ColumnValues.Add("positions", positions.Count);

                    // do realized
                    List <Position> closedPositions = positions.FindAll(p => p.Status == PositionStatus.Closed);
                    decimal         netRealized     = 0M;
                    for (int m = 0; m < closedPositions.Count; m++)
                    {
                        netRealized += closedPositions[m].SoldAt - closedPositions[m].BoughtAt;
                    }
                    dataTableItem.ColumnValues.Add("realized", netRealized);

                    // do unrealized
                    List <Position> openPositions  = positions.FindAll(p => p.Status == PositionStatus.Open);
                    decimal         latestAskPrice = -1M;
                    decimal         latestBidPrice = -1M;
                    if (openPositions.Count > 0)
                    {
                        List <Node> nodes = AlgoTraderShared.NodesData[symbol].Nodes;
                        latestAskPrice = nodes[nodes.Count - 1].AskPrice;
                        latestBidPrice = nodes[nodes.Count - 1].BidPrice;
                    }
                    decimal netUnrealized = 0M;


                    for (int m = 0; m < openPositions.Count; m++)
                    {
                        Position p         = openPositions[m];
                        decimal  sellPrice = 0M;
                        decimal  buyPrice  = 0M;

                        if (p.Side == PositionSide.Long)
                        {
                            // if long, find the sell price by getting the latest bid price
                            sellPrice = latestBidPrice;
                            buyPrice  = p.BoughtAt;
                        }
                        else if (p.Side == PositionSide.Short)
                        {
                            // if short, find the buy price by getting the latest ask price
                            buyPrice  = latestAskPrice;
                            sellPrice = p.SoldAt;
                        }
                        else
                        {
                            throw new Exception("a what?");
                        }
                        netUnrealized += sellPrice - buyPrice;
                    }
                    dataTableItem.ColumnValues.Add("unrealized", netUnrealized);

                    dataTableItems.Add(dataTableItem);
                }


                TrySortDataTable(ref dataTableItems, "overview-symbols", "symbol");

                // // name, strategies, positions, orders, actions, realized, unrealized
                // <tr><td></td><td class=\"sub-items-col\"></td><td></td><td></td><td></td><td></td><td></td></tr>
                for (int n = 0; n < dataTableItems.Count; n++)
                {
                    sb.Append("<tr>");
                    sb.Append("<td>" + dataTableItems[n].ColumnValues["symbol"] + "</td>");
                    sb.Append("<td class=\"sub-items-col\">" + dataTableItems[n].ColumnValues["strategies"] + "</td>");
                    sb.Append("<td>" + dataTableItems[n].ColumnValues["positions"] + "</td>");
                    sb.Append("<td>" + dataTableItems[n].ColumnValues["orders"] + "</td>");
                    sb.Append("<td>" + dataTableItems[n].ColumnValues["actions"] + "</td>");
                    sb.Append("<td data-sort-value=\"" + dataTableItems[n].ColumnValues["realized"] + "\">" + UC.DecimalToUSD((decimal)dataTableItems[n].ColumnValues["realized"], 4) + "</td>");
                    sb.Append("<td data-sort-value=\"" + dataTableItems[n].ColumnValues["unrealized"] + "\">" + UC.DecimalToUSD((decimal)dataTableItems[n].ColumnValues["unrealized"], 4) + "</td>");
                    sb.Append("</tr>");
                }

                symbolsDataTable.TBodyHtml = sb.ToString();
            }

            result.DataTables.Add(symbolsDataTable);

            /* ###################### STRATEGIES ###################### */

            AlgoTraderDataTable strategiesDataTable = new AlgoTraderDataTable();

            strategiesDataTable.Name = "overview-strategies";

            if (String.IsNullOrEmpty(SelectedStrategyId))
            {
                strategiesDataTable.HideColumn = (!String.IsNullOrEmpty(SelectedSymbol) ? 1 : -1);
                strategiesDataTable.Show       = true;

                string[] usableStrategiesKeys = Global.State.UsableStrategies.Keys.ToArray();

                strategiesDataTable.Title = "Strategies (" + usableStrategiesKeys.Length.ToString() + ")";

                StringBuilder sb = new StringBuilder();

                // name, strategies, positions, orders, actions, realized, unrealized

                List <DataTableItem> dataTableItems = new List <DataTableItem>();
                if (AlgoTraderShared.WatchList.Count > 0)
                {
                    for (int n = 0; n < usableStrategiesKeys.Length; n++)
                    {
                        string strategy = Global.State.UsableStrategies[usableStrategiesKeys[n]];

                        DataTableItem dataTableItem = new DataTableItem();

                        dataTableItem.ColumnValues.Add("strategy", strategy);

                        // probably super inefficient
                        dataTableItem.ColumnValues.Add("symbols", AlgoTraderShared.WatchList.Count(w => w.Strategies.Exists(s => s.GetType().Name == strategy)));



                        //dataTableItem.Name = wi.Symbol;
                        //dataTableItem.SubItems = wi.Strategies.Count;

                        dataTableItem.ColumnValues.Add("orders", AlgoTraderShared.Orders.FindAll(o => o.StrategyName == strategy && (String.IsNullOrEmpty(SelectedSymbol) || o.Symbol == SelectedSymbol)).Count);
                        dataTableItem.ColumnValues.Add("actions", AlgoTraderShared.StrategyActions.FindAll(a => a.StrategyName == strategy && (String.IsNullOrEmpty(SelectedSymbol) || a.Symbol == SelectedSymbol)).Count);

                        List <Position> positions = AlgoTraderShared.Positions.FindAll(p => p.StrategyName == strategy && (String.IsNullOrEmpty(SelectedSymbol) || p.Symbol == SelectedSymbol));

                        dataTableItem.ColumnValues.Add("positions", positions.Count);

                        // do realized
                        List <Position> closedPositions = positions.FindAll(p => p.Status == PositionStatus.Closed);
                        decimal         netRealized     = 0M;
                        for (int m = 0; m < closedPositions.Count; m++)
                        {
                            netRealized += closedPositions[m].SoldAt - closedPositions[m].BoughtAt;
                        }
                        dataTableItem.ColumnValues.Add("realized", netRealized);

                        // do unrealized
                        List <Position> openPositions = positions.FindAll(p => p.Status == PositionStatus.Open);

                        decimal netUnrealized = 0M;


                        for (int m = 0; m < openPositions.Count; m++)
                        {
                            Position p         = openPositions[m];
                            decimal  sellPrice = 0M;
                            decimal  buyPrice  = 0M;

                            List <Node> nodes = AlgoTraderShared.NodesData[p.Symbol].Nodes;

                            if (p.Side == PositionSide.Long)
                            {
                                // if long, find the sell price by getting the latest bid price
                                sellPrice = nodes[nodes.Count - 1].BidPrice;
                                buyPrice  = p.BoughtAt;
                            }
                            else if (p.Side == PositionSide.Short)
                            {
                                // if short, find the buy price by getting the latest ask price
                                buyPrice  = nodes[nodes.Count - 1].AskPrice;
                                sellPrice = p.SoldAt;
                            }
                            else
                            {
                                throw new Exception("a what?");
                            }
                            netUnrealized += sellPrice - buyPrice;
                        }
                        dataTableItem.ColumnValues.Add("unrealized", netUnrealized);

                        dataTableItems.Add(dataTableItem);
                    }
                }
                TrySortDataTable(ref dataTableItems, "overview-strategies", "strategy");

                for (int n = 0; n < dataTableItems.Count; n++)
                {
                    sb.Append("<tr>");
                    sb.Append("<td style=\"text-align:left;\">" + dataTableItems[n].ColumnValues["strategy"] + "</td>");
                    sb.Append("<td class=\"sub-items-col\">" + dataTableItems[n].ColumnValues["symbols"] + "</td>");
                    sb.Append("<td>" + dataTableItems[n].ColumnValues["positions"] + "</td>");
                    sb.Append("<td>" + dataTableItems[n].ColumnValues["orders"] + "</td>");
                    sb.Append("<td>" + dataTableItems[n].ColumnValues["actions"] + "</td>");
                    sb.Append("<td data-sort-value=\"" + dataTableItems[n].ColumnValues["realized"] + "\">" + UC.DecimalToUSD((decimal)dataTableItems[n].ColumnValues["realized"], 4) + "</td>");
                    sb.Append("<td data-sort-value=\"" + dataTableItems[n].ColumnValues["unrealized"] + "\">" + UC.DecimalToUSD((decimal)dataTableItems[n].ColumnValues["unrealized"], 4) + "</td>");
                    sb.Append("</tr>");
                }

                strategiesDataTable.TBodyHtml = sb.ToString();
            }

            result.DataTables.Add(strategiesDataTable);

            return(result);
        }