Esempio n. 1
0
class YChartsDataImplementation(object):
    def __init__(self):
        self.client = YChartsClient()

    def authenticate(self, username, password):
        self.client.authenticate(username, password)

    def get_metric(self, ticker, metric, time_length, start_date, end_date):
        start_date = _convert_date(start_date)
        end_date = _convert_date(end_date)
        raw_data = self.client.get_security_metric(
            ticker, metric, time_length=time_length, start_date=start_date, end_date=end_date
        )
        return convert_to_pandas(raw_data, metric)

    def get_prices(self, ticker, time_length, start_date, end_date):
        start_date = _convert_date(start_date)
        end_date = _convert_date(end_date)
        raw_data = self.client.get_security_prices(
            ticker, time_length=time_length, start_date=start_date, end_date=end_date
        )
        return convert_to_pandas(raw_data, "price")
Esempio n. 2
0
def main(symbol_file, parameter_file, output_dir):
    param_fp = open(parameter_file, 'r')

    param_list = []

    count = {}

    for parameter in param_fp:
        param_list.append(parameter.strip())
        count[parameter.strip()] = 0

    client = YChartsClient()

    error_count = {}

    with open(symbol_file, 'r') as sym_fp:
        for symbol in list(csv.reader(sym_fp)):
            row_info = {}
            symbol = symbol[0].strip()

            to_write = []
            to_write.append(['symbol', 'timestamp'])

            non_params = []

            print symbol

            for parameter in param_list:
                parameter = parameter.strip()
                to_write[0].append(parameter)

                try:
                    row = client.get_security_metric(symbol,
                                                     parameter,
                                                     start_date="01/01/1900")
                except Exception, e:
                    if parameter in error_count:
                        error_count[parameter] += 1
                    else:
                        error_count[parameter] = 1
                    non_params.append(parameter)
                    continue

                for row_obj in row:
                    if row_obj[0] not in row_info:
                        row_info[row_obj[0]] = {}
                    row_info[row_obj[0]][str(parameter)] = row_obj[1]

                if count[parameter] == 0:
                    count[parameter] = 1

            new_file = open(os.path.join(output_dir,
                                         str(symbol) + '.csv'), 'w+')

            for key in sorted(row_info):
                temp = []
                temp.append(str(symbol))
                temp.append(convert(key))

                for parameter in param_list:
                    parameter = str(parameter)

                    if count[parameter] == 0:
                        param_list.remove(parameter)
                        to_write[0].remove(parameter)
                        continue

                    if parameter in row_info[key]:
                        #print 'HERE', parameter, key
                        temp.append(row_info[key][parameter])
                        #to_write[-1].append(row_info[key][str(parameter)])
                    else:
                        #print 'NOT ', parameter, row_info[key]
                        temp.append('NaN')

                to_write.append(temp)

                #print to_write[-1], len(to_write[-1])

                #row_info[key].insert(0, convert(key))
                #row_info[key].insert(0, str(symbol))
                #to_write.append(row_info[key])

            writer = csv.writer(new_file)
            writer.writerows(to_write)
            new_file.close()
def main(symbol_file, parameter_file, output_dir):
    '''

	Params:
	------------------------
	parameter_file: This is the path to the file that contains the information that you want to fetch via the stock prediction api like ps_ratio, dividend_yield, etc. An example for this file is in the input directory of the project source directory.
	symbol_file: This is path to text file with the symbols that you want the output of seperated by newlines.
	output_dir: path to output directory. In this directory the files will be created and saved as symbol_1.csv, symbol_2.csv, etc.
	'''
    param_fp = open(parameter_file, 'r')

    param_list = []

    count = {}

    for parameter in param_fp:
        param_list.append(parameter.strip())
        count[parameter.strip()] = 0

    client = YChartsClient()

    error_count = {}

    with open(symbol_file, 'r') as sym_fp:
        for symbol in list(csv.reader(sym_fp)):
            row_info = {}
            symbol = symbol[0].strip()

            to_write = []
            to_write.append(['symbol', 'timestamp'])

            non_params = []

            print symbol

            for parameter in param_list:
                parameter = parameter.strip()
                to_write[0].append(parameter)

                try:
                    row = client.get_security_metric(symbol,
                                                     parameter,
                                                     start_date="01/01/1900")
                except Exception, e:
                    if parameter in error_count:
                        error_count[parameter] += 1
                    else:
                        error_count[parameter] = 1
                    non_params.append(parameter)
                    continue

                for row_obj in row:
                    if row_obj[0] not in row_info:
                        row_info[row_obj[0]] = {}
                    row_info[row_obj[0]][str(parameter)] = row_obj[1]

                if count[parameter] == 0:
                    count[parameter] = 1

            new_file = open(os.path.join(output_dir,
                                         str(symbol) + '.csv'), 'w+')

            for key in sorted(row_info):
                temp = []
                temp.append(str(symbol))
                temp.append(convert(key))

                for parameter in param_list:
                    parameter = str(parameter)

                    if count[parameter] == 0:
                        param_list.remove(parameter)
                        to_write[0].remove(parameter)
                        continue

                    if parameter in row_info[key]:
                        #print 'HERE', parameter, key
                        temp.append(row_info[key][parameter])
                        #to_write[-1].append(row_info[key][str(parameter)])
                    else:
                        #print 'NOT ', parameter, row_info[key]
                        temp.append('NaN')

                to_write.append(temp)

                #print to_write[-1], len(to_write[-1])

                #row_info[key].insert(0, convert(key))
                #row_info[key].insert(0, str(symbol))
                #to_write.append(row_info[key])

            writer = csv.writer(new_file)
            writer.writerows(to_write)
            new_file.close()
