Files
marketdata/MarketDataLib/MarketDataModel/StopLimit.cs
2025-02-10 07:57:00 -05:00

110 lines
3.5 KiB
C#

using MarketData.Utils;
using System;
using System.Collections.Generic;
using System.Text;
/// <summary>
/// This StopLimit class is used for database persistence
/// </summary>
namespace MarketData.MarketDataModel
{
public class StopLimitConstants
{
public static readonly String STOP_QUOTE="Stop Quote";
}
public class StopLimits:List<StopLimit>
{
public StopLimits()
{
}
public StopLimits(List<StopLimit> stopLimits)
{
foreach(StopLimit stopLimit in stopLimits) Add(stopLimit);
}
public NVPCollections ToNVPCollections()
{
NVPCollections nvpCollections=new NVPCollections();
foreach(StopLimit stopLimit in this)
{
nvpCollections.Add(stopLimit.ToNVPCollection());
}
return nvpCollections;
}
public static StopLimits FromNVPCollections(NVPCollections nvpCollections)
{
StopLimits stopLimits=new StopLimits();
foreach(NVPCollection nvpCollection in nvpCollections)
{
stopLimits.Add(StopLimit.FromNVPCollection(nvpCollection));
}
return stopLimits;
}
public void AddFromNVPCollection(NVPCollection nvpCollection)
{
Add(StopLimit.FromNVPCollection(nvpCollection));
}
public void Add(StopLimits stopLimits)
{
foreach(StopLimit stopLimit in stopLimits)this.Add(stopLimit);
}
}
public class StopLimit
{
public String Symbol{get;set;}
public double StopPrice{get;set;}
public double Shares{get;set;}
public String StopType{get;set;}
public int Active{get;set;}
public DateTime EffectiveDate{get;set;} // if the EffectiveDate is Epoch then the StopLimit is taken to be in effect and is the most recent. Otherwise it is considered an historical stop limit
public StopLimit()
{
}
public StopLimit(String symbol,double stopPrice,int shares,String stopType,int active)
{
this.Symbol=symbol;
this.StopPrice=stopPrice;
this.Shares=shares;
this.StopType=stopType;
this.Active=active;
}
public override String ToString()
{
StringBuilder sb=new StringBuilder();
sb.Append(Symbol).Append(",");
sb.Append(Utility.FormatCurrency(StopPrice)).Append(",");
sb.Append(Utility.FormatNumber(Shares,3)).Append(",");
sb.Append(StopType).Append(",");
sb.Append(Active.ToString()).Append(",");
sb.Append(EffectiveDate.ToShortDateString());
return sb.ToString();
}
public virtual NVPCollection ToNVPCollection()
{
NVPCollection nvpCollection=new NVPCollection();
nvpCollection.Add(new NVP("Symbol",Symbol.ToString()));
nvpCollection.Add(new NVP("StopPrice",StopPrice.ToString()));
nvpCollection.Add(new NVP("Shares",Shares.ToString()));
nvpCollection.Add(new NVP("StopType",StopType.ToString()));
nvpCollection.Add(new NVP("Active",Active.ToString()));
nvpCollection.Add(new NVP("EffectiveDate",EffectiveDate.ToShortDateString()));
return nvpCollection;
}
public static StopLimit FromNVPCollection(NVPCollection nvpCollection)
{
StopLimit stopLimit=new StopLimit();
NVPDictionary nvpDictionary=nvpCollection.ToDictionary();
stopLimit.Symbol=nvpDictionary["Symbol"].Get<String>();
stopLimit.StopPrice=nvpDictionary["StopPrice"].Get<double>();
stopLimit.Shares=nvpDictionary["Shares"].Get<double>();
stopLimit.StopType=nvpDictionary["StopType"].Get<String>();
stopLimit.EffectiveDate=nvpDictionary["EffectiveDate"].Get<DateTime>();
return stopLimit;
}
}
}