Files
Sean eee0418271
Some checks failed
Build .NET Project / build (push) Has been cancelled
Create GLPriceCache to be used by GainLoss Generator.
2026-02-26 10:23:08 -05:00

112 lines
5.0 KiB
C#
Executable File

using System;
using System.Linq;
using System.Collections.Generic;
using MarketData;
using MarketData.MarketDataModel;
using MarketData.MarketDataModel.GainLoss;
using MarketData.Utils;
using MarketData.DataAccess;
using MarketData.Cache;
namespace MarketData.Generator.GainLoss
{
public class GainLossHelper
{
private GainLossHelper()
{
}
public static double? GetTotalGainLoss(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
if(portfolioTrade.IsOpen||(portfolioTrade.IsClosed&&portfolioTrade.SellDate>holdingDate))
{
Price price=GLPriceCache.GetInstance().GetPrice(portfolioTrade.Symbol,holdingDate);
if(null==price)
{
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("No price for {0} on {1}",portfolioTrade.Symbol,Utility.DateTimeToStringMMHDDHYYYY(holdingDate)));
return null;
}
return (price.Close*portfolioTrade.Shares)-(portfolioTrade.Shares*portfolioTrade.Price);
}
return (portfolioTrade.SellPrice*portfolioTrade.Shares)-(portfolioTrade.Price*portfolioTrade.Shares);
}
public static double? GetTotalMarketValue(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
if(portfolioTrade.IsOpen||(portfolioTrade.IsClosed&&portfolioTrade.SellDate>holdingDate))
{
Price price=GLPriceCache.GetInstance().GetPrice(portfolioTrade.Symbol,holdingDate);
if(null==price)
{
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("No price for {0} on {1}",portfolioTrade.Symbol,Utility.DateTimeToStringMMHDDHYYYY(holdingDate)));
return null;
}
return (price.Close*portfolioTrade.Shares);
}
return (portfolioTrade.SellPrice*portfolioTrade.Shares);
}
public static double? GetTotalExposure(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
return portfolioTrade.Shares*portfolioTrade.Price;
}
public static double? GetTotalCostBasis(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
return portfolioTrade.Price*portfolioTrade.Shares;
}
public static double? GetGainLoss(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
if(!portfolioTrade.SellDate.Equals(Utility.Epoch)&&holdingDate>portfolioTrade.SellDate) return null;
// check to see if we sold this on holdingDate
if(!portfolioTrade.SellDate.Equals(Utility.Epoch)&&holdingDate.Equals(portfolioTrade.SellDate))
{
return (portfolioTrade.SellPrice*portfolioTrade.Shares)-(portfolioTrade.Price*portfolioTrade.Shares);
}
// check to see if we bought and sold on the same date.
if(portfolioTrade.SellDate.Equals(portfolioTrade.TradeDate))
{
return (portfolioTrade.SellPrice*portfolioTrade.Shares)-(portfolioTrade.Price*portfolioTrade.Shares);
}
Price price=GLPriceCache.GetInstance().GetPrice(portfolioTrade.Symbol,holdingDate);
if(null==price)
{
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("No price for {0} on {1}",portfolioTrade.Symbol,Utility.DateTimeToStringMMHDDHYYYY(holdingDate)));
return null;
}
return (price.Close*portfolioTrade.Shares)-(portfolioTrade.Shares*portfolioTrade.Price);
}
public static double? GetMarketValue(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
if(!portfolioTrade.SellDate.Equals(Utility.Epoch)&&holdingDate>portfolioTrade.SellDate) return null;
// check to see if we bought and sold on the same date.
if(portfolioTrade.SellDate.Equals(portfolioTrade.TradeDate)) return (portfolioTrade.SellPrice*portfolioTrade.Shares);
Price price=GLPriceCache.GetInstance().GetPrice(portfolioTrade.Symbol,holdingDate);
if(null==price)
{
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("No price for {0} on {1}",portfolioTrade.Symbol,Utility.DateTimeToStringMMHDDHYYYY(holdingDate)));
return null;
}
return portfolioTrade.Shares*price.Close;
}
public static double? GetCostBasis(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
if(!portfolioTrade.SellDate.Equals(Utility.Epoch)&&holdingDate>portfolioTrade.SellDate) return null;
return portfolioTrade.Price*portfolioTrade.Shares;
}
public static double? GetExposure(DateTime holdingDate,PortfolioTrade portfolioTrade)
{
if(holdingDate<portfolioTrade.TradeDate) return null;
if(!portfolioTrade.SellDate.Equals(Utility.Epoch)&&holdingDate>portfolioTrade.SellDate) return null;
return portfolioTrade.Shares*portfolioTrade.Price;
}
}
}