Ejemplo n.º 1
0
        void addRunInfoTab(SystemRunInfo info, ItemsControl charts)
        {
            var parametersGrid = new QDataTableGrid();

            charts.Items.Add(new DockableContent {
                Title = title("RunInfo"), Content = parametersGrid
            });
            var parametersTable = new QDataTable {
                { "name", typeof(string) },
                { "value", typeof(string) }
            };
            Action <string, string> addRow = (name, value) => {
                var row = parametersTable.NewRow();
                row["name"]  = name;
                row["value"] = value;
                parametersTable.add(row);
            };

            Objects.each(info.parameters, name => addRow(name, info.parameters.get <string>(name)));
            addRow("", "");
            addRow("start date", Objects.ymdHuman(info.startDate, ""));
            addRow("end date", Objects.ymdHuman(info.endDate, ""));
            addRow("slippage calculator", info.slippageCalculatorName);
            addRow("run in native currency", info.runInNativeCurrency + "");
            parametersGrid.populateFromDataTable(parametersTable);
        }
Ejemplo n.º 2
0
        public CloudSTOPanel()
        {
            var panel = new QDockPanel();

            Content      = panel;
            Loaded      += initialize;
            instanceGrid = new QDataTableGrid(loadInstanceRow, unloadInstanceRow);
            var controls = new QDockPanel();

            systemIdBox = new QComboBox("-1", resetInstanceId, true)
            {
                MinWidth = 80, IsTextSearchEnabled = true, IsSynchronizedWithCurrentItem = false
            };
            controls.add(systemIdBox, Dock.Left);
            var grid = new QGrid();

            grid.addColumns(4);
            instancesLabel = label("");
            grid.add(instancesLabel, 0);
            redGreenLabel = label("");
            grid.add(redGreenLabel, 1);
            summaryLabel = label("");
            grid.add(summaryLabel, 2);
            completionTimeLabel = label("");
            grid.add(completionTimeLabel, 3);
            controls.add(grid, Dock.Left);
            controls.add(new QButton("Refresh System Ids", refreshSystemIds), Dock.Left);
            panel.add(controls, Dock.Top);
            panel.add(instanceGrid, Dock.Top);
            LogC.info("starting cloud STO tracker");
            tracker = new CloudSTOTracker(this);
        }
Ejemplo n.º 3
0
        void addMetricsTab(Simulator results, ItemsControl charts)
        {
            var grid = new QDataTableGrid();

            charts.Items.Add(new DockableContent {
                Title = title("Metrics"), Content = grid
            });
            grid.populateFromDataTable(results.metrics().table());
            grid.AutoGeneratedColumns += rightJustifyColumns;
        }
Ejemplo n.º 4
0
        public WatcherPanel()
        {
            watcher = new LiveWatcher(this);
            var panel = new QDockPanel();

            grid    = new QDataTableGrid(loadRow, row => {});
            Content = panel;
            panel.add(filterPanel(), Dock.Top);
            panel.add(grid);
            Loaded += (s, e) => initialize();
        }
Ejemplo n.º 5
0
        public PositionsPanel()
        {
            var panel = new QDockPanel();

            Content      = panel;
            positionGrid = new QDataTableGrid(loadPositionRow, unloadPositionRow);
            panel.add(positionGrid);
            LogC.info("starting position tracker");
            positionTracker = new PositionTracker(this,
                                                  new QTopic("Redi.Positions.00182087-T.*", PositionTracker.DEFAULT_RECONCILIATION_BROKER, true),
                                                  new QTopic("Aim.Positions.QMF.*", PositionTracker.DEFAULT_RECONCILIATION_BROKER, true)
                                                  );
            Loaded += (sender, args) => positionTracker.initialize();
        }
Ejemplo n.º 6
0
        public StatusPanel()
        {
            var panel = downPanel();

            Content    = panel;
            Loaded    += initialize;
            statusGrid = new QDataTableGrid(loadStatusRow, unloadStatusRow);
            var systemStatus = new DockableContent {
                Name = "Status", Title = "System Status", Content = statusGrid
            };

            panel.Children.Add(systemStatus);
            LogC.info("starting status tracker");
            statusTracker = new StatusTracker(this, StatusTracker.allLiveSystems());
        }
