Esempio n. 1
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();
        }