def test_from_raw(self): jq_transaction = JoinQuantTransaction(self._transaction_detail['data']['transaction'][0]) transaction = jq_transaction.normalize() self.assertEqual(transaction.completed_at, datetime.strptime('2016-11-22 09:30', '%Y-%m-%d %M:%S')) self.assertEqual(transaction.type, 'BUY') self.assertEqual(transaction.symbol, '000001') self.assertEqual(transaction.price, 9.25) self.assertEqual(transaction.amount, 100)
def test_from_raw(self): jq_transaction1 = JoinQuantTransaction( self._transaction_detail['data']['transaction'][0]) transaction1 = jq_transaction1.normalize() self.assertEqual( transaction1.completed_at, datetime.strptime('2017-06-01 14:55', '%Y-%m-%d %H:%M')) self.assertEqual(transaction1.action, 'BUY') self.assertEqual(transaction1.symbol, '000001') self.assertEqual(transaction1.type, 'MARKET') self.assertEqual(transaction1.priceType, 4) self.assertEqual(transaction1.price, 9.19) self.assertEqual(transaction1.amount, 100) jq_transaction2 = JoinQuantTransaction( self._transaction_detail['data']['transaction'][1]) transaction2 = jq_transaction2.normalize() self.assertEqual( transaction2.completed_at, datetime.strptime('2017-06-01 14:55', '%Y-%m-%d %H:%M')) self.assertEqual(transaction2.action, 'BUY') self.assertEqual(transaction2.symbol, '000002') self.assertEqual(transaction2.type, 'LIMIT') self.assertEqual(transaction2.priceType, 0) self.assertEqual(transaction2.price, 19.13) self.assertEqual(transaction2.amount, 100)
def query(self): today_str = datetime.today().strftime('%Y-%m-%d') response = self._session.get('{}/algorithm/live/transactionDetail'.format(self.BASE_URL), params={ 'backtestId': self._backtest_id, 'data': today_str, 'ajax': 1 }) transaction_detail = response.json() raw_transactions = transaction_detail['data']['transaction'] transactions = [] for raw_transaction in raw_transactions: transaction = JoinQuantTransaction(raw_transaction).normalize() transactions.append(transaction) return transactions
def run(self): while (True): if MarketUtils.is_closed(): self._log.warn("********** 休市期间不跟单 **********") if self._processed_transactions: del self._processed_transactions[:] time.sleep(self._idle_interval) continue self._log.info("********** 开始跟单 **********") try: transaction_detail = self._jq_client.query() raw_transactions = transaction_detail['data']['transaction'] self._log.info("获取到 {} 条委托".format(len(raw_transactions))) transactions = [] for raw_transaction in raw_transactions: transaction = JoinQuantTransaction( raw_transaction).normalize() if self._is_expired(transaction): continue transactions.append(transaction) self._log.info("获取到 {} 条有效委托".format(len(transactions))) for tx in transactions: self._processed_transactions.append(tx) self._log.info("开始以 {}元 {} {}股 {}".format( tx.price, tx.get_cn_type(), tx.amount, tx.symbol)) response = self._shipane_client.execute( tx.type, tx.symbol, tx.price, tx.amount) if response is not None: self._log.info(u'实盘易回复:\nstatus_code: %d\ntext: %s', response.status_code, response.text) else: self._log.error('实盘易未回复') except Exception as e: self._log.exception("跟单异常") self._log.info("********** 结束跟单 **********\n") time.sleep(self._interval)