Baostock学习系列1:编辑函数验证某一天是否交易日check_is_trading_day()

本文介绍了如何改造Baostock的查询交易日函数,实现自定义的check_is_trading_day()函数,用于验证指定日期是否为交易日。通过效率验证,函数调用耗时约193毫秒,适用于数据分析需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对交易日查询函数改造

本篇主要是用针对 Baostock的API进行本地化的改造,以适用自己学习使用的需求。

官网说明

交易日查询:query_trade_dates()

方法说明:通过API接口获取股票交易日信息,可以通过参数设置获取起止年份数据,提供上交所1990-今年数据。 返回类型:pandas的DataFrame类型。

使用示例

import baostock as bs
import pandas as pd

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

#### 获取交易日信息 ####
rs = bs.query_trade_dates(start_date="2017-01-01", end_date="2017-06-30")
print('query_trade_dates respond error_code:'+rs.error_code)
print('query_trade_dates respond  error_msg:'+rs.error_msg)

#### 打印结果集 ####
data_list = <
from jqdata import * def initialize(context): # 策略初始化设置 set_params(context) # 设置参数 set_backtest() # 设置回测条件 def set_params(context): # 配置策略参数 context.stock_pool = [ {'code': '399673.XSHE', 'name': '创业板50'}, {'code': '000688.XSHG', 'name': '科创50'}, {'code': '399303.XSHE', 'name': '国证2000'} ] context.bond_code = '000012.XSHG' # 国债指数 context.cy_index = '399006.XSHE' # 创业板指 context.ma_days = 20 # 均线周期 context.rank_days = 20 # 排名计算周期 context.sell_ma = 10 # 卖出均线周期 def set_backtest(): # 回测设置 set_benchmark('399673.XSHE') set_option('use_real_price', True) set_order_cost(OrderCost( open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5 ), type='stock') def handle_data(context, data): # 每日交易逻辑 if not is_trading_day(context): return check_sell_condition(context, data) # 持仓时判断平仓 check_buy_condition(context, data) # 空仓时判断开仓 def is_trading_day(context): # 判断是否交易日 return not (context.current_dt.hour == 15 and context.current_dt.minute == 0) def check_sell_condition(context, data): # 平仓条件判断 for stock in context.portfolio.positions: if stock.code == context.bond_code: continue current_price = data[stock.code].close ma10 = get_ma(stock.code, context.sell_ma, data) if current_price < ma10: clear_position(context, stock.code) log.info(f"触发平仓条件:{stock.code} 价格跌破10日均线") def check_buy_condition(context, data): # 开仓条件判断 if len(context.portfolio.positions) > 0: return # 大盘择时判断 cy_price = data[context.cy_index].close cy_ma20 = get_ma(context.cy_index, context.ma_days, data) if cy_price <= cy_ma20: return # 计算标的排名 ranked_stocks = [] for stock in context.stock_pool: current_price = data[stock['code']].close ma20 = get_ma(stock['code'], context.rank_days, data) ratio = (current_price - ma20) / ma20 ranked_stocks.append((stock, ratio)) # 按涨幅排序 ranked_stocks.sort(key=lambda x: x[1], reverse=True) target_stock = ranked_stocks[0][0] # 开仓条件验证 current_price = data[target_stock['code']] cy_ma20 = get_ma(context.cy_index, context.ma_days, data) NameError: name 'get_ma' is not defined
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值