【从零开始玩量化7】easyTrader: 自动化(程序化)交易利器

简介

Github地址:https://github.com/shidenggui/easytrader

前面的文章,我们介绍了数据获取工具AKShare, 量化回测工具backtrader等,这一篇,介绍程序化交易工具easyTrader。作者网名食灯鬼,目前项目在Github上的star数已经有6.7k。这可能是目前,开源能找到的,最好用的程序化交易库了。

原理

程序化交易,听起来似乎很高深,其实窗户纸捅破,逻辑很简单。普通开发者(或投资者),不可能拥有现成的程序化交易接口,我们的监管在这方面是很谨慎的。那转换下思路,我们手动下单用什么,不管是用PC或者手机,无非也是用某个股票软件,登录交易界面,输入价格和数量,点击买卖按钮。那这个过程,其实是可以用程序模拟的,我们可以用程序模拟鼠标和键盘的输入,原理类似精灵。

pywinauto

Github地址:https://github.com/pywinauto/pywinauto

翻看easyTrader源码,可以看到,其使用了一个叫做pywinauto的库。根据pywinauto官网的解释,这是一个Windows GUI自动化库,提供了一套GUI自动化的解决方案。也就是说,easyTrader是基于Windows平台运行的。

最终的效果就是,我们可以通过程序操控鼠标和键盘,操控各种交易客户端的进行交易。

实战案例

说不如做,直接开搞!我们以同花顺通用客户端为例。

安装easytrader

首先,找一台Windows电脑,安装easytrader。

pip install easytrader

安装同花顺

去官网下载最新版同花顺客户端,免费版即可,安装完成后,在安装文件夹中找到xiadan.exe这个执行文件,就是下图中的文件。
在这里插入图片描述
双击打开,并登录你的交易账号,可以看到这样一个对话框,网上股票交易系统5.0。
在这里插入图片描述

脚本程序

程序很简单,连接上边的客户端,然后打印账户信息。

import easytrader

user = easytrader.use('ths')

user.connect(r'D:\同花顺软件\同花顺\xiadan.exe')

print(user.balance)

在实际启动时,可能会提示错误ModuleNotFoundError: No module named 'win32api',原因的是未安装pypiwin32包,执行下边命令安装。

pip install pypiwin32

之后,再次启动脚本,可以看到结果。有一个警告,是因为我的Python是64位的,但并未造成问题,可以看到账户信息被成功打印。

在这里插入图片描述

结语

本文介绍了easyTrader的简单用法,这个包还有很多功能,后续再继续写文章探究。

### C++ 中 `std::pair` 的用法 在 C++ 标准库中,`std::pair` 是一种简单的数据结构,用于存储两个具有不同类型的值。它通常被用来表示键值对或者组合两种不同类型的数据。 #### 创建和初始化 `std::pair` 可以通过多种方式创建并初始化一个 `std::pair` 对象: ```cpp #include <utility> // std::pair 头文件 // 使用直接构造函数 std::pair<int, double> p1(10, 3.14); // 使用 make_pair 函数 (推荐) auto p2 = std::make_pair(20, 2.718); // 自定义初始化语法 (C++11 及以上版本支持) std::pair<int, std::string> p3{30, "hello"}; ``` 上述代码展示了三种不同的方法来创建 `std::pair` 实例[^4]。 #### 访问 `std::pair` 成员 `std::pair` 提供了 `.first` 和 `.second` 来访问其成员变量: ```cpp int key = p1.first; double value = p1.second; std::cout << "Key: " << key << ", Value: " << value << std::endl; ``` 这段代码演示如何通过 `.first` 和 `.second` 获取 `std::pair` 存储的两个值[^1]。 #### 在容器中的应用 `std::pair` 常常与其他标准容器一起使用,比如 `std::map` 或者作为自定义数据结构的一部分。下面是一个例子展示如何在 `std::vector<std::pair>` 中操作: ```cpp #include <iostream> #include <vector> int main() { std::vector<std::pair<int, std::string>> vec{ {1, "apple"}, {2, "banana"}, {3, "cherry"} }; for (const auto& elem : vec) { std::cout << "Index: " << elem.first << ", Fruit: " << elem.second << "\n"; } return 0; } ``` 此程序片段说明了如何在一个向量中存储多个 `std::pair` 并对其进行迭代输出。 #### 结合范围 for 循环遍历 map 正如前面提到的那样,在处理关联容器如 `std::map` 时,可以利用范围 for 循环轻松地遍历其中的内容: ```cpp #include <iostream> #include <map> int main() { std::map<int, std::string> my_map{{1, "one"}, {2, "two"}, {3, "three"}}; for (const auto& pair : my_map) { std::cout << "Key: " << pair.first << ", Value: " << pair.second << '\n'; } return 0; } ``` 这里再次强调了如何结合范围 for 循环以及 `std::pair` 遍历整个映射表。 ---
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化投资技术

支持一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值