[Quantproject-developers] QuantProject/b4_Business/a1_Financial/a2_Accounting/h5_Reporting/Tables
Brought to you by:
glauco_1
|
From: Marco M. <mi...@us...> - 2009-03-29 18:15:56
|
Update of /cvsroot/quantproject/QuantProject/b4_Business/a1_Financial/a2_Accounting/h5_Reporting/Tables In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv1812/b4_Business/a1_Financial/a2_Accounting/h5_Reporting/Tables Modified Files: RoundTrades.cs Log Message: The table RoundTrades in report has been fixed. Old reports are still deserializable. Index: RoundTrades.cs =================================================================== RCS file: /cvsroot/quantproject/QuantProject/b4_Business/a1_Financial/a2_Accounting/h5_Reporting/Tables/RoundTrades.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RoundTrades.cs 15 Feb 2005 19:09:05 -0000 1.2 --- RoundTrades.cs 29 Mar 2009 18:15:50 -0000 1.3 *************** *** 12,20 **** { private ReportTable transactionTable; ! public RoundTrades( string reportName , ReportTable transactionTable ) : base( reportName + " - Round Trades" ) { this.transactionTable = transactionTable; this.DataTable = this.getRoundTrades(); } --- 12,33 ---- { private ReportTable transactionTable; ! private string fieldNameForTicker; ! private string fieldNameForDateTime; ! private string fieldNameForTransactionType; ! ! private void setFieldNames() ! { ! this.fieldNameForTicker = ! QuantProject.Business.Financial.Accounting.Reporting.Tables.Transactions.FieldNameForTicker; ! this.fieldNameForDateTime = ! QuantProject.Business.Financial.Accounting.Reporting.Tables.Transactions.FieldNameForDateTime; ! this.fieldNameForTransactionType = ! QuantProject.Business.Financial.Accounting.Reporting.Tables.Transactions.FieldNameForTransactionType; ! } public RoundTrades( string reportName , ReportTable transactionTable ) : base( reportName + " - Round Trades" ) { this.transactionTable = transactionTable; + this.setFieldNames(); this.DataTable = this.getRoundTrades(); } *************** *** 22,26 **** --- 35,41 ---- private void getRoundTradeTable_setColumns( DataTable roundTradeDataTable ) { + roundTradeDataTable.Columns.Add( fieldNameForTicker , Type.GetType( "System.String" ) ); roundTradeDataTable.Columns.Add( "Trade" , Type.GetType( "System.String" ) ); + roundTradeDataTable.Columns.Add( "Quantity" , Type.GetType( "System.Int32" ) ); roundTradeDataTable.Columns.Add( "EntryDate" , Type.GetType( "System.DateTime" ) ); roundTradeDataTable.Columns.Add( "EntryPrice" , Type.GetType( "System.Double" ) ); *************** *** 30,88 **** roundTradeDataTable.Columns.Add( "Profit" , Type.GetType( "System.Double" ) ); roundTradeDataTable.Columns.Add( "%Profit" , Type.GetType( "System.Double" ) ); ! roundTradeDataTable.Columns.Add( "#bars" , Type.GetType( "System.Int32" ) ); ! roundTradeDataTable.Columns.Add( "ProfitPerBar" , Type.GetType( "System.Double" ) ); //roundTradeDataTable.Columns.Add( "AccountValue" , Type.GetType( "System.Double" ) ); //roundTradeDataTable.Columns.Add( "PnL" , Type.GetType( "System.Double" ) ); } ! private void getRoundTradeTable_setRow( DataRow dataRow , DataTable roundTradeDataTable ) { ! DataRow roundTrade; ! switch ( (string)dataRow[ "TransactionType" ] ) ! { ! case "BuyLong": ! roundTrade = roundTradeDataTable.NewRow(); ! roundTrade[ "Trade" ] = "Long"; ! roundTrade[ "EntryDate" ] = dataRow[ "DateTime" ]; ! roundTrade[ "EntryPrice" ] = dataRow[ "Price" ]; ! roundTradeDataTable.Rows.Add( roundTrade ); ! break; ! case "Sell": ! roundTrade = roundTradeDataTable.Rows[ roundTradeDataTable.Rows.Count - 1 ]; ! roundTrade[ "ExitDate" ] = dataRow[ "DateTime" ]; ! roundTrade[ "ExitPrice" ] = dataRow[ "Price" ]; ! roundTrade[ "%chg" ] = ! ((double)roundTrade[ "ExitPrice" ] - (double)roundTrade[ "EntryPrice" ])/ ! ((double)roundTrade[ "EntryPrice" ])*100; ! roundTrade[ "%Profit" ] = roundTrade[ "%chg" ]; ! roundTrade[ "#bars" ] = ! ((TimeSpan)((DateTime)roundTrade[ "ExitDate" ] - (DateTime)roundTrade[ "EntryDate" ])).Days; ! roundTrade[ "ProfitPerBar" ] = (double)roundTrade[ "%chg" ] / (int)roundTrade[ "#bars" ]; ! break; ! case "SellShort": ! roundTrade = roundTradeDataTable.NewRow(); ! roundTrade[ "Trade" ] = "Short"; ! roundTrade[ "EntryDate" ] = dataRow[ "DateTime" ]; ! roundTrade[ "EntryPrice" ] = dataRow[ "Price" ]; ! roundTradeDataTable.Rows.Add( roundTrade ); ! break; ! case "Cover": ! roundTrade = roundTradeDataTable.Rows[ roundTradeDataTable.Rows.Count - 1 ]; ! roundTrade[ "ExitDate" ] = dataRow[ "DateTime" ]; ! roundTrade[ "ExitPrice" ] = dataRow[ "Price" ]; ! roundTrade[ "%chg" ] = ! ((double)roundTrade[ "ExitPrice" ] - (double)roundTrade[ "EntryPrice" ])/ ! ((double)roundTrade[ "EntryPrice" ])*100; ! roundTrade[ "%Profit" ] = - ((double)roundTrade[ "%chg" ]); ! roundTrade[ "#bars" ] = ! ((TimeSpan)((DateTime)roundTrade[ "ExitDate" ] - (DateTime)roundTrade[ "EntryDate" ])).Days; ! roundTrade[ "ProfitPerBar" ] = (double)roundTrade[ "%chg" ] / (int)roundTrade[ "#bars" ]; ! break; ! } ! } private void getRoundTradeTable_setRows( DataTable roundTradeDataTable ) { ! foreach (DataRow dataRow in this.transactionTable.DataTable.Rows ) ! getRoundTradeTable_setRow( dataRow , roundTradeDataTable ); } private DataTable getRoundTrades() --- 45,114 ---- roundTradeDataTable.Columns.Add( "Profit" , Type.GetType( "System.Double" ) ); roundTradeDataTable.Columns.Add( "%Profit" , Type.GetType( "System.Double" ) ); ! roundTradeDataTable.Columns.Add( "#minutes" , Type.GetType( "System.Int32" ) ); ! roundTradeDataTable.Columns.Add( "ProfitPerMinute" , Type.GetType( "System.Double" ) ); //roundTradeDataTable.Columns.Add( "AccountValue" , Type.GetType( "System.Double" ) ); //roundTradeDataTable.Columns.Add( "PnL" , Type.GetType( "System.Double" ) ); } ! private void getRoundTradeTable_addRow( int rowIndex, DataRow dataRow , DataTable roundTradeDataTable ) { ! DateTime startDateTimeOfTrade = (DateTime)dataRow[fieldNameForDateTime]; ! DateTime endDateTimeOfTrade = new DateTime(1900,1,1); ! string currentTicker = (string)dataRow[fieldNameForTicker]; ! string currentTradeType = (string)dataRow[fieldNameForTransactionType]; ! double signForRoundTradeProfit = 1.0; ! if(currentTradeType == "SellShort") ! signForRoundTradeProfit = -1.0; ! double entryPrice = (double)dataRow["Price"]; ! double exitPrice = 0.0; ! int instrumentQuantity = (int)dataRow["Quantity"]; ! for (int j = rowIndex + 1; j < this.transactionTable.DataTable.Rows.Count ; j++) ! { ! if( currentTicker == (string)this.transactionTable.DataTable.Rows[ j ][fieldNameForTicker] && ! ((currentTradeType == "BuyLong" && ! (string)this.transactionTable.DataTable.Rows[ j ][fieldNameForTransactionType] == "Sell") ! || ! (currentTradeType == "SellShort" && ! (string)this.transactionTable.DataTable.Rows[ j ][fieldNameForTransactionType] == "Cover") ! ) ) ! { ! endDateTimeOfTrade = ! (DateTime)this.transactionTable.DataTable.Rows[ j ][fieldNameForDateTime]; ! exitPrice = (double)this.transactionTable.DataTable.Rows[ j ]["Price"]; ! j = this.transactionTable.DataTable.Rows.Count; ! } ! } ! TimeSpan timeSpanBetweenEnterAndExit = ! endDateTimeOfTrade.Subtract(startDateTimeOfTrade); ! DataRow roundTrade = roundTradeDataTable.NewRow(); ! roundTrade[ fieldNameForTicker ] = currentTicker; ! roundTrade[ "Trade" ] = currentTradeType; ! roundTrade[ "Quantity" ] = instrumentQuantity; ! roundTrade[ "EntryDate" ] = startDateTimeOfTrade; ! roundTrade[ "ExitDate" ] = endDateTimeOfTrade; ! roundTrade[ "EntryPrice" ] = entryPrice; ! roundTrade[ "ExitPrice" ] = exitPrice; ! roundTrade[ "%chg" ] = (exitPrice - entryPrice)/entryPrice * 100.0; ! roundTrade[ "%Profit" ] = signForRoundTradeProfit * (double)roundTrade[ "%chg" ]; ! roundTrade[ "Profit" ] = signForRoundTradeProfit * instrumentQuantity * (exitPrice - entryPrice); ! roundTrade[ "#minutes" ] = timeSpanBetweenEnterAndExit.TotalMinutes; ! roundTrade[ "ProfitPerMinute" ] = (double)roundTrade[ "%Profit" ] / (int)roundTrade[ "#minutes" ]; ! roundTradeDataTable.Rows.Add(roundTrade); } + private bool doesCurrentRowIndexPointToABuyLongOrASellShort( int rowIndex ) + { + bool returnValue; + string currentTransactionType = + (string)this.transactionTable.DataTable.Rows[ rowIndex ][fieldNameForTransactionType]; + returnValue = + ( currentTransactionType == "BuyLong" || currentTransactionType == "SellShort" ); + return returnValue; + } private void getRoundTradeTable_setRows( DataTable roundTradeDataTable ) { ! for(int rowIndex = 0; rowIndex < this.transactionTable.DataTable.Rows.Count; rowIndex++ ) ! if( this.doesCurrentRowIndexPointToABuyLongOrASellShort( rowIndex ) ) ! getRoundTradeTable_addRow( rowIndex, ! transactionTable.DataTable.Rows[rowIndex], ! roundTradeDataTable ); } private DataTable getRoundTrades() *************** *** 94,98 **** } #endregion - } } --- 120,123 ---- |