Esempio n. 4
0
 def setup(self, patched_requests):
     self.client = YChartsClient()
     patched_requests.session.assert_called_once_with()
     patched_requests.session().get.assert_called_once_with("http://ycharts.com/login")
Esempio n. 5
0
class TestYChartsClient(object):
    @patch("ychartspy.client.requests")
    def setup(self, patched_requests):
        self.client = YChartsClient()
        patched_requests.session.assert_called_once_with()
        patched_requests.session().get.assert_called_once_with("http://ycharts.com/login")

    def test_make_request_with_security(self):
        self.client.session.get.return_value = MockResponse()
        self.client._make_request("SPY", "price", "1", None, None, "security")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL, params=_make_security_params("SPY", "price")
        )

    def test_make_request_with_indicator(self):
        self.client.session.get.return_value = MockResponse()
        self.client._make_request("USRSG", "price", "1", None, None, "indicator")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(YCHARTS_DATA_URL, params=[
            ("securities", "type:indicator,id:I:USRSG,include:true"),
            ("calcs", "id:price,include:true"),
            ("zoom", "1")
        ])

    def test_get_security_metric(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric("AAPL", "pe_ratio", "1")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL, params=_make_security_params("AAPL", "pe_ratio")
        )
        eq_(response, RAW_DATA)

    @raises(Exception)
    def test_get_security_metric_raises_exception(self):
        self.client.session.get.return_value = MockResponse()
        self.client.get_security_metric("AAPL", "foo", "1")

    @raises(Exception)
    def test_get_security_metric_raises_exception_for_status(self):
        self.client.session.get.return_value = MockResponse(status_code=400)
        self.client.get_security_metric("AAPL", "pe_ratio", "1")

    def test_get_raw_data(self):
        data = self.client._get_raw_data(MockResponse())
        eq_(data, RAW_DATA)

    def test_get_security_metric_with_start_date(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric("AAPL", "pe_ratio", start_date="01/01/2014")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL,
            params=_make_security_params("AAPL", "pe_ratio", start_date="01/01/2014")
        )
        eq_(response, RAW_DATA)

    def test_get_security_metric_with_end_date(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric("aapl", "pe_ratio", end_date="01/01/2014")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL,
            params=_make_security_params("aapl", "pe_ratio", end_date="01/01/2014")
        )
        eq_(response, RAW_DATA)

    def test_get_security_metric_with_start_and_end_date(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric(
            "aapl", "pe_ratio", end_date="01/01/2014", start_date="01/01/2013"
        )
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL,
            params=_make_security_params(
                "aapl", "pe_ratio", end_date="01/01/2014", start_date="01/01/2013"
            )
        )
        eq_(response, RAW_DATA)

    @raises(Exception)
    def test_get_security_metric_raises_exception_for_invalid_start_date(self):
        self.client.session.get.return_value = MockResponse()
        self.client.get_security_metric(
            "aapl", "pe_ratio", end_date="01/01/2014", start_date="01-01-2013"
        )

    @raises(Exception)
    def test_get_security_metric_raises_exception_for_invalid_end_date(self):
        self.client.session.get.return_value = MockResponse()
        self.client.get_security_metric(
            "aapl", "pe_ratio", end_date="2014/01/01", start_date="01/01/2013"
        )
Esempio n. 6
0
 def __init__(self):
     self.client = YChartsClient()