当前位置: 首页 > news >正文

.NET+Python量化【1】——环境部署和个人资金账户信息查询

前言:量化资料很少,.NET更少。那我就来开个先河吧~ 以下是使用QMT进行量化开发的环境部署和基础信息获取有关操作。

1、首先自己申请券商的QMT权限,此步骤省略。

2、登陆QMT,选择极简模式,或者独立交易模式之类的。会进入到miniQMT里面。

3、安装python环境,环境版本随意。我本地是3.10版本。此步骤省略。

4、创建一个.net项目,用来测试使用。我此处使用的.net 8环境进行测试。

e9f3e36d30351dc43bf3203dda9d59a2.png

5、使用miniqmt,需要和xtquant库进行通信,所以需要安装xtquant包。如图,xtquant包下载时候,也会自动下载有关依赖,例如包括常用的pandas、numpy等包。

410ffbd13f7d2540442e33fa0a9b250b.png

6、.NET程序引用包 pythonnet,并且python环境也要安装pythonnet环境:pip install pythonnet

dd4237a1b8736877e7e5869c3329233e.png

7、设置python解释器路径,以及初始化

6bb5ef7b50b67b28455ca0d1a96372b7.png

8、引用需要用到的一些python包:

a7182fb4ab8a600c6af3f9fe2aefd40f.png

9、设置个人账户的信息,包括你的QMT安装路径、QMT个人账户

b879756b8b928d530a2af754730baa98.png

10、创建交易对象

71c7f8407352fade9406db1bc8b5b929.png

11、连接miniqmt终端

efc3ad71a16c01891375265c13ded473.png

12、订阅个人账户信息

8b3783867df829c545979d71551bc775.png

以上是基础操作,需要保证账户订阅成功,才可以继续开发后续的其他信息的订阅。

13、查询账户信息

06e71f4b788df169d598b9e03ec443cc.png

14、查询委托单信息

4bb4fa2c7f87861359b7e828c4b3bb42.png

15、查询成交信息

e462fd20df370809e850772b67df0622.png

16、查询持仓信息

0d932c14b315c51a2b0f7abc2d0416a3.png

然后运行一下,看下效果

由于没有持仓和其他数据,所以只有个人账户的信息

7318a30a881e06d86198d2aee5dfa13a.png

QMT交易客户端也可以看到信息,信息是匹配的。

c6e26d101952aa484b4eeac67a54c1ba.png

其他信息,大家可以自行把玩。后续会看心情,更新一些量化爬坑开发经历,欢迎大佬们持续关注~ 以上测试有关具体代码如下:

