文章目录
前言
【量化平台入门系列】主要用于记录自学量化策略时的一些笔记,克隆学习聚宽平台大佬们展示的量化策略,逐行理解代码,最终达到自己写策略的目的。
以下关于代码的解释由AI【豆包】生成,非原创。
聚宽平台常用输入设置函数
set_option()
函数
在聚宽平台中,set_option()
函数用于设置一些运行选项。以下是关于如何使用set_option()
函数的方法:
一、函数语法
set_option(key, value)
key
:表示要设置的选项名称,是一个字符串。value
:表示为选项设置的值。
二、常见选项及用法
-
avoid_future_data=True
- 用途:避免使用未来数据。这在进行策略回测等操作时非常重要,确保结果的准确性。
- 示例:
set_option('avoid_future_data', True)
-
其他选项可根据具体的需求进行设置,不同的选项会对数据获取、回测运行等方面产生不同的影响。
三、注意事项
- 在使用
set_option()
函数时,要确保设置的选项是聚宽平台所支持的,并且了解每个选项的具体作用和影响。 - 选项的设置可能会影响到代码的性能和结果,因此在设置时需要谨慎考虑。
- 如果不确定某个选项的具体作用,可以查阅聚宽平台的官方文档以获取详细信息。
在聚宽平台中,除了avoid_future_data
之外,还有以下一些常见的设置选项:
一、显示设置类
display_progress=True/False
:控制是否显示运行进度条。如果设置为True
,在进行回测等耗时操作时会显示进度条,方便你了解运行进度。
二、数据获取设置类
show_progress=True/False
:控制在获取数据时是否显示进度信息。如果设置为True
,在下载数据等操作时会显示进度提示。enable_profile=True/False
:启用或禁用性能分析。如果设置为True
,可以在运行结束后查看代码的性能分析报告,了解各个部分的运行时间等信息,有助于优化策略。
三、运行模式设置类
run_daily=True/False
:设置是否以日为单位运行策略。如果设置为True
,在进行回测或模拟交易时,会按照每日的时间步长进行运行,而不是逐分钟或其他更细粒度的时间单位。run_once=True/False
:设置是否只运行一次策略。如果设置为True
,在某些特定场景下,比如只需要进行一次初始化操作或者只进行一次数据处理时,可以使用这个选项。
这些只是聚宽平台中的一部分常见设置选项,具体的选项和用法可以参考聚宽的官方文档,以获取更详细准确的信息。
这段代码在聚宽平台中用于设置股票交易的费用。具体解释如下:
set_order_cos()
函数
set_order_cost
函数用于设置交易成本。
一、函数语法
set_order_cost(order_cost, type)
-
order_cost
:是一个OrderCost
对象,用于定义不同类型交易的成本参数,包括开仓印花税、平仓印花税、开仓佣金、平仓佣金、平今仓佣金和最低佣金等。
这段代码在聚宽平台中用于设置股票交易的费用。具体解释如下: -
OrderCost
是一个用于定义交易成本的类。open_tax
表示开仓时的印花税,这里设置为 0。close_tax
表示平仓时的印花税,设置为 0.001,即千分之一。open_commission
表示开仓时的佣金,设置为 0.0001。close_commission
表示平仓时的佣金,也设置为 0.0001。close_today_commission
表示平今仓佣金,这里设置为 0。min_commission
表示最低佣金,设置为 5。
-
type='stock'
表示这个交易成本设置适用于股票类型的交易。
通过设置这些交易成本参数,可以更准确地模拟实际交易中的费用支出,从而在策略回测和模拟交易中得到更接近真实情况的结果。
二、创建OrderCost
对象
-
对于股票交易,例如:
from jqdata import OrderCost order_cost_stock = OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0001, close_commission=0.0001, close_today_commission=0, min_commission=5) set_order_cost(order_cost_stock, type='stock')
这里设置了股票交易的开仓印花税为 0,平仓印花税为千分之一,开仓和平仓佣金均为万分之一,平今仓佣金为 0,最低佣金为 5。
-
对于期货交易,参数会有所不同,比如可能没有印花税,但有手续费等:
order_cost_futures = OrderCost(open_commission=2, close_commission=2, close_today_commission=3, min_commission=0) set_order_cost(order_cost_futures, type='futures')
假设设置期货交易的开仓和平仓手续费均为 2,平今仓手续费为 3,最低佣金为 0。
三、注意事项
- 准确设置交易成本对于策略回测和模拟交易的准确性非常重要,因为实际交易中成本会对收益产生影响。
- 不同的交易品种和市场可能有不同的交易成本结构,需要根据实际情况进行合理设置。
- 在使用
set_order_cost
函数之前,最好先了解聚宽平台对于交易成本参数的具体要求和默认值,以便进行适当的调整。
run_monthly run_daily 函数
在聚宽平台中,run_monthly
函数用于每月在特定时间运行一个指定的函数。
一、函数语法
run_monthly(func, monthday, time, reference_security)
func
:要执行的函数,通常是包含交易策略逻辑的函数。monthday
:每月执行的日期,可以是整数,表示每月的第几天;也可以是一个字符串,如’1stfri’表示每月第一个星期五。time
:执行的时间,格式为字符串,如’09:30’。reference_security
:参考证券,用于确定交易时间,通常是一个股票代码或指数代码。
二、功能用途
- 定期执行策略:可以设置每月在固定的日期和时间执行交易策略,方便进行定期的投资组合调整、资产再平衡或特定策略的执行。
- 例如,每月月初对投资组合进行重新评估和调整权重,以适应市场变化。
- 时间控制:通过指定具体的时间,可以在市场较为稳定或特定的交易时段执行策略,避免在市场波动剧烈或不确定的时段进行交易。
- 比如在上午开盘后的一段时间,市场流动性较好,可以执行一些需要快速成交的策略。
- 自动化交易:结合其他聚宽的功能和函数,可以实现自动化的量化交易流程,无需手动干预即可每月定期执行策略。
三、示例用法
以下是一个简单的示例,展示如何使用run_monthly
函数:
def my_strategy():
# 这里是你的交易策略逻辑
print("执行交易策略")
run_monthly(my_strategy, 1, '09:30')
在这个例子中,my_strategy
函数将在每月的第一天上午 9 点 30 分被执行。
四、注意事项
- 确保函数的正确性和稳定性:由于
run_monthly
函数会自动定期执行指定的函数,所以要确保函数中的交易策略逻辑经过充分的测试和验证,以避免出现错误或异常情况。 - 考虑市场情况和节假日:在设置执行日期和时间时,要考虑市场的交易时间和节假日安排。如果执行时间落在非交易日或市场休市时间,函数将不会被执行。
- 性能和效率:如果交易策略逻辑比较复杂或执行时间较长,可能会影响程序的性能和效率。可以优化策略代码,提高执行速度,以确保在规定的时间内完成策略的执行。
get_current_data 函数
在聚宽平台中,get_current_data
函数用于获取当前的市场数据。
一、函数功能
-
实时数据获取:可以获取当前市场中各种证券的实时价格、成交量、涨跌幅等信息。例如,可以使用这个函数获取某只股票的当前价格,以便在交易策略中进行判断和决策。
def handle_data(context): current_data = get_current_data() stock_price = current_data['AAPL'].last_price # 根据股票价格进行交易决策
-
数据筛选:可以根据特定的条件筛选出符合要求的证券。例如,可以筛选出当前涨幅大于一定百分比的股票,或者成交量大于一定值的股票。
def handle_data(context): current_data = get_current_data() high_gain_stocks = [stock for stock in current_data if current_data[stock].pct_change > 0.05] # 对涨幅较大的股票进行进一步分析
-
数据更新:在每个交易周期(例如每分钟、每天等),可以使用这个函数获取最新的市场数据,以便及时更新交易策略。例如,如果策略依赖于股票的实时价格和成交量变化,就需要定期使用
get_current_data
获取最新数据。def handle_data(context): current_data = get_current_data() for stock in context.portfolio.positions: if current_data[stock].last_price > context.portfolio.positions[stock].cost_basis * 1.1: # 如果股票价格上涨超过 10%,进行卖出操作
二、参数和返回值
这个函数通常不需要参数,返回一个包含当前市场数据的字典。字典的键是证券代码,值是一个包含该证券各种属性的对象。例如,对于股票,这个对象可能包含last_price
(最新价格)、pct_change
(涨跌幅)、volume
(成交量)等属性。
三、注意事项
- 数据准确性:虽然
get_current_data
提供了实时的市场数据,但在实际使用中,可能会受到数据延迟、错误等因素的影响。因此,在使用这些数据进行交易决策时,需要考虑数据的准确性和可靠性。 - 性能影响:频繁地调用
get_current_data
可能会对程序的性能产生一定的影响,特别是在高频率交易策略中。因此,需要根据实际情况合理控制调用频率,以避免影响程序的运行效率。 - 数据范围:
get_current_data
返回的数据通常是当前市场上可交易的证券的数据。如果需要获取其他类型的数据(如历史数据、基本面数据等),可能需要使用其他函数。
get_fundamentals 函数
在聚宽平台中,get_fundamentals
函数用于获取基本面数据。其语法如下:
get_fundamentals(query, date=None, statDate=None)
主要参数解释如下:
一、query
这是一个必填参数,用于指定要查询的基本面数据内容和筛选条件。通常使用query
函数来构建查询对象。例如:
query(valuation.code, valuation.pe_ratio).filter(valuation.code.in_(stocks))
这里查询了股票的代码和市盈率,并通过.filter
方法进一步筛选出特定股票列表中的股票。
可以查询的基本面数据包括但不限于:
valuation
:估值相关数据,如市值、市盈率、市净率等。indicator
:财务指标数据,如营业收入、净利润、毛利率等。balance_sheet
:资产负债表相关数据。income_statement
:利润表相关数据。
二、date
可选参数,指定查询数据的日期。如果不指定,默认为当前日期。可以传入一个字符串格式的日期,如’2023-10-30’。
三、statDate
可选参数,指定财报统计日期。如果不指定,会根据具体情况自动选择合适的财报日期。可以传入一个字符串格式的日期,如’20230630’表示查询 2023 年中报数据。
使用示例:
# 查询特定股票在特定日期的市盈率和市净率
query_result = get_fundamentals(query(valuation.code, valuation.pe_ratio, valuation.pb_ratio).filter(valuation.code == 'AAPL'), date='2023-10-30')
通过调整参数,可以灵活地获取不同股票、不同日期和不同类型的基本面数据,为量化交易策略提供重要的参考依据。
get_security_info函数
在聚宽平台中,get_security_info
函数用于获取证券的详细信息。
一、函数语法
get_security_info(code)
其中,code
是证券代码,可以是股票代码、基金代码等。
二、返回值
该函数返回一个Security
对象,包含了证券的各种属性信息,主要属性如下:
display_name
:证券的中文名称。name
:证券的英文名称。start_date
:证券上市日期。end_date
:证券退市日期(如果已退市)。type
:证券类型,如’stock’(股票)、‘fund’(基金)等。unit
:交易单位,例如股票通常是 100(表示每手 100 股)。
三、功能用途
-
信息查询:在量化交易策略中,可以通过这个函数获取证券的基本信息,以便进行进一步的分析和决策。例如,在判断是否可以交易某只股票时,可以先获取其上市日期和退市日期,确保该股票处于可交易状态。
stock_info = get_security_info('AAPL') if stock_info.start_date < context.current_dt and (stock_info.end_date is None or stock_info.end_date > context.current_dt): # 股票处于可交易状态,可以进行后续操作
-
数据展示:在生成交易报告或进行可视化时,可以使用这个函数获取证券的名称等信息,以便更好地展示交易结果。
stock_info = get_security_info(stock_code) plt.title(f'{stock_info.display_name} 交易分析')
四、注意事项
- 证券代码正确性:确保传入的证券代码是正确的,否则函数将返回错误的结果或者引发异常。
- 数据时效性:证券的信息可能会随着时间变化而变化,特别是上市、退市等状态。在使用函数获取的信息进行决策时,要考虑到数据的时效性。