using System; using System.Collections.Generic; using System.Text; using com.lim.mimapi; using MimException = com.lim.mimapi.MimException; /** * Example of how to use the queryExecute() function to run arbitrary * MIM queries. */ namespace DEMO_MIMAPI { class queryExecute { public void execute(String host, Int32 port, String query) { MimConnection mim = null; double value = 0; String value_str = "NaN"; try { mim = ConnectionFactory.connect(host, port, "QueryExecute"); // Create the connection to the MIM QueryResult rslt = mim.getDataManager().queryExecute(query); // Executing the MIM query // Loop over the reports for (int i = 0; i < rslt.reports.Length; i++) { QueryReport report = rslt.reports[i]; if (report != null) { if (report.blocks != null) { // Loop over the blocks for (int j = 0; j < report.blocks.Length; j++) { QueryReportBlock block = report.blocks[j]; if (block != null) { Console.Out.Write("Date\t"); for (int k = 0; k < block.getColumnHeadings().Length; k++) { Console.Out.Write("\t" + block.getColumnHeadings()[k]); } Console.Out.WriteLine(); int index = 0; // Loop over the dates for (int k = 0; k < block.getRowDates().Length; k++) { MimTime[] times = block.getRowTimes(); MimTime time = null; if (times != null) { time = block.getRowTimes()[k]; } Console.Out.Write(block.getRowDates()[k].ToString() + (time != null && time.isValid() ? ", " + time.ToString() : "")); // Loop over the columns for (int h = 0; h < block.getColumnHeadings().Length; h++) { value_str = "NaN"; value = block.getValues()[index]; if (!Double.IsNaN(value)) { value_str = Math.Round(value, 4).ToString(); } Console.Out.Write("\t" + value_str); index++; } Console.Out.WriteLine(); } // Display the statistics Console.Out.WriteLine(); QuerySummary summary = block.getSummaryReport(); if (summary.summaryBlocks != null) { for (int k = 0; k < summary.summaryBlocks.Length; k++) { QuerySummaryBlock summaryBlock = summary.summaryBlocks[k]; if (summaryBlock != null) { Console.Out.WriteLine(block.getColumnHeadings()[k] + " Column:"); Console.Out.WriteLine( "Average: \t\t" + Math.Round(summaryBlock.average, 4).ToString()); Console.Out.WriteLine( "Average Negative: \t" + Math.Round(summaryBlock.averageNegative, 4).ToString()); Console.Out.WriteLine( "Average Positive: \t" + Math.Round(summaryBlock.averagePositive, 4).ToString()); Console.Out.WriteLine( "Highest: \t\t" + Math.Round(summaryBlock.highest, 4).ToString()); Console.Out.WriteLine( "Lowest: \t\t" + Math.Round(summaryBlock.lowest, 4).ToString()); Console.Out.WriteLine( "Percent Negative: \t" + Math.Round(summaryBlock.percentNegative, 4).ToString()); Console.Out.WriteLine( "Percent Positive: \t" + Math.Round(summaryBlock.percentPositive, 4).ToString()); Console.Out.WriteLine( "Standard Deviation: \t" + Math.Round(summaryBlock.standardDeviation, 4).ToString()); Console.Out.WriteLine( "Sum: \t\t\t" + Math.Round(summaryBlock.sum, 4).ToString()); Console.Out.WriteLine( "Variance: \t\t" + Math.Round(summaryBlock.variance, 4).ToString()); Console.Out.WriteLine( "Z-Stat: \t\t" + Math.Round(summaryBlock.zstat, 4).ToString()); Console.Out.WriteLine(); } } } } } } } if (report.plReport != null) { if (report.plReport.tradeRecords != null) { for (int j = 0; j < report.plReport.tradeRecords.Length; j++) { Console.Out.WriteLine( "Cum Profit: " + report.plReport.tradeRecords[j].cumProfit); Console.Out.WriteLine( "Entry Price: " + report.plReport.tradeRecords[j].entryPrice); Console.Out.WriteLine( "Entry Reason Label: " + report.plReport.tradeRecords[j].entryReasonLabel); Console.Out.WriteLine( "Exit Price: " + report.plReport.tradeRecords[j].exitPrice); Console.Out.WriteLine( "Exit Reason Label: " + report.plReport.tradeRecords[j].exitReasonLabel); Console.Out.WriteLine( "Move: " + report.plReport.tradeRecords[j].move); Console.Out.WriteLine( "Num Contracts: " + report.plReport.tradeRecords[j].numContracts); Console.Out.WriteLine( "Percent Move: " + report.plReport.tradeRecords[j].percentMove); Console.Out.WriteLine( "Profit: " + report.plReport.tradeRecords[j].profit); Console.Out.WriteLine( "Entry Date: " + report.plReport.tradeRecords[j].entryDate); Console.Out.WriteLine( "Entry Reason: " + report.plReport.tradeRecords[j].entryReason.ToString()); Console.Out.WriteLine( "Entry Time: " + report.plReport.tradeRecords[j].entryTime); Console.Out.WriteLine( "Exit Date: " + report.plReport.tradeRecords[j].exitDate); Console.Out.WriteLine( "Exit Reason: " + report.plReport.tradeRecords[j].exitReason); Console.Out.WriteLine( "Exit Time: " + report.plReport.tradeRecords[j].exitTime); Console.Out.WriteLine( "Type: " + report.plReport.tradeRecords[j].type.ToString()); } } } if (report.plReport.statRecords != null) { for (int j = 0; j < report.plReport.statRecords.Length; j++) { Console.Out.WriteLine( report.plReport.statRecords[j].combinedValue + " " + report.plReport.statRecords[j].label + " " + report.plReport.statRecords[j].longValue + " " + report.plReport.statRecords[j].shortValue + " " + report.plReport.statRecords[j].combinedDate + " " + report.plReport.statRecords[j].combinedTime + " " + report.plReport.statRecords[j].longDate + " " + report.plReport.statRecords[j].longTime + " " + report.plReport.statRecords[j].shortDate + " " + report.plReport.statRecords[j].shortTime); } } if (report.plReport.equityRecords != null) { for (int j = 0; j < report.plReport.equityRecords.Length; j++) { Console.Out.WriteLine( "Close: " + report.plReport.equityRecords[j].close); Console.Out.WriteLine( "Combined: " + report.plReport.equityRecords[j].combined); Console.Out.WriteLine( "Open: " + report.plReport.equityRecords[j].open); Console.Out.WriteLine( "Date: " + report.plReport.equityRecords[j].date); Console.Out.WriteLine( "Time: " + report.plReport.equityRecords[j].time); } } } } catch (Exception e) { Console.Out.WriteLine("Exception: " + e.Message); } finally { try { if (mim != null) { mim.disconnect(); } } catch (Exception e) { Console.Out.WriteLine("Exception: " + e.Message); } } } } }