using System; using System.Collections.Generic; using System.Text; using System.Linq; using MarketData.Utils; namespace MarketData.MarketDataModel { public class MACDFastSlowSignalsComparerDesc : IComparer { public int Compare(MACDFastSlowSignal macd1, MACDFastSlowSignal macd2) { if (macd1.Date < macd2.Date) return -1; else if (macd1.Date > macd2.Date) return 1; return 0; } } public class MACDFastSlowSignalsComparerAsc : IComparer { public int Compare(MACDFastSlowSignal macd1, MACDFastSlowSignal macd2) { if (macd1.Date > macd2.Date) return -1; else if (macd1.Date < macd2.Date) return 1; return 0; } } public class MACDFastSlowSignals : List { private String symbol; private DateTime fromDate; private DateTime thruDate; private DateTime date; public MACDFastSlowSignals() { } public MACDFastSlowSignals(ICollection collection) { IEnumerator enumerator=collection.GetEnumerator(); while (enumerator.MoveNext()) Add(enumerator.Current); } public Signals FastCondensedSignals{get;set;} public Signals SlowCondensedSignals{get;set;} public double MinFastMACD { get{return (from MACDFastSlowSignal signal in this select signal.MACDFast).Min()-.25;} } public double MinSlowMACD { get{return (from MACDFastSlowSignal signal in this select signal.MACDSlow).Min()-.25;} } public String Symbol { get { return symbol; } set { symbol = value; } } public DateTime Date { get { return date; } set { date = value; } } public DateTime FromDate { get { return fromDate; } set { fromDate = value; } } public DateTime ThruDate { get { return thruDate; } set { thruDate = value; } } } public class MACDFastSlowSignal { private DateTime date; private double signalFast; private double macdFast; private double signalSlow; private double macdSlow; public MACDFastSlowSignal() { } public DateTime Date { get { return date; } set { date = value; } } public double SignalFast { get { return signalFast; } set { signalFast = value; } } public double MACDFast { get { return macdFast; } set { macdFast = value; } } public double SignalSlow { get { return signalSlow; } set { signalSlow = value; } } public double MACDSlow { get { return macdSlow; } set { macdSlow = value; } } } public class MACDSignals : List { public MACDSignals() { } public float[] GetMACD(int startIndex, int count) { if (startIndex + count > Count) return null; float[] macdArray = new float[count]; for (int index = startIndex, arrayIndex = 0; index < startIndex + count; index++, arrayIndex++) { macdArray[arrayIndex] = (float)this[index].MACD; } return macdArray; } } public class MACDSignal { private String symbol; private DateTime date; private double fast; // fast 12 private double slow; // slow 26 private double signal; // signal 9 private double macd; private double histogram; public MACDSignal() { } public String Symbol { get {return symbol; } set { symbol = value; } } public DateTime Date { get { return date; } set { date = value; } } public double Fast { get { return fast; } set { fast = value; } } public double Slow { get { return slow; } set { slow = value; } } public double Signal { get { return signal; } set { signal = value; } } public double MACD { get { return macd; } set { macd = value; } } public double Histogram { get { return histogram; } set { histogram = value; } } public static String Header { get { return "Symbol,Date,Fast,Slow,Signal,MACD,Histogram"; } } public override String ToString() { StringBuilder sb=new StringBuilder(); sb.Append(symbol).Append(","); sb.Append(Utility.DateTimeToStringMMSDDSYYYY(Date)).Append(","); sb.Append(String.Format("{0:0.00000}",Fast)).Append(","); sb.Append(String.Format("{0:0.00000}",Slow)).Append(","); sb.Append(String.Format("{0:0.00000}",Signal)).Append(","); sb.Append(String.Format("{0:0.00000}",MACD)).Append(","); sb.Append(String.Format("{0:0.00000}",Histogram)); return sb.ToString(); } } }