Ejemplo n.º 7
0
        void addTradesTab(Simulator simulator, ItemsControl charts, IEnumerable <Trade> trades)
        {
            var dataGrid = new QDataTableGrid();
            var table    = new QDataTable {
                { "symbol", typeof(string) },
                { "time", typeof(DateTime) },
                { "description", typeof(string) },
                { "direction", typeof(string) },
                { "size", typeof(int) },
                { "price", typeof(double) },
                { "details", typeof(string) },
                { "fxRate", typeof(double) }
            };
            var panel = new QDockPanel();

            charts.Items.Add(new DockableContent {
                Title = title("Trades"), Content = panel
            });
            var controlGrid = new QGrid();

            controlGrid.addColumns(2);
            controlGrid.add(withLabel("S_ymbol", new QComboBox("ALL", selected => table.filter("symbol", selected), markets())), 0);
            controlGrid.add(withLabel("_Direction", new QComboBox("ALL", selected => table.filter("direction", selected), Objects.list("buy", "sell"))), 1);
            panel.add(controlGrid, Dock.Top);
            panel.add(dataGrid, Dock.Bottom);
            Converter <Trade, DataRow> newTradeRow = trade => {
                var row = table.NewRow();
                row["symbol"]      = trade.order().symbol.name;
                row["time"]        = trade.time;
                row["description"] = trade.description;
                row["direction"]   = trade.direction.longShort("buy", "sell");
                row["size"]        = trade.size;
                row["price"]       = trade.price;
                row["details"]     = "        " + trade.order().details;
                row["fxRate"]      = trade.fxRate;
                return(row);
            };

            Objects.each(Objects.reverse(trades), trade => table.add(newTradeRow(trade)));
            dataGrid.populateFromDataTable(table);
            dataGrid.AutoGeneratedColumns += rightJustifyColumns;
            simulator.addNewTradeListener((position, trade) => runOnGuiThread(() => table.addAtStart(newTradeRow(trade))));
        }
Ejemplo n.º 8
0
        public OrdersPanel()
        {
            var panel = new QDockPanel();

            Content = panel;
            Loaded += initialize;

            systemBox = new QComboBox(onSystemSelected);
            pvBox     = new QComboBox(onPvSelected);
            marketBox = new QComboBox(onMarketSelected);
            filterBox = new QComboBox("ALL", onFilterSelected, O.list("Not Ferret", "Ferret"));
            panel.add(comboBoxPanel(), Dock.Top);
            panel.add(new FerretPanel(), Dock.Bottom);
            orderGrid = new QDataTableGrid(loadOrderRow, unloadOrderRow);
            panel.add(orderGrid);

            LogC.info("starting order tracker");
            orderTracker = new OrderTracker(this);
        }
Ejemplo n.º 9
0
        void addChart(Researcher researcher, Collectible collectible, ItemsControl charts)
        {
            var simulator = researcher.simulator;
            var bars      = collectible.barsMaybe();

            if (bars == null)
            {
                return;
            }
            var chartAdded = false;

            runOnGuiThread(() => {
                var chart = new BarSpudGraph(bars, collectible, this);
                Objects.each(researcher.plots.get(collectible), chart.add);
                chart.add(Objects.accept(researcher.positions, collectible.collects), Objects.accept(researcher.trades, collectible.collects), simulator);
                chart.addEquity(simulator);
                chart.moveBarsToBack();
                chart.resetYAxis();
                var symbolPane = new DockablePane();
                charts.Items.Add(new DockableContent {
                    Title = title(collectible.name), Content = symbolPane
                });
                symbolPane.Items.Add(new DockableContent {
                    Title = title(collectible.name + " Plots"), Content = new WindowsFormsHost {
                        Child = chart
                    }
                });
                var dataGrid  = new QDataTableGrid();
                var dataTable = chart.makeDataTable();
                dataGrid.populateFromDataTable(dataTable);
                symbolPane.Items.Add(new DockableContent {
                    Title = title(collectible.name + " Data"), Content = dataGrid
                });
                chartAdded = true;
            });
            Objects.wait(400, 50, () => chartAdded);
        }
