[Quantproject-developers] QuantProject/b3_Data/Selectors SelectorByCloseToCloseLinearCorrelation.cs
Brought to you by:
glauco_1
|
From: Marco M. <mi...@us...> - 2008-01-14 23:18:50
|
Update of /cvsroot/quantproject/QuantProject/b3_Data/Selectors In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv12311/b3_Data/Selectors Modified Files: SelectorByCloseToCloseLinearCorrelation.cs Log Message: Minor changes to a class the will be deleted soon (correlations should be treated in business project) Index: SelectorByCloseToCloseLinearCorrelation.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b3_Data/Selectors/SelectorByCloseToCloseLinearCorrelation.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** SelectorByCloseToCloseLinearCorrelation.cs 28 Dec 2005 23:27:56 -0000 1.2 --- SelectorByCloseToCloseLinearCorrelation.cs 14 Jan 2008 23:18:47 -0000 1.3 *************** *** 25,28 **** --- 25,30 ---- using System.Data; using System.Windows.Forms; + + using QuantProject.ADT.Statistics; using QuantProject.DataAccess.Tables; using QuantProject.Data.DataTables; *************** *** 35,39 **** public class SelectorByCloseToCloseLinearCorrelation : TickerSelector , ITickerSelector { - public SelectorByCloseToCloseLinearCorrelation(DataTable setOfTickersToBeSelected, --- 37,40 ---- *************** *** 48,58 **** maxNumOfReturnedTickers) { ! } ! public SelectorByCloseToCloseLinearCorrelation(string groupID, bool orderInASCmode, DateTime firstQuoteDate, DateTime lastQuoteDate, ! long maxNumOfReturnedTickers): base(groupID, orderInASCmode, --- 49,59 ---- maxNumOfReturnedTickers) { ! } ! public SelectorByCloseToCloseLinearCorrelation(string groupID, bool orderInASCmode, DateTime firstQuoteDate, DateTime lastQuoteDate, ! long maxNumOfReturnedTickers): base(groupID, orderInASCmode, *************** *** 60,66 **** lastQuoteDate, maxNumOfReturnedTickers) ! { ! ! } --- 61,67 ---- lastQuoteDate, maxNumOfReturnedTickers) ! { ! ! } *************** *** 68,77 **** { if(this.setOfTickersToBeSelected == null) ! return QuantProject.Data.DataTables.Quotes.GetTickersByAdjCloseToClosePearsonCorrelationCoefficient(this.isOrderedInASCMode, this.groupID, this.firstQuoteDate, this.lastQuoteDate); else ! return QuantProject.Data.DataTables.Quotes.GetTickersByAdjCloseToClosePearsonCorrelationCoefficient(this.isOrderedInASCMode, this.setOfTickersToBeSelected, this.firstQuoteDate, --- 69,78 ---- { if(this.setOfTickersToBeSelected == null) ! return this.getTickersByAdjCloseToClosePearsonCorrelationCoefficient(this.isOrderedInASCMode, this.groupID, this.firstQuoteDate, this.lastQuoteDate); else ! return this.getTickersByAdjCloseToClosePearsonCorrelationCoefficient(this.isOrderedInASCMode, this.setOfTickersToBeSelected, this.firstQuoteDate, *************** *** 79,82 **** --- 80,170 ---- } + private void getTickersByAdjCloseToClosePearsonCorrelationCoefficient_setTickersAdjCloses(out float[][] + tickersReturns, DataTable setOfTickers, DateTime firstQuoteDate, DateTime lastQuoteDate) + + { + tickersReturns = new float[setOfTickers.Rows.Count][]; + for(int i = 0; i<setOfTickers.Rows.Count; i++) + { + DataTable tickerQuoteTable = + QuantProject.DataAccess.Tables.Quotes.GetTickerQuotes((string)setOfTickers.Rows[i][0], + firstQuoteDate, + lastQuoteDate); + tickersReturns[i] = + ExtendedDataTable.GetArrayOfFloatFromColumn(tickerQuoteTable,"quAdjustedClose"); + + } + } + + /// <summary> + /// Returns a table containing the Pearson correlation coefficient for the adjusted close values + /// for any possible couple of tickers contained in the given table, for the specified interval + /// </summary> + private DataTable getTickersByAdjCloseToClosePearsonCorrelationCoefficient( bool orderByASC, + DataTable setOfTickers, + DateTime firstQuoteDate, + DateTime lastQuoteDate) + + { + if(!setOfTickers.Columns.Contains("CorrelatedTicker")) + setOfTickers.Columns.Add("CorrelatedTicker", System.Type.GetType("System.String")); + if(!setOfTickers.Columns.Contains("PearsonCorrelationCoefficient")) + setOfTickers.Columns.Add("PearsonCorrelationCoefficient", System.Type.GetType("System.Double")); + int initialNumberOfRows = setOfTickers.Rows.Count; + float[][] tickersAdjCloses; + getTickersByAdjCloseToClosePearsonCorrelationCoefficient_setTickersAdjCloses(out tickersAdjCloses, setOfTickers, firstQuoteDate, lastQuoteDate); + for(int j=0; j!= initialNumberOfRows; j++) + { + string firstTicker = (string)setOfTickers.Rows[j][0]; + for(int i = j+1; i!= initialNumberOfRows; i++) + { + string secondTicker = (string)setOfTickers.Rows[i][0]; + DataRow rowToAdd = setOfTickers.NewRow(); + rowToAdd[0] = firstTicker; + rowToAdd["PearsonCorrelationCoefficient"] = -2.0; + //unassigned value for this column + rowToAdd["CorrelatedTicker"] = secondTicker; + try + { + rowToAdd["PearsonCorrelationCoefficient"] = + QuantProject.ADT.Statistics.BasicFunctions.PearsonCorrelationCoefficient( + tickersAdjCloses[j],tickersAdjCloses[i]); + } + catch(Exception ex) + { + ex = ex; + } + finally + { + setOfTickers.Rows.Add(rowToAdd); + } + } + } + ExtendedDataTable.DeleteRows(setOfTickers, 0, initialNumberOfRows - 1); + //delete initial rows that don't contain correlated ticker and Pearson coeff. + return ExtendedDataTable.CopyAndSort(setOfTickers,"PearsonCorrelationCoefficient>-2.0", + "PearsonCorrelationCoefficient", orderByASC); + } + + /// <summary> + /// Returns a table containing the Pearson correlation coefficient for the adjusted close values + /// for any possible couple of tickers contained in the given group of tickers, + /// for the specified interval + /// </summary> + private DataTable getTickersByAdjCloseToClosePearsonCorrelationCoefficient( bool orderByASC, + string groupID, + DateTime firstQuoteDate, + DateTime lastQuoteDate) + + { + + DataTable tickersOfGroup = + new QuantProject.Data.DataTables.Tickers_tickerGroups(groupID); + return this.getTickersByAdjCloseToClosePearsonCorrelationCoefficient(orderByASC, + tickersOfGroup, + firstQuoteDate, + lastQuoteDate); + } + public void SelectAllTickers() |