// See https://aka.ms/new-console-template for more information
using Python.Runtime;
using System.Diagnostics;Console.WriteLine("Hello, World!");
// 设置 Python 解释器的 DLL 路径
string pythonDllPath = @"C:\Users\Wesky\AppData\Local\Programs\Python\Python310\python310.dll"; // Python 安装路径
Environment.SetEnvironmentVariable("PYTHONNET_PYDLL", pythonDllPath);
// 初始化 Python 引擎
PythonEngine.Initialize();using (Py.GIL())
{dynamic sys = Py.Import("sys");dynamic time = Py.Import("time");dynamic datetime = Py.Import("datetime");dynamic xtquant_xttrader = Py.Import("xtquant.xttrader");dynamic xttype = Py.Import("xtquant.xttype");string path = @"D:\XXXXX\userdata_mini"; // 你自己的QMT安装路径string acct = "xxxxx"; // 你自己的资金账户// 创建交易对象int session_id = (int)time.time();dynamic xt_trader = xtquant_xttrader.XtQuantTrader(path, session_id);// 连接 miniQMT 终端xt_trader.start();if (xt_trader.connect() == 0){Console.WriteLine("【终端连接成功!】");}else{Console.WriteLine("【终端连接失败!】请运行并登录miniQMT.EXE终端");return;}// 订阅账户信息dynamic ID = xttype.StockAccount(acct);int subscribe_result = xt_trader.subscribe(ID);if (subscribe_result == 0){Console.WriteLine("【账户信息订阅成功!】");}else{Console.WriteLine("【账户信息订阅失败!】 账户配置错误,检查账号是否正确。");sys.exit();return;}Console.WriteLine("************* 账户信息 *****************");dynamic asset = xt_trader.query_stock_asset(ID);if (asset != null){Console.WriteLine($"ID = {asset.account_id}");Console.WriteLine($"资产总额 = {asset.total_asset}");Console.WriteLine($"持仓市值 = {asset.market_value}");Console.WriteLine($"可用资金 = {asset.cash}");Console.WriteLine($"在途资金 = {asset.frozen_cash}");}// 委托信息Console.WriteLine("**************** 委托信息 **********************");foreach (dynamic order in xt_trader.query_stock_orders(ID, cancelable_only: true)){Console.WriteLine($"编号 = {order.order_id}");Console.WriteLine($"代码 = {order.stock_code}");Console.WriteLine($"委托 = {order.order_volume}");Console.WriteLine($"成交 = {order.traded_volume}");Console.WriteLine($"委价 = {order.price}");Console.WriteLine($"状态 = {order.order_status}");Console.WriteLine($"未成 = {order.order_volume - order.traded_volume}");Console.WriteLine($"报单时间 = {datetime.datetime.fromtimestamp(order.order_time).strftime("%H:%M:%S")}");}// 成交信息Console.WriteLine("**************** 成交 **********************");foreach (dynamic trade in xt_trader.query_stock_trades(ID)){Console.WriteLine($"代码 = {trade.stock_code}");Console.WriteLine($"成交 = {trade.traded_volume}");Console.WriteLine($"成交价 = {trade.traded_price}");Console.WriteLine($"成交额 = {trade.traded_amount}");Console.WriteLine($"订单编号 = {trade.order_id}");Console.WriteLine($"成交编号 = {trade.traded_id}");Console.WriteLine($"成交时间 = {datetime.datetime.fromtimestamp(trade.traded_time).strftime("%H:%M:%S")}");}// 持仓信息Console.WriteLine("**************** 持仓信息 **********************");foreach (dynamic position in xt_trader.query_stock_positions(ID)){Console.WriteLine($"代码:{position.stock_code}");Console.WriteLine($"持仓:{position.volume}");Console.WriteLine($"可用:{position.can_use_volume}");Console.WriteLine($"冻结:{position.frozen_volume}");Console.WriteLine($"开仓价格:{position.open_price}");Console.WriteLine($"市值:{position.market_value}");Console.WriteLine($"在途股份:{position.on_road_volume}");}
}Console.ReadLine();// 关闭 Python 引擎
PythonEngine.Shutdown();
http://www.lryc.cn/news/380023.html

相关文章:

  • 洛谷 P10584 [蓝桥杯 2024 国 A] 数学题(整除分块+杜教筛)
  • 深入讲解C++基础知识(一)
  • Python爬虫实战:批量下载网站图片
  • 使用 JavaScript 获取电池状态
  • java—类反射机制
  • 浏览器-服务器架构 (BS架构) 详解
  • 微型操作系统内核源码详解系列五(四):cm3下svc启动任务
  • 筛质数(暴力法、埃氏筛、欧拉筛)
  • 使用USI作为主SPI接口
  • AI播客下载:Eye on AI(AI深度洞察)
  • Flink 窗口触发器
  • Java面试题:解释线程间如何通过wait、notify和notifyAll方法进行通信
  • 【机器学习 复习】第9章 降维算法——PCA降维
  • Ubuntu系统docker gpu环境搭建
  • 网络安全-如何设计一个安全的API(安全角度)
  • 微积分-导数1(导数与变化率)
  • 最新PHP仿猪八戒任务威客网整站源码/在线接任务网站源码
  • Windows安装配置jdk和maven
  • 电子SOP实施(MQTT协议)
  • 【Unity导航系统】Navigation组件的概念及其使用示例
  • vue-cli 根据文字生成pdf格式文件 jsPDF
  • 【嵌入式DIY实例】-Nokia 5110显示DS3231 RTC数据
  • 【十三】图解mybatis缓存模块之装饰器模式
  • 字节大神强推千页PDF学习笔记,弱化学历问题,已拿意向书字节提前批移动端!
  • Python爬虫-贝壳二手房“改进版”
  • zookeeper学习、配置文件参数详解
  • SVG 模糊效果
  • Electron+vite+vuetify项目搭建
  • 洛谷:P1085 [NOIP2004 普及组] 不高兴的津津
  • Webpack4从入门到精通以及和webpack5对比_webpack现在用的是哪个版本