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)
예제 #2
0
    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)
예제 #3
0
    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
예제 #4
0
    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)