Ejemplo n.º 10
0
        void addPositionsTab(Researcher researcher, ItemsControl charts)
        {
            var simulator     = researcher.simulator;
            var positionsPane = new DockablePane();
            var dataGrid      = new QDataTableGrid();
            var table         = new QDataTable("symbol", "entryTime", "exitTime", "direction")
            {
                { "initialSize", typeof(int) },
                { "pnl", typeof(double) },
                { "barsHeld", typeof(int) },
                { "numTrades", typeof(int) },
                { "positionHIDDEN", typeof(Position) }
            };
            var panel = new QDockPanel();

            positionsPane.Items.Add(new DockableContent {
                Title = title("Position List"), Content = panel
            });
            charts.Items.Add(new DockableContent {
                Title = title("Positions"), Content = positionsPane
            });
            var controlGrid = new QGrid();

            controlGrid.addColumns(3);
            controlGrid.add(withLabel("S_ymbol", new QComboBox("ALL", selected => table.filter("symbol", selected), markets())), 0);
            controlGrid.add(withLabel("_Direction", new QComboBox("ALL", selected => table.filter("direction", selected), Objects.list("long", "short"))), 1);
            controlGrid.add(withLabel("_P&L", new QComboBox("ALL", selected => table.filter <double>("pnl", value => pnlMatchesSelection(selected, value)), Objects.list("winning", "losing"))), 2);
            panel.add(controlGrid, Dock.Top);
            panel.add(dataGrid, Dock.Bottom);

            Action <DataRow, Position> updateRow = (row, position) => {
                row["symbol"]         = position.symbol.name;
                row["entryTime"]      = Objects.ymdHuman(position.entry().time);
                row["exitTime"]       = position.isClosed() ? Objects.ymdHuman(position.exitTrade().time) : "Open";
                row["direction"]      = position.entry().direction.ToString();
                row["initialSize"]    = position.entry().size;
                row["pnl"]            = position.isClosed() ? position.pnl(true, simulator.runInNativeCurrency()) : simulator.pnlForPosition(position);
                row["barsHeld"]       = position.barsHeld();
                row["numTrades"]      = position.trades().Count;
                row["positionHIDDEN"] = position;
            };
            Converter <Position, DataRow> newRow = position => {
                var row = table.NewRow();
                updateRow(row, position);
                return(row);
            };

            Objects.each(Objects.reverse(researcher.positions), position => table.add(newRow(position)));
            dataGrid.populateFromDataTable(table);
            dataGrid.AutoGeneratedColumns += rightJustifyColumns;
            simulator.addNewTradeListener((position, trade) => runOnGuiThread(() => {
                if (position.isEntry(trade))
                {
                    table.addAtStart(newRow(position));
                }
                else
                {
                    updateRow(table.firstRow("positionHIDDEN", position), position);
                }
            }));
            addFilteredHistogram(positionsPane, table, "Average P&L (Bar To End)", new TradePathHistogramControl(researcher, true, true));
            addFilteredHistogram(positionsPane, table, "Cumulative P&L (Bar To End)", new TradePathHistogramControl(researcher, false, true));
            addFilteredHistogram(positionsPane, table, "Average P&L (Start To Bar)", new TradePathHistogramControl(researcher, true, false));
            addFilteredHistogram(positionsPane, table, "Cumulative P&L (Start To Bar)", new TradePathHistogramControl(researcher, false, false));
            addFilteredHistogram(positionsPane, table, "Pnl Distribution", new PositionHistogramControl(researcher, position => position.pnl(true, researcher.simulator.runInNativeCurrency())));
            addFilteredHistogram(positionsPane, table, "Entry Size Distribution", new PositionHistogramControl(researcher, position => Objects.first(position.trades()).size));
            addFilteredHistogram(positionsPane, table, "Bars Held Distribution", new PositionHistogramControl(researcher, position => position.barsHeld()));
        }