Skip to content

Commit

Permalink
Merge f5626fd into 34b2404
Browse files Browse the repository at this point in the history
  • Loading branch information
AngusWG committed Sep 8, 2020
2 parents 34b2404 + f5626fd commit b015aea
Show file tree
Hide file tree
Showing 36 changed files with 141 additions and 190 deletions.
1 change: 1 addition & 0 deletions rqalpha/__init__.py
Expand Up @@ -17,6 +17,7 @@
"""
from rqalpha.cmds import cli
from rqalpha.api import export_as_api
from rqalpha.apis import subscribe_event
from . import data
from . import interface
from . import portfolio
Expand Down
2 changes: 1 addition & 1 deletion rqalpha/apis/api_abstract.py
Expand Up @@ -18,7 +18,7 @@
from typing import Union, Optional, List

from rqalpha.api import export_as_api
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.const import EXECUTION_PHASE
from rqalpha.model.instrument import Instrument
from rqalpha.model.order import MarketOrder, LimitOrder, OrderStyle, Order
Expand Down
6 changes: 3 additions & 3 deletions rqalpha/apis/api_base.py
Expand Up @@ -27,7 +27,7 @@

from rqalpha.apis import names
from rqalpha.environment import Environment
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.utils import is_valid_price
from rqalpha.utils.exception import RQInvalidArgument
from rqalpha.utils.i18n import gettext as _
Expand All @@ -40,7 +40,7 @@
EXECUTION_PHASE, ORDER_STATUS, SIDE, POSITION_EFFECT, ORDER_TYPE, MATCHING_TYPE, RUN_TYPE, POSITION_DIRECTION,
)
from rqalpha.model.order import Order, MarketOrder, LimitOrder, OrderStyle
from rqalpha.events import EVENT, Event
from rqalpha.core.events import EVENT, Event
from rqalpha.core.strategy_context import StrategyContext
from rqalpha.portfolio.position import Position

Expand Down Expand Up @@ -389,7 +389,7 @@ def history_bars(
include_now=False,
adjust_type="pre",
):
# type: (str, int, str, Optional[str], Optional[bool], Optional[bool], Optional[str]) -> np.ndarray
# type:(str, int, str, Optional[Union[str, List[str]]], Optional[bool], Optional[bool], Optional[str]) -> np.ndarray
"""
获取指定合约的历史 k 线行情,同时支持日以及分钟历史数据。不能在init中调用。
Expand Down
2 changes: 1 addition & 1 deletion rqalpha/apis/api_rqdatac.py
Expand Up @@ -25,7 +25,7 @@
VALID_HISTORY_FIELDS, VALID_MARGIN_FIELDS, VALID_SHARE_FIELDS, VALID_TURNOVER_FIELDS,
VALID_CURRENT_PERFORMANCE_FIELDS, VALID_STOCK_CONNECT_FIELDS,
)
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.environment import Environment
from rqalpha.utils.arg_checker import apply_rules, verify_that
from rqalpha.utils.exception import RQInvalidArgument
Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion rqalpha/core/executor.py
Expand Up @@ -18,7 +18,7 @@
from copy import copy
from datetime import datetime

from rqalpha.events import EVENT, Event
from rqalpha.core.events import EVENT, Event
from rqalpha.utils.rq_json import convert_dict_to_json, convert_json_to_dict
from rqalpha.utils.logger import system_log

Expand Down
4 changes: 2 additions & 2 deletions rqalpha/core/strategy.py
Expand Up @@ -17,11 +17,11 @@

from functools import wraps

from rqalpha.events import EVENT, Event
from rqalpha.core.events import EVENT, Event
from rqalpha.utils.logger import user_system_log
from rqalpha.utils.i18n import gettext as _
from rqalpha.utils.exception import ModifyExceptionFromType
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.const import EXECUTION_PHASE, EXC_TYPE
from rqalpha.environment import Environment

Expand Down
2 changes: 1 addition & 1 deletion rqalpha/core/strategy_universe.py
Expand Up @@ -16,7 +16,7 @@
import json
import copy

from rqalpha.events import EVENT, Event
from rqalpha.core.events import EVENT, Event
from rqalpha.environment import Environment
from rqalpha.model.instrument import Instrument

Expand Down
2 changes: 1 addition & 1 deletion rqalpha/data/bar_dict_price_board.py
Expand Up @@ -16,7 +16,7 @@

from rqalpha.interface import AbstractPriceBoard
from rqalpha.environment import Environment
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.const import EXECUTION_PHASE


Expand Down
2 changes: 1 addition & 1 deletion rqalpha/data/base_data_source/data_source.py
Expand Up @@ -95,7 +95,7 @@ def register_instruments_store(self, instruments_store):
self._instruments.extend(instruments_store.get_all_instruments())

def register_dividend_store(self, instrument_type, dividend_store):
# type: (INSTRUMENT_TYPE, DividendStore) -> None
# type: (INSTRUMENT_TYPE, AbstractDividendStore) -> None
self._dividends[instrument_type] = dividend_store

