In [1]:
# utf-8
import QUANTAXIS as QA

market = QA.QA_Market(if_start_orderthreading=True)
portfolio= QA.QA_Portfolio()
# 创建两个account
# 这里是创建一个资产组合,然后在组合里面创建两个account  你可以想象成股票里面的两个策略账户
# 然后返回的是这个账户的id
a_1 = portfolio.new_account()
a_1.reset_assets(100000000)
a_1.frequence = QA.FREQUENCE.ONE_MIN
market.start()

market.connect(QA.BROKER_TYPE.BACKETEST)


QUANTAXIS>> start QUANTAXIS
QUANTAXIS>> Welcome to QUANTAXIS, the Version is 1.1.0
QUANTAXIS>>  
 ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` 
  ``########`````##````````##``````````##`````````####````````##```##########````````#``````##``````###```##`````######`` 
  `##``````## ```##````````##`````````####````````##`##```````##```````##```````````###``````##````##`````##```##`````##` 
  ##````````##```##````````##````````##`##````````##``##``````##```````##``````````####```````#```##``````##```##``````## 
  ##````````##```##````````##```````##```##```````##```##`````##```````##`````````##`##```````##`##```````##````##``````` 
  ##````````##```##````````##``````##`````##``````##````##````##```````##````````##``###```````###````````##`````##`````` 
  ##````````##```##````````##``````##``````##`````##`````##```##```````##```````##````##```````###````````##``````###```` 
  ##````````##```##````````##`````##````````##````##``````##``##```````##``````##``````##`````##`##```````##````````##``` 
  ##````````##```##````````##````#############````##```````##`##```````##`````###########`````##``##``````##`````````##`` 
  ###```````##```##````````##```##```````````##```##```````##`##```````##````##`````````##```##```##``````##```##`````##` 
  `##``````###````##``````###``##`````````````##``##````````####```````##```##``````````##``###````##`````##````##`````## 
  ``#########``````########```##``````````````###`##``````````##```````##``##````````````##`##``````##````##`````###``### 
  ````````#####`````````````````````````````````````````````````````````````````````````````````````````````````````##``  
  ``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` 
  ``````````````````````````Copyright``yutiansut``2018``````QUANTITATIVE FINANCIAL FRAMEWORK````````````````````````````` 
  ``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` 
 ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` 
 ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` 
 
Out[1]:
True

In [2]:
import pandas as pd

In [3]:
import threading

In [4]:
threading.enumerate()


Out[4]:
[<_MainThread(MainThread, started 14868)>,
 <Thread(Thread-4, started daemon 3456)>,
 <Heartbeat(Thread-5, started daemon 10936)>,
 <HistorySavingThread(IPythonHistorySavingThread, started 21104)>,
 <ParentPollerWindows(Thread-3, started daemon 18260)>,
 <Thread(pymongo_server_monitor_thread, started daemon 21040)>,
 <Thread(pymongo_kill_cursors_thread, started daemon 21484)>,
 <Thread(pymongo_kill_cursors_thread, started daemon 7180)>,
  <QA_ENGINE with ['ORDER', 'backtest'] kernels ident 5756>,
 <QA_ThreadORDER  id=2440348498744 ident 3820>,
 <QA_Threadbacktest  id=2440427795120 ident 5404>]

In [5]:
market.login(QA.BROKER_TYPE.BACKETEST, a_1.account_cookie, a_1)

market.order_handler.monitor


sub
subscribe
Out[5]:
{< QA_Account Acc_D17B8LaU>: < QA_Broker backtest thread 14868 >}

In [6]:
market._sync_orders()

In [7]:
{a_1:market.broker[a_1.broker]}


Out[7]:
{< QA_Account Acc_D17B8LaU>: < QA_Broker backtest thread 14868 >}

In [8]:
for code in ['000001', '000002', '000004', '600010', '000007','600000']:
    market.insert_order(a_1.account_cookie,code=code,
                            price=0,
                            amount=1000,
                            time='2018-08-14 14:58:00',
                            towards=QA.ORDER_DIRECTION.BUY,
                            order_model=QA.ORDER_MODEL.MARKET,
                            amount_model=QA.AMOUNT_MODEL.BY_AMOUNT,
                            market_type=QA.MARKET_TYPE.STOCK_CN,
                            frequence=QA.FREQUENCE.ONE_MIN,
                            broker_name=QA.BROKER_TYPE.BACKETEST,
    )


QUANTAXIS>> MARKET WARING: SOMEING WRONG WITH ORDER 
 
QUANTAXIS>> code 000001 date 2018-08-14 14:58:00 price 0 order_model MARKET amount_model by_amount
QUANTAXIS>> MARKET WARING: SOMEING WRONG WITH ORDER 
 
QUANTAXIS>> code 000004 date 2018-08-14 14:58:00 price 0 order_model MARKET amount_model by_amount

In [9]:
market.order_handler.monitor


Out[9]:
{< QA_Account Acc_D17B8LaU>: < QA_Broker backtest thread 14868 >}
['Acc_D17B8LaU', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '000002', None, 1, 22.33, 22.33, 'trade_success', 1000, 1000, 22335.5825, 0, 'Order_Yq0d97zl', 'Trade_071jybh4']

In [10]:
market.broker[QA.BROKER_TYPE.BACKETEST].query_orders(a_1.account_cookie,'')


on_insert_order
< QA_Order realorder_id Order_Yq0d97zl datetime:2018-08-14 14:58:00 code:000002 amount:1000 price:22.33 towards:1 btype:stock_cn order_id:Order_Yq0d97zl account:Acc_D17B8LaU status:queued >
queued
['Acc_D17B8LaU', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '600010', None, 1, 1.63, 1.63, 'trade_success', 1000, 1000, 1635.0, 0, 'Order_fZ1jlwvh', 'Trade_dFUjKIa6']
on_insert_order
Out[10]:
order_time code name towards trade_price order_price status order_amount trade_amount cancel_amount
account_cookie realorder_id
Acc_D17B8LaU Order_Yq0d97zl 2018-08-14 14:58:00 000002 None 1 22.33 22.33 trade_success 1000 1000 0
< QA_Order realorder_id Order_fZ1jlwvh datetime:2018-08-14 14:58:00 code:600010 amount:1000 price:1.63 towards:1 btype:stock_cn order_id:Order_fZ1jlwvh account:Acc_D17B8LaU status:queued >
queued

In [11]:
market.broker[QA.BROKER_TYPE.BACKETEST].query_orders(a_1.account_cookie,'filled')


receive deal
Out[11]:
trade_time code name towards trade_amount trade_price trade_money trade_id
account_cookie realorder_id
Acc_D17B8LaU Order_Yq0d97zl 2018-08-14 14:58:00 000002 None 1 1000 22.33 22335.5825 Trade_5xOTrtgk
Order_fZ1jlwvh 2018-08-14 14:58:00 600010 None 1 1000 1.63 1635.0000 Trade_SZmaBrQ6
receive deal
['Acc_D17B8LaU', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '000007', None, 1, 0.0, 13.23, 'trade_price_limit', 1000, 0, 5, 0, 'Order_ANbWnkxh', 'Trade_D9uCndMJ']
on_insert_order
< QA_Order realorder_id Order_ANbWnkxh datetime:2018-08-14 14:58:00 code:000007 amount:1000 price:13.23 towards:1 btype:stock_cn order_id:Order_ANbWnkxh account:Acc_D17B8LaU status:queued >
queued
['Acc_D17B8LaU', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '600000', None, 1, 10.07, 10.065000000000001, 'trade_success', 1000, 1000, 10070.000000000002, 0, 'Order_Z9mQWKPE', 'Trade_aGbiP8dD']
on_insert_order
< QA_Order realorder_id Order_Z9mQWKPE datetime:2018-08-14 14:58:00 code:600000 amount:1000 price:10.065000000000001 towards:1 btype:stock_cn order_id:Order_Z9mQWKPE account:Acc_D17B8LaU status:queued >
queued

In [12]:
a_1.history_table


Out[12]:
datetime code price amount cash order_id realorder_id trade_id account_cookie commission tax
0 2018-08-14 14:58:00 000002 22.33 1000 9.997763e+07 Order_Yq0d97zl Order_Yq0d97zl Trade_5xOTrtgk Acc_D17B8LaU 5.5825 33.495
1 2018-08-14 14:58:00 600010 1.63 1000 9.997600e+07 Order_fZ1jlwvh Order_fZ1jlwvh Trade_SZmaBrQ6 Acc_D17B8LaU 0.4075 2.445
receive deal

In [13]:
a_2 = portfolio.new_account()
a_2.reset_assets(100000000)
a_2.frequence = QA.FREQUENCE.ONE_MIN

market.login(QA.BROKER_TYPE.BACKETEST, a_2.account_cookie, a_2)


sub
subscribe
Out[13]:
True

In [14]:
for code in ['000001', '000002', '000004', '600010', '000007','600000']:
    market.insert_order(a_2.account_cookie,code=code,
                            price=0,
                            amount=1000,
                            time='2018-08-14 14:58:00',
                            towards=QA.ORDER_DIRECTION.BUY,
                            order_model=QA.ORDER_MODEL.MARKET,
                            amount_model=QA.AMOUNT_MODEL.BY_AMOUNT,
                            market_type=QA.MARKET_TYPE.STOCK_CN,
                            frequence=QA.FREQUENCE.ONE_MIN,
                            broker_name=QA.BROKER_TYPE.BACKETEST,
    )


QUANTAXIS>> MARKET WARING: SOMEING WRONG WITH ORDER 
 
QUANTAXIS>> code 000001 date 2018-08-14 14:58:00 price 0 order_model MARKET amount_model by_amount
QUANTAXIS>> MARKET WARING: SOMEING WRONG WITH ORDER 
 
QUANTAXIS>> code 000004 date 2018-08-14 14:58:00 price 0 order_model MARKET amount_model by_amount
['Acc_xvgUlRXT', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '000002', None, 1, 22.33, 22.33, 'trade_success', 1000, 1000, 22335.5825, 0, 'Order_hGuTR8mx', 'Trade_y6kfTWgr']
on_insert_order
< QA_Order realorder_id Order_hGuTR8mx datetime:2018-08-14 14:58:00 code:000002 amount:1000 price:22.33 towards:1 btype:stock_cn order_id:Order_hGuTR8mx account:Acc_xvgUlRXT status:queued >
queued
['Acc_xvgUlRXT', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '600010', None, 1, 1.63, 1.63, 'trade_success', 1000, 1000, 1635.0, 0, 'Order_FMQ7dCiD', 'Trade_qT2fh7pU']
on_insert_order
< QA_Order realorder_id Order_FMQ7dCiD datetime:2018-08-14 14:58:00 code:600010 amount:1000 price:1.63 towards:1 btype:stock_cn order_id:Order_FMQ7dCiD account:Acc_xvgUlRXT status:queued >
queued
['Acc_xvgUlRXT', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '000007', None, 1, 0.0, 13.23, 'trade_price_limit', 1000, 0, 5, 0, 'Order_Ie3pbwJY', 'Trade_WTMjypSm']
on_insert_order
< QA_Order realorder_id Order_Ie3pbwJY datetime:2018-08-14 14:58:00 code:000007 amount:1000 price:13.23 towards:1 btype:stock_cn order_id:Order_Ie3pbwJY account:Acc_xvgUlRXT status:queued >
queued
['Acc_xvgUlRXT', '2018-08-14 14:58:00', '2018-08-14 14:58:00', '600000', None, 1, 10.07, 10.065000000000001, 'trade_success', 1000, 1000, 10070.000000000002, 0, 'Order_pu6iwRSr', 'Trade_gCdsP3Hu']
on_insert_order
< QA_Order realorder_id Order_pu6iwRSr datetime:2018-08-14 14:58:00 code:600000 amount:1000 price:10.065000000000001 towards:1 btype:stock_cn order_id:Order_pu6iwRSr account:Acc_xvgUlRXT status:queued >
queued
receive deal
receive deal
receive deal

In [15]:
a_2.history_table


Out[15]:
datetime code price amount cash order_id realorder_id trade_id account_cookie commission tax
0 2018-08-14 14:58:00 000002 22.33 1000 9.997763e+07 Order_hGuTR8mx Order_hGuTR8mx Trade_FpBN8bwM Acc_xvgUlRXT 5.5825 33.495
1 2018-08-14 14:58:00 600010 1.63 1000 9.997600e+07 Order_FMQ7dCiD Order_FMQ7dCiD Trade_tTEMKASC Acc_xvgUlRXT 0.4075 2.445
2 2018-08-14 14:58:00 600000 10.07 1000 9.996591e+07 Order_pu6iwRSr Order_pu6iwRSr Trade_OGT1SE9x Acc_xvgUlRXT 2.5175 15.105

In [16]:
portfolio.table


Out[16]:
account_cookie Acc_D17B8LaU Acc_xvgUlRXT
account_cookie Acc_D17B8LaU Acc_xvgUlRXT
allow_sellopen False False
allow_t0 False False
broker backtest backtest
cash [100000000, 99977630.9225, 99975998.07, 999659... [100000000, 99977630.9225, 99975998.07, 999659...
commission_coeff 0.00025 0.00025
current_time None None
history [[2018-08-14 14:58:00, 000002, 22.33, 1000, 99... [[2018-08-14 14:58:00, 000002, 22.33, 1000, 99...
init_assets {'cash': 100000000, 'hold': {}} {'cash': 100000000, 'hold': {}}
margin_level False False
market_type stock_cn stock_cn
portfolio_cookie Portfolio_5miNbPan Portfolio_5miNbPan
quantaxis_version 1.1.0 1.1.0
running_environment backtest backtest
running_time 2018-08-18 21:40:04.689366 2018-08-18 21:41:09.733599
source account account
strategy_name None None
tax_coeff 0.0015 0.0015
trade_index [2018-08-14 14:58:00, 2018-08-14 14:58:00, 201... [2018-08-14 14:58:00, 2018-08-14 14:58:00, 201...
user_cookie None None

In [18]:
portfolio.history_table


Out[18]:
datetime code price amount cash order_id realorder_id trade_id account_cookie commission tax
0 2018-08-14 14:58:00 000002 22.33 1000 9.997763e+07 Order_Yq0d97zl Order_Yq0d97zl Trade_5xOTrtgk Acc_D17B8LaU 5.5825 33.495
1 2018-08-14 14:58:00 600010 1.63 1000 9.997600e+07 Order_fZ1jlwvh Order_fZ1jlwvh Trade_SZmaBrQ6 Acc_D17B8LaU 0.4075 2.445
2 2018-08-14 14:58:00 600000 10.07 1000 9.996591e+07 Order_Z9mQWKPE Order_Z9mQWKPE Trade_J7BGSm5V Acc_D17B8LaU 2.5175 15.105
0 2018-08-14 14:58:00 000002 22.33 1000 9.997763e+07 Order_hGuTR8mx Order_hGuTR8mx Trade_FpBN8bwM Acc_xvgUlRXT 5.5825 33.495
1 2018-08-14 14:58:00 600010 1.63 1000 9.997600e+07 Order_FMQ7dCiD Order_FMQ7dCiD Trade_tTEMKASC Acc_xvgUlRXT 0.4075 2.445
2 2018-08-14 14:58:00 600000 10.07 1000 9.996591e+07 Order_pu6iwRSr Order_pu6iwRSr Trade_OGT1SE9x Acc_xvgUlRXT 2.5175 15.105

In [21]:
a_1.orders.order_list


Out[21]:
{'Order_Yq0d97zl': < QA_Order realorder_id Order_Yq0d97zl datetime:2018-08-14 14:58:00 code:000002 amount:1000 price:22.33 towards:1 btype:stock_cn order_id:Order_Yq0d97zl account:Acc_D17B8LaU status:success_all >,
 'Order_fZ1jlwvh': < QA_Order realorder_id Order_fZ1jlwvh datetime:2018-08-14 14:58:00 code:600010 amount:1000 price:1.63 towards:1 btype:stock_cn order_id:Order_fZ1jlwvh account:Acc_D17B8LaU status:success_all >,
 'Order_ANbWnkxh': < QA_Order realorder_id Order_ANbWnkxh datetime:2018-08-14 14:58:00 code:000007 amount:1000 price:13.23 towards:1 btype:stock_cn order_id:Order_ANbWnkxh account:Acc_D17B8LaU status:queued >,
 'Order_Z9mQWKPE': < QA_Order realorder_id Order_Z9mQWKPE datetime:2018-08-14 14:58:00 code:600000 amount:1000 price:10.065000000000001 towards:1 btype:stock_cn order_id:Order_Z9mQWKPE account:Acc_D17B8LaU status:success_all >}

In [24]:
a_2.orders.order_list


Out[24]:
{'Order_hGuTR8mx': < QA_Order realorder_id Order_hGuTR8mx datetime:2018-08-14 14:58:00 code:000002 amount:1000 price:22.33 towards:1 btype:stock_cn order_id:Order_hGuTR8mx account:Acc_xvgUlRXT status:success_all >,
 'Order_FMQ7dCiD': < QA_Order realorder_id Order_FMQ7dCiD datetime:2018-08-14 14:58:00 code:600010 amount:1000 price:1.63 towards:1 btype:stock_cn order_id:Order_FMQ7dCiD account:Acc_xvgUlRXT status:success_all >,
 'Order_Ie3pbwJY': < QA_Order realorder_id Order_Ie3pbwJY datetime:2018-08-14 14:58:00 code:000007 amount:1000 price:13.23 towards:1 btype:stock_cn order_id:Order_Ie3pbwJY account:Acc_xvgUlRXT status:queued >,
 'Order_pu6iwRSr': < QA_Order realorder_id Order_pu6iwRSr datetime:2018-08-14 14:58:00 code:600000 amount:1000 price:10.065000000000001 towards:1 btype:stock_cn order_id:Order_pu6iwRSr account:Acc_xvgUlRXT status:success_all >}