Skip to content

Commit

Permalink
Merge pull request yutiansut#1068 from zsl3034669/master
Browse files Browse the repository at this point in the history
Update QAAccount.py,修复 起始日期是从交易日开始 而非回测日开始的bug
  • Loading branch information
yutiansut authored Mar 29, 2019
2 parents 1bb2f6a + 80db134 commit c79e187
Showing 1 changed file with 29 additions and 23 deletions.
52 changes: 29 additions & 23 deletions QUANTAXIS/QAARP/QAAccount.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,9 @@ def __init__(
allow_margin=False,
running_environment=RUNNING_ENVIRONMENT.BACKETEST,
auto_reload=False,
generated='direct'
generated='direct',
start=None,
end=None
):
"""
Expand Down Expand Up @@ -274,6 +276,8 @@ def __init__(
self.running_time = datetime.datetime.now()
self.quantaxis_version = __version__
self.client = DATABASE.account
self.start_=start
self.end_=end
### 下面是数据库创建index部分, 此部分可能导致部分代码和原先不兼容
self.client.create_index(
[
Expand Down Expand Up @@ -496,15 +500,17 @@ def start_date(self):
Returns:
[type] -- [description]
"""

if len(self.time_index) > 0:
return str(min(self.time_index))[0:10]
else:
print(
RuntimeWarning(
'QAACCOUNT: THIS ACCOUNT DOESNOT HAVE ANY TRADE'
if self.start_==None:
if len(self.time_index) > 0:
return str(min(self.time_index))[0:10]
else:
print(
RuntimeWarning(
'QAACCOUNT: THIS ACCOUNT DOESNOT HAVE ANY TRADE'
)
)
)
else:
return self.end_

@property
def end_date(self):
Expand All @@ -516,16 +522,17 @@ def end_date(self):
Returns:
[type] -- [description]
"""

if len(self.time_index) > 0:
return str(max(self.time_index))[0:10]
else:
print(
RuntimeWarning(
'QAACCOUNT: THIS ACCOUNT DOESNOT HAVE ANY TRADE'
if self.start_==None:
if len(self.time_index) > 0:
return str(max(self.time_index))[0:10]
else:
print(
RuntimeWarning(
'QAACCOUNT: THIS ACCOUNT DOESNOT HAVE ANY TRADE'
)
)
)

else:
return self.end_
@property
def market_data(self):
return self._market_data
Expand Down Expand Up @@ -647,9 +654,8 @@ def trade(self):
def daily_cash(self):
'每日交易结算时的现金表'
res = self.cash_table.drop_duplicates(subset='date', keep='last')

return pd.concat([res.set_index('date'), pd.Series(data=None, index=pd.to_datetime(self.trade_range).set_names('date'), name='predrop')], axis=1)\
.ffill().drop(['predrop'], axis=1).reset_index().set_index(['date', 'account_cookie'], drop=False).sort_index()
res_=pd.concat([res.set_index('date'), pd.Series(data=None, index=pd.to_datetime(self.trade_range).set_names('date'), name='predrop')], axis=1).ffill()
return res_.fillna(self.init_cash).drop(['predrop','datetime','account_cookie'], axis=1).reset_index().set_index(['date'],drop=False).sort_index()

@property
def daily_hold(self):
Expand All @@ -668,13 +674,13 @@ def daily_hold(self):
res = data[~data.index.duplicated(keep='last')].sort_index()
# 这里会导致股票停牌时的持仓也被计算 但是计算market_value的时候就没了
return pd.concat([res.reset_index().set_index('date'), pd.Series(data=None, index=pd.to_datetime(self.trade_range).set_names('date'), name='predrop')], axis=1)\
.ffill().drop(['predrop'], axis=1).reset_index().set_index(['date', 'account_cookie']).sort_index()
.ffill().fillna(0).drop(['predrop','account_cookie'], axis=1).reset_index().set_index(['date']).sort_index()


@property
def daily_frozen(self):
'每日交易结算时的持仓表'
return self.history_table.assign(date=pd.to_datetime(self.history_table.datetime)).set_index('date').resample('D').frozen.last()
return self.history_table.assign(date=pd.to_datetime(self.history_table.datetime)).set_index('date').resample('D').frozen.last().fillna(0)

@property
def latest_cash(self):
Expand Down

0 comments on commit c79e187

Please sign in to comment.