Esempio n. 1
0
 public Cache()
 {
     foreach (GroupBy foo in Enum.GetValues(typeof(GroupBy)))
     {
         tbCache.Add(foo, TradeBucket.GetAllBuckets(foo));
     }
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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();
        }
Esempio n. 5
0
 public void AddBucket(TradeBucket tb)
 {
     tbCache[tb.Group].Add(tb);
 }