Exemplo n.º 1
0
        static void Main(string[] args)
        {
            //Get Coinbase data
            List <DTO.Coinbase.GetPrice.RootObject> coinbaseMarketData = new List <DTO.Coinbase.GetPrice.RootObject>();

            DTO.Coinbase.GetPrice.RootObject coinbaseBTC_MarketData = coinbase_GetSpotPrice("BTC");
            coinbaseBTC_MarketData.data.symbol = "BTC";
            DTO.Coinbase.GetPrice.RootObject coinbaseLTC_MarketData = coinbase_GetSpotPrice("LTC");
            coinbaseLTC_MarketData.data.symbol = "LTC";
            DTO.Coinbase.GetPrice.RootObject coinbaseETH_MarketData = coinbase_GetSpotPrice("ETH");
            coinbaseETH_MarketData.data.symbol = "ETH";
            coinbaseMarketData.Add(coinbaseBTC_MarketData);
            coinbaseMarketData.Add(coinbaseLTC_MarketData);
            coinbaseMarketData.Add(coinbaseETH_MarketData);

            //Store Date and Value of ATH for the main coins in a file (csv)
            List <DTO.Coinbase.DataBrief> coinbaseCSVData = getCSVCoinbaseData(coinbase_CSVPath);

            //If current value is > ATH, then set ATH
            coinbaseCSVData = updateATH(coinbaseCSVData, coinbaseMarketData);

            //At least 2 weeks removed from ATH :: preserve "coinbaseCSVData" variable for rewrite to CSV
            List <DTO.Coinbase.DataBrief> postFiltered_CoinbaseCSVData = filterTwoWeeksFromATH_Only(coinbaseCSVData);
            string createText = "";

            if (postFiltered_CoinbaseCSVData.Count == 0)
            {
                //Write that there are no hot buys. Include historical?
                createText = createTextFileContents();

                return;
            }
            else
            {
                //(Is down from 2 weeks ago, AND down from a week ago) OR (4 weeks ago was down from 5th week, 3 weeks ago was down from 4th week, 2 weeks ago was down from 3rd week, last week was up from 2nd, this week up from last week)
                List <DTO.Coinbase.DataBrief> hot_buys = rules_HotBuys(postFiltered_CoinbaseCSVData);

                //Rewrite coinbaseCSVData to CSV
                string wroteCSV = writeCSV(coinbaseCSVData);

                //Create Output for "hot buys" (or none)
                if (hot_buys.Count > 0)
                {
                    createText = createTextFileContents(hot_buys);
                }
                else
                {
                    createText = createTextFileContents();
                }

                //Write to file
                File.WriteAllText(textFile_ResultsPath, createText);
            }
        }
Exemplo n.º 2
0
        /*
         * @desc Filters the options based on a made-up set of rules that would classify a coin as "hot"
         * @param List<DTO.Coinbase.DataBrief> briefs
         * @return List<DTO.Coinbase.DataBrief> hot : dataset after "hot" filtering
         * @status WORKING
         */
        private static List <DTO.Coinbase.DataBrief> rules_HotBuys(List <DTO.Coinbase.DataBrief> briefs)
        {
            //(Is down from 2 weeks ago, AND down from a week ago) OR (4 weeks ago was down from 5th week, 3 weeks ago was down from 4th week, 2 weeks ago was down from 3rd week, last week was up from 2nd, this week up from last week)

            //Initialize for return
            List <DTO.Coinbase.DataBrief> hot = new List <DTO.Coinbase.DataBrief>();

            //Get dates we'll need to use
            string date_FiveWeeksAgo  = (DateTime.Today.AddDays(-35)).ToString("yyyy-MM-dd");
            string date_FourWeeksAgo  = (DateTime.Today.AddDays(-28)).ToString("yyyy-MM-dd");
            string date_ThreeWeeksAgo = (DateTime.Today.AddDays(-21)).ToString("yyyy-MM-dd");
            string date_TwoWeeksAgo   = (DateTime.Today.AddDays(-14)).ToString("yyyy-MM-dd");
            string date_OneWeeksAgo   = (DateTime.Today.AddDays(-7)).ToString("yyyy-MM-dd");

            //For each currency...
            for (int i = 0; i < briefs.Count; i++)
            {
                //get the value at each of these dates
                DTO.Coinbase.GetPrice.RootObject getPrice_5WeeksAgo = coinbase_GetSpotPrice(briefs[i].Abbrev, date_FiveWeeksAgo);
                DTO.Coinbase.GetPrice.RootObject getPrice_4WeeksAgo = coinbase_GetSpotPrice(briefs[i].Abbrev, date_FourWeeksAgo);
                DTO.Coinbase.GetPrice.RootObject getPrice_3WeeksAgo = coinbase_GetSpotPrice(briefs[i].Abbrev, date_ThreeWeeksAgo);
                DTO.Coinbase.GetPrice.RootObject getPrice_2WeeksAgo = coinbase_GetSpotPrice(briefs[i].Abbrev, date_TwoWeeksAgo);
                DTO.Coinbase.GetPrice.RootObject getPrice_1WeeksAgo = coinbase_GetSpotPrice(briefs[i].Abbrev, date_OneWeeksAgo);
                DTO.Coinbase.GetPrice.RootObject getPrice_current   = coinbase_GetSpotPrice(briefs[i].Abbrev);

                //Rule #1 :: Is down from 2 weeks ago, AND down from a week ago, AND last week's is down from 2 weeks ago
                //tldr; has been down two consecutive weeks
                bool isRule1 = false;
                if ((Convert.ToDouble(getPrice_current.data.amount) < Convert.ToDouble(getPrice_2WeeksAgo.data.amount)) && (Convert.ToDouble(getPrice_current.data.amount) < Convert.ToDouble(getPrice_1WeeksAgo.data.amount)) && (Convert.ToDouble(getPrice_1WeeksAgo.data.amount) < Convert.ToDouble(getPrice_2WeeksAgo.data.amount)))
                {
                    isRule1 = true;
                }

                //Rule #2 :: (4 weeks ago was down from 5th week, 3 weeks ago was down from 4th week, 2 weeks ago was down from 3rd week, last week was up from 2nd, this week up from last week)
                //tldr; was down for 3 consecutive weeks, and has now been up 2 weeks in a row so may be hot
                bool isRule2 = false;
                if ((Convert.ToDouble(getPrice_4WeeksAgo.data.amount) < Convert.ToDouble(getPrice_5WeeksAgo.data.amount)) && (Convert.ToDouble(getPrice_3WeeksAgo.data.amount) < Convert.ToDouble(getPrice_4WeeksAgo.data.amount)) && (Convert.ToDouble(getPrice_2WeeksAgo.data.amount) < Convert.ToDouble(getPrice_3WeeksAgo.data.amount)) && (Convert.ToDouble(getPrice_1WeeksAgo.data.amount) > Convert.ToDouble(getPrice_2WeeksAgo.data.amount)) && (Convert.ToDouble(getPrice_1WeeksAgo.data.amount) < Convert.ToDouble(getPrice_current.data.amount)))
                {
                    isRule2 = true;
                }

                //Pass all rules?
                if (isRule1 && isRule2)
                {
                    hot.Add(briefs[i]);
                }
            }

            return(hot);
        }