public Cache() { foreach (GroupBy foo in Enum.GetValues(typeof(GroupBy))) { tbCache.Add(foo, TradeBucket.GetAllBuckets(foo)); } }
private static List <TradeBucket> groupDataBy(GroupBy time, List <Trade> trades, TradeBucket lastBucket) { if (time == GroupBy.hour) { int x = 0; } List <TradeBucket> grouped = new List <TradeBucket>(); if (trades.Count > 0) { double cBucketTime = (trades[0].Time - (trades[0].Time % (int)time)); decimal cHigh = decimal.MinValue; decimal cLow = decimal.MaxValue; decimal cVolume = 0; int cNumTrades = 0; decimal cOpen = (decimal)0; int tradeCount = 0; for (int i = 0; i < trades.Count; i++) { tradeCount++; if (trades[i].Time > (cBucketTime + (int)time) || tradeCount == trades.Count) { TradeBucket bucket = new TradeBucket(); bucket.Time = cBucketTime; bucket.High = cHigh; bucket.Low = cLow; bucket.Volume = cVolume; bucket.Open = cOpen; bucket.Close = trades[i - 1].Price; bucket.NumTrades = cNumTrades; bucket.Group = time; grouped.Add(bucket); cBucketTime += (double)time; cNumTrades = 0; cHigh = decimal.MinValue; cLow = decimal.MaxValue; cVolume = 0; } cOpen = grouped.Count == 0 ? lastBucket != null ? lastBucket.Close : trades[0].Price : grouped[grouped.Count - 1].Close; cNumTrades++; cHigh = trades[i].Price > cHigh ? trades[i].Price : cHigh; cLow = trades[i].Price < cLow ? trades[i].Price : cLow; cVolume += trades[i].Amount; } } grouped[0].Open = lastBucket == null ? trades[0].Price : lastBucket.Close; return(grouped); }
public override void Run() { //Fetch data From DB while (true) { List <TradeBucket> lastBucket = TradeBucket.GetTwoLastKnownBucket((GroupBy)_process); List <Trade> remainingTrades = Trade.GetTradesAfterTime(lastBucket.Count == 0 ? 0 : lastBucket[1].Time); //Bucket the data List <TradeBucket> buckets = groupDataBy((GroupBy)_process, remainingTrades, lastBucket.Count == 0 ? null : lastBucket[0]); //Save Buckets saveAllBuckets(buckets); Thread.Sleep(60 * 3 * 1000); } }
private void runAlgorithm() { TradingAlgorithm tradeAlgo = (TradingAlgorithm)_process; List <Advice> advices = new List <Advice>(); TradeBucket end = TradeBucket.GetTwoLastKnownBucket(tradeAlgo.Group)[0]; double lastKnownTime = Advice.GetLastKnownTime(tradeAlgo.Name, tradeAlgo.Group); double start = lastKnownTime > 1293840000 ? lastKnownTime : _cache.GetByGroup(tradeAlgo.Group)[70].Time; bool hasCash = true; for (double i = start; i <= end.Time; i += (double)tradeAlgo.Group) { List <TradeBucket> tb = _cache.GetBucketsBeforeTime(tradeAlgo.Group, i); Advice advice = tradeAlgo.GetActionForBuckets(tb); if (hasCash == true && advice.Action == TradeAction.Buy) { advices.Add(advice); hasCash = false; } else if (hasCash == false && advice.Action == TradeAction.Sell) { advices.Add(advice); hasCash = true; } } foreach (Advice advice in advices) { Advice ad = (Advice)advice.Exists(); if (ad == null && advice.Group == GroupBy.hour && (advice.AlgorithmName == "StochRSI" || advice.AlgorithmName == "ROC")) { if (bool.Parse(ConfigurationManager.AppSettings["enableEmailing"])) { sendEmailsFor(advice); } if (bool.Parse(ConfigurationManager.AppSettings["enableTwitter"])) { tweetFor(advice); } if (bool.Parse(ConfigurationManager.AppSettings["enableTrading"])) { mtgoxTrade(advice); } } advice.SaveNew(); } this._doneEvent.Set(); }
public void AddBucket(TradeBucket tb) { tbCache[tb.Group].Add(tb); }