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

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

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

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

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

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

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

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

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

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

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

10、创建交易对象

11、连接miniqmt终端

12、订阅个人账户信息

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

13、查询账户信息

14、查询委托单信息

15、查询成交信息

16、查询持仓信息

然后运行一下,看下效果

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

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

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

cs 复制代码
// 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();
相关推荐
lifallen21 分钟前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研23 分钟前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi1 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
mit6.8241 小时前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python
没有bug.的程序员1 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋2 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cui__OaO2 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试2 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
AntBlack2 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
艾莉丝努力练剑3 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法