python程序结构框架_量化程序结构解析

def initialize(context):

#

设置一个股票池,getStocks用来做选股函数

g.MAXOFPOOL = 20

initialize函数是必须架构,注意该函数的参数context,当用log.info(context)

显示该变量内容时得到以下输出结构:

- UserContext({'current_dt': datetime.datetime(2016, 7,

13, 9, 20), 'portfolio': Portfolio({'_unsell_positions': {},

'portfolio_value': 20000.0, 'cash': 20000.0, 'starting_cash':

20000.0, 'returns': 0.0, 'capital_used': 0.0, 'positions': {},

'positions_value': 0}), 'previous_date': datetime.date(2016, 7,

12), 'run_params': RunParams({'frequency': u'day', 'type':

'simple_backtest', 'start_date': datetime.date(2016, 7, 13),

'end_date': datetime.date(2016, 7, 14)}), 'universe':

[]})

​可以理解这是量化程序的公共区,存放该量化程序的公共变量

注意​initialize如果在回测时并不会每个时间点都执行,而是在最开始执行该逻辑,所以如果在initialize内就选好股票范围,那么回测时该选股范围就不会随着每天的数据发生动态变化。

比如:

def initialize(context):

#

设置一个股票池,getStocks用来做选股函数

g.MAXOFPOOL = 20

g.stocks =

getStocks(context)

# 设置所有可能要买的股票集

set_universe(g.stocks)

和以下逻辑比对

def initialize(context):

#

设置一个股票池,getStocks用来做选股函数

g.MAXOFPOOL =

20

# 代码块-2

# 这个函数也是必须定义的,每个交易时间间隔都要执行一次

def handle_data(context, data):

#注意公共变量要在调用函数之前定义

g.stocks =

getStocks(context)

#

设置所有可能要买的股票集

set_universe(g.stocks)

逻辑段handle_data是每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次,则后面的代码段可以实现动态市值选股,前者逻辑段只能按第一天的市值选股

set_universe​​是聚宽提供的API,有关API的定义聚宽都已经给出了详细解释和说明,

​综合说明,一个策略必须包含初始段initialize和每时间点逻辑段handle_data,也可以自行定义如下函数getStocks用来实现指定功能,并优化整个量化程序的功能结构。

def getStocks(context):

# 获取所有的股票

你可能感兴趣的:(python程序结构框架)