def register_split_store(self, instrument_type, split_store):
Expand Down
22 changes: 19 additions & 3 deletions rqalpha/data/base_data_source/storage_interface.py
Expand Up @@ -16,13 +16,15 @@
# 详细的授权流程,请联系 public@ricequant.com 获取。

import abc
from typing import List, Sequence, Optional
from typing import List
from typing import Optional
from typing import Sequence

import pandas
import numpy as np
import pandas

from rqalpha.utils.typing import DateLike
from rqalpha.model.instrument import Instrument
from rqalpha.utils.typing import DateLike


class AbstractInstrumentStore:
Expand Down Expand Up @@ -55,3 +57,17 @@ def contains(self, order_book_id, dates):
# type: (str, Sequence[DateLike]) -> Optional[List[bool]]
# 若 DateSet 中不包含该 order_book_id 的信息则返回 None,否则返回 List[bool]
raise NotImplementedError


class AbstractDividendStore:
@abc.abstractmethod
def get_dividend(self, order_book_id):
# type: (str) -> np.ndarray
raise NotImplementedError


class AbstractSimpleFactorStore:
@abc.abstractmethod
def get_factors(self, order_book_id):
# type: (str) -> np.ndarray
raise NotImplementedError
7 changes: 5 additions & 2 deletions rqalpha/data/base_data_source/storages.py
Expand Up @@ -21,6 +21,8 @@
import codecs
import pickle
from copy import copy

from rqalpha.data.base_data_source.storage_interface import AbstractSimpleFactorStore
from rqalpha.utils.functools import lru_cache

import json
Expand All @@ -34,6 +36,7 @@
from rqalpha.model.instrument import Instrument

from .storage_interface import AbstractCalendarStore, AbstractInstrumentStore, AbstractDayBarStore, AbstractDateSet
from .storage_interface import AbstractDividendStore


class ExchangeTradingCalendarStore(AbstractCalendarStore):
Expand Down Expand Up @@ -161,7 +164,7 @@ def get_date_range(self, order_book_id):
return 20050104, 20050104


class DividendStore:
class DividendStore(AbstractDividendStore):
def __init__(self, path):
self._h5 = open_h5(path, mode="r")

Expand Down Expand Up @@ -200,7 +203,7 @@ def get_yield_curve(self, start_date, end_date, tenor):
return df


class SimpleFactorStore:
class SimpleFactorStore(AbstractSimpleFactorStore):
def __init__(self, path):
self._h5 = open_h5(path, mode="r")

Expand Down
2 changes: 1 addition & 1 deletion rqalpha/environment.py
Expand Up @@ -21,7 +21,7 @@


import rqalpha
from rqalpha.events import EventBus
from rqalpha.core.events import EventBus
from rqalpha.const import INSTRUMENT_TYPE
from rqalpha.utils.logger import system_log, user_log, user_system_log
from rqalpha.core.global_var import GlobalVars
Expand Down
2 changes: 1 addition & 1 deletion rqalpha/examples/extend_api/rqalpha_mod_extend_api_demo.py
Expand Up @@ -40,7 +40,7 @@ def tear_down(self, code, exception=None):

def _inject_api(self):
from rqalpha.api import export_as_api
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.const import EXECUTION_PHASE

@export_as_api
Expand Down
100 changes: 0 additions & 100 deletions rqalpha/interface.py
Expand Up @@ -30,104 +30,6 @@
from rqalpha.const import POSITION_DIRECTION, TRADING_CALENDAR_TYPE


class AbstractAccount(with_metaclass(abc.ABCMeta)):
"""
账户接口,主要用于构建账户信息
"""

@abc.abstractmethod
def calc_close_today_amount(self, order_book_id, trade_amount, position_direction):
# type: (str, Union[int, float], POSITION_DIRECTION) -> Union[int, float]
"""
根据计算当前不超过 trade_amount 的最大可平仓量
"""
raise NotImplementedError

@abc.abstractmethod
def get_state(self):
# type: () -> Any
"""
主要用于进行持久化时候,提供对应需要持久化的数据
"""
raise NotImplementedError

@abc.abstractmethod
def set_state(self, state):
# type: (Any) -> None
"""
主要用于持久化恢复时,根据提供的持久化数据进行恢复Account的实现
"""
raise NotImplementedError

@abc.abstractmethod
def get_positions(self):
# type: () -> Iterable[AbstractPosition]
"""
获取当前账户下的全部持仓对象
"""
raise NotImplementedError

@abc.abstractmethod
def get_position(self, order_book_id, direction):
# type: (str, POSITION_DIRECTION) -> AbstractPosition
"""
根据指定的 order_book_id 和方向获取持仓对象
"""
raise NotImplementedError

@property
@abc.abstractmethod
def frozen_cash(self):
# type: () -> Union[int, float]
"""
返回当前账户的冻结资金
"""
raise NotImplementedError

@property
@abc.abstractmethod
def cash(self):
# type: () -> Union[int, float]
"""
返回当前账户的可用资金
"""
raise NotImplementedError

@property
@abc.abstractmethod
def market_value(self):
# type: () -> Union[int, float]
# 返回当前账户的市值
raise NotImplementedError

