这段代码的功能是获取excel中的股票列表,然后进行买入操作。
但使用xtdata.get_market_data_ex()获取不到数据,编程小白,请大佬帮忙看看是什么问题。
# encoding:gbk
import pandas as pd
import os
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant
# 指定包含Excel文件的文件夹路径
folder_path = 'C:\\stocklist'
# 初始化一个空列表来存储所有股票信息,每个元素是一个包含股票代码和名称的元组
all_stocks = []
# 获取文件夹中的Excel文件
excel_files = [f for f in os.listdir(folder_path) if
f.endswith('.xlsx') or f.endswith('.xls') and not f.startswith('~$')]
# 尝试读取每个Excel文件
for filename in excel_files:
file_path = os.path.join(folder_path, filename)
try:
df = pd.read_excel(file_path)
# 假设股票名称和代码分别在列名为'股票简称'和'股票代码'的列
# 提取这两列数据
stock_names = df['股票简称'].tolist()
stock_codes = df['股票代码'].tolist()
# 将提取出的股票代码和名称组合成元组,并添加到all_stocks列表中
for code, name in zip(stock_codes, stock_names):
# 检查股票代码和名称是否为有效值
if code not in ['undefined', '数据来源于:i问财网站(iwencai.com)'] and name not in ['undefined']:
all_stocks.append((code, name))
except Exception as e:
print(f"无法读取文件 {filename}: {e}")
# 打印所有提取出的股票信息
print("所有股票信息:")
for stock in all_stocks:
print(stock)
# 打印股票数量
print(f"总共提取到 {len(all_stocks)} 只股票信息。")
# QMT平台相关参数
path = 'C:\\国金QMT交易端模拟\\userdata_mini' # 国金QMT交易端模拟的路径
session_id = 11234567 # 会话编号,不同的Python策略需要使用不同的会话编号
account_id = '36275303' # 您的资金账号
# 创建XtQuantTrader实例
xt_trader = XtQuantTrader(path, session_id)
# 创建资金账号对象
acc = StockAccount(account_id)
# 创建交易回调类对象,并声明接收回调
class MyXtQuantTraderCallback(XtQuantTraderCallback):
def on_disconnected(self):
print("连接断开")
def on_account_status(self, status):
print("账号状态:", status)
def on_stock_order(self, order):
print(f"委托回报:{order.stock_code}, 订单状态:{order.order_status}, 订单编号:{order.order_sysid}")
# 注册回调
xt_trader.register_callback(MyXtQuantTraderCallback())
# 启动交易线程
xt_trader.start()
# 建立交易连接
connect_result = xt_trader.connect()
if connect_result != 0:
print("连接失败,错误码:", connect_result)
else:
print("连接成功")
# 订阅账号信息
xt_trader.subscribe(acc)
# 买入股票
for stock_code, _ in all_stocks:
print(f"\n正在查询股票:{stock_code} 的价格")
# 查询股票的最新价格
market_data = xtdata.get_market_data_ex(['lastPrice'], [stock_code], '1d', '', '', count = -1)
# 检查market_data是否包含数据
if market_data and stock_code in market_data and not market_data[stock_code].empty:
current_price = market_data[stock_code].iloc[0]['lastPrice']
volume = int(7000 / current_price) # 计算可以购买的股票数量
print(f"股票:{stock_code},当前价格:{current_price},可以购买数量:{volume}")
# 下单买入,这里使用市价买入
order_id = xt_trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY, volume, xtconstant.MARKET_BEST, 0,
"买入股票", "买入操作")
print(f"下单结果:{order_id}")
else:
print(f"未能获取到股票:{stock_code} 的价格信息")
# 阻塞线程,接收交易推送
xt_trader.run_forever()
C:\Users\23369\Desktop\qmt策略.venv\Scripts\python.exe C:\Users\23369\Desktop\qmt策略\模块测试.py
所有股票信息:
('000882.SZ', '华联股份')
('600292.SH', '远达环保')
('000886.SZ', '海南高速')
('600576.SH', '祥源文旅')
('601698.SH', '中国卫通')
('600172.SH', '黄河旋风')
('002878.SZ', '元隆雅图')
('603002.SH', '宏昌电子')
('000953.SZ', '河化股份')
('002584.SZ', '西陇科学')
总共提取到 10 只股票信息。
连接成功
正在查询股票:000882.SZ 的价格
xtdata连接成功
服务信息: {'tag': 'sp3', 'version': '1.0'}
服务地址: 127.0.0.1:58610
数据路径: C:\国金QMT交易端模拟\bin.x64/../userdata_mini/datadir
设置xtdata.enable_hello = False可隐藏此消息
未能获取到股票:000882.SZ 的价格信息
正在查询股票:600292.SH 的价格
未能获取到股票:600292.SH 的价格信息
正在查询股票:000886.SZ 的价格
未能获取到股票:000886.SZ 的价格信息
正在查询股票:600576.SH 的价格
未能获取到股票:600576.SH 的价格信息
正在查询股票:601698.SH 的价格
未能获取到股票:601698.SH 的价格信息
正在查询股票:600172.SH 的价格
未能获取到股票:600172.SH 的价格信息
正在查询股票:002878.SZ 的价格
未能获取到股票:002878.SZ 的价格信息
正在查询股票:603002.SH 的价格
未能获取到股票:603002.SH 的价格信息
正在查询股票:000953.SZ 的价格
未能获取到股票:000953.SZ 的价格信息
正在查询股票:002584.SZ 的价格
未能获取到股票:002584.SZ 的价格信息