diff --git a/qhp-download-list.py b/qhp-download-list.py new file mode 100644 index 0000000..8ff2e5d --- /dev/null +++ b/qhp-download-list.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + +import sys +import argparse +import zmq +import io +import json +import csv +import datetime +import struct + +def main(): + parser = argparse.ArgumentParser(description='QHP client') + parser.add_argument('-q', '--qhp', action='store', dest='qhp', help='QHP endpoint', required=True) + + args = parser.parse_args() + + ctx = zmq.Context.instance() + s = ctx.socket(zmq.REQ) + s.connect(args.qhp) + + rq = { + "get_sec_list" : True, + } + + s.send_multipart([bytes(json.dumps(rq), "utf-8")]) + resp = s.recv() + + if resp != b'OK': + errmsg = s.recv_string() + print("Error:", errmsg) + sys.exit(1) + + + rawdata = b'' + while True: + if s.getsockopt(zmq.RCVMORE) == 0: + break + rawdata += s.recv() + + s = rawdata.decode('utf-8') + tickers = s.split(',') + for ticker in tickers: + print(ticker) + +if __name__ == '__main__': + main() + diff --git a/qhp-download.py b/qhp-download.py index 220e27d..d4373b0 100644 --- a/qhp-download.py +++ b/qhp-download.py @@ -44,7 +44,8 @@ class BarAggregator: b_low = self.low b_close = self.close b_volume = self.volume - b_timestamp = self.timestamp + if self.current_bar_number is not None: + b_timestamp = datetime.datetime.fromtimestamp(self.current_bar_number * self.timeframe) self.open_ = open_ self.high = high @@ -70,7 +71,7 @@ class BarAggregator: b_low = self.low b_close = self.close b_volume = self.volume - b_timestamp = self.timestamp + b_timestamp = datetime.datetime.fromtimestamp(self.timeframe * ( self.timestamp.timestamp() // self.timeframe)) return (b_timestamp, b_open, b_high, b_low, b_close, b_volume) @@ -113,44 +114,53 @@ def main(): "timeframe" : period } + print("Sending request:", rq) s.send_multipart([bytes(json.dumps(rq), "utf-8")]) - parts = s.recv_multipart() + print("Awaiting response") + resp = s.recv() - print(parts[0]) - if parts[0] != b'OK': - print("Error:", parts[1]) - sys.exit(1) + print(resp) + if resp != b'OK': + errmsg = s.recv_string() + print("Error:", errmsg) + sys.exit(1) line_count = 0 with open(args.output_file, 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['', '', '', '