@property
@abc.abstractmethod
def total_value(self):
# type: () -> Union[int, float]
"""
返回当前账户的总权益
"""
raise NotImplementedError

@property
@abc.abstractmethod
def transaction_cost(self):
# type: () -> Union[int, float]
"""
返回当前账户的当日交易费用
"""
raise NotImplementedError

@property
@abc.abstractmethod
def daily_pnl(self):
# type: () -> Union[int, float]
"""
返回当前账户的当日盈亏
"""
raise NotImplementedError


class AbstractPosition(with_metaclass(abc.ABCMeta)):
"""
仓位接口,主要用于构建仓位信息
Expand Down Expand Up @@ -677,15 +579,13 @@ class AbstractFrontendValidator(with_metaclass(abc.ABCMeta)):
"""
@abc.abstractmethod
def can_submit_order(self, order, account=None):
# type: (Order, Optional[AbstractAccount]) -> bool
"""
判断是否可以下单
"""
raise NotImplementedError

@abc.abstractmethod
def can_cancel_order(self, order, account=None):
# type: (Order, Optional[AbstractAccount]) -> bool
"""
判读是否可以撤单
"""
Expand Down
31 changes: 18 additions & 13 deletions rqalpha/main.py
Expand Up @@ -15,33 +15,32 @@
# 在此前提下,对本软件的使用同样需要遵守 Apache 2.0 许可,Apache 2.0 许可与本许可冲突之处,以本许可为准。
# 详细的授权流程,请联系 public@ricequant.com 获取。

import sys
import datetime
import sys
from pprint import pformat

import logbook
import jsonpickle.ext.numpy as jsonpickle_numpy
import logbook
import six

from rqalpha import const
from rqalpha.core.strategy_loader import FileStrategyLoader, SourceCodeStrategyLoader, UserFuncStrategyLoader
from rqalpha.core.executor import Executor
from rqalpha.core.strategy import Strategy
from rqalpha.core.strategy_context import StrategyContext
from rqalpha.core.executor import Executor
from rqalpha.core.strategy_loader import FileStrategyLoader, SourceCodeStrategyLoader, UserFuncStrategyLoader
from rqalpha.data.base_data_source import BaseDataSource
from rqalpha.data.data_proxy import DataProxy
from rqalpha.environment import Environment
from rqalpha.events import EVENT, Event
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.events import EVENT, Event
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.interface import Persistable
from rqalpha.mod import ModHandler
from rqalpha.model.bar import BarMap
from rqalpha.utils import create_custom_exception, RqAttrDict, init_rqdatac_env
from rqalpha.utils import RqAttrDict, create_custom_exception, init_rqdatac_env
from rqalpha.utils.exception import CustomException, is_user_exc, patch_user_exc
from rqalpha.utils.i18n import gettext as _
from rqalpha.utils.log_capture import LogCapture
from rqalpha.utils.logger import system_log, user_log, user_system_log
from rqalpha.utils.persisit_helper import PersistHelper
from rqalpha.utils.logger import system_log, user_system_log, user_log

jsonpickle_numpy.register_handlers()

Expand All @@ -59,7 +58,7 @@ def _adjust_start_date(config, data_proxy):
ValueError(
_(u"There is no data between {start_date} and {end_date}. Please check your"
u" data bundle or select other backtest period.").format(
start_date=origin_start_date, end_date=origin_end_date)))
start_date=origin_start_date, end_date=origin_end_date)))
config.base.start_date = config.base.trading_calendar[0].date()
config.base.end_date = config.base.trading_calendar[-1].date()

Expand Down Expand Up @@ -194,10 +193,16 @@ def run(config, source_code=None, user_funcs=None):

if persist_helper:
env.event_bus.publish_event(Event(EVENT.BEFORE_SYSTEM_RESTORED))
if persist_helper.restore(None):
user_system_log.info(_('system restored'))
else:
restored_obj_state = persist_helper.restore(None)
check_key = ["global_vars", "user_context", "executor", "universe"]
kept_current_init_data = not any(v for k, v in restored_obj_state.items() if k in check_key)
system_log.debug("restored_obj_state: {}".format(restored_obj_state))
system_log.debug("kept_current_init_data: {}".format(kept_current_init_data))
if kept_current_init_data:
# 未能恢复init相关数据 保留当前策略初始化变量(展示当前策略初始化日志)
log_capture.replay()
else:
user_system_log.info(_('system restored'))
env.event_bus.publish_event(Event(EVENT.POST_SYSTEM_RESTORED))

init_succeed = True
Expand Down
2 changes: 1 addition & 1 deletion rqalpha/mod/rqalpha_mod_sys_accounts/api/api_stock.py
Expand Up @@ -36,7 +36,7 @@
INSTRUMENT_TYPE
)
from rqalpha.environment import Environment
from rqalpha.execution_context import ExecutionContext
from rqalpha.core.execution_context import ExecutionContext
from rqalpha.model.instrument import (
Instrument, IndustryCode as industry_code, IndustryCodeItem, SectorCode as sector_code, SectorCodeItem
)
Expand Down

0 comments on commit b015aea

Please sign in to comment.