利用py自动购买股票(通过编程实现股票自动购买新股)

目的

有的时候工作忙,就忘记了股票的新股申购,虽然从来没有中过一只新股,但是就当买彩票了,因此采用自动化方式进行股票新股申购,以防止自己忘记。

实现架构方式

利用py自动购买股票

图1

1. 通过在网上下载的TdxTradeServer进行与券商的交互,实现股票账户登录、股票买卖。

2. 申购客户端调用TdxTradeServer提供的restful接口进行账户登录、新股申购。

3. 客户端通过网上提供的信息进行当日可申购新股。

TdxTradeServer安装

1) 安装Python,我这里安装的是Python3.7 64位版本,不影响这个的安装

2) 安装pytdx, pip install pytdx

3) 安装配置服务器 get_tts,配置过程如下:

利用py自动购买股票

图2

利用py自动购买股票

图3

4. 完成以上步骤后,在C:\TdxTradeServer中查看配置文件:

利用py自动购买股票

图4

5. 打开配置文件,可以选择配置为多账号版本,多账号版本为在配置文件中加上一下选项:

multiaccount=true ; 设置多用户版本开启

6. 可以去掉transport_enc_key,transport_enc_iv,这样在与客户端交互的时候就是明文传输。

7. 详细内容参见https://github.com/rainx/TdxTradeServer

StockClient客户端

客户端采用C++进行开发,首先通过微软提供的vcpkg工具进行依赖库的安装,主要依赖cpr,nlohmann-json

通过使用cpr以及json解析获取新股列表程序,具体代码为:

const char *url = “http://m.data.eastmoney.com/XG/XgrlList”;

auto rr = cpr::Get(cpr::Url{ url });

json requestJson = json::parse(rr.text);

auto stocks = requestJson[“result”][“Calendarlist”];

通过以上代码,从东方财富网提供的新股数据,获取到可以申购的股票,然后遍历获得到的数据,判断股票申购日期是否为今天,如果为今天,则获取到今日可以申购的股票,以及价格。具体代码如下:

for (int i = 0; i < stocks.size(); i++){

if (isToday(stocks.at(i)[“date”].get())){

for (int j = 0; j < stocks.at(i)[“sglist”].size(); j++) {

string stockCode = stocks.at(i)[“sglist”].at(j)[“SubCode”].get();

float price = stof(stocks.at(i)[“sglist”].at(j)[“fxj”].get());

std::cout << “申购新股:” << stockCode << ” ” << “价格:” << price << std::endl;

string errInfo;

bool bRet = api.send_order_ipo(stockCode.c_str(), price, errInfo);

if (bRet) {

std::cout << “申购新股成功” << std::endl;

}

else {

std::cout << “申购新股失败:” << errInfo << std::endl;

}

}

}

}

bool isToday(string strData){

auto tt = std::chrono::system_clock::to_time_t

(std::chrono::system_clock::now());

struct tm* ptm = localtime(&tt);

char date[60] = { 0 };

sprintf(date, “%d-%02d-%02d”,

(int)ptm->tm_year + 1900, (int)ptm->tm_mon + 1, (int)ptm->tm_mday);

if (strData.compare(date) == 0)

return true;

return false;

}

申购新股购买函数算法流程:

1) 根据股票代码,判断上市股票为沪市还是深市股票

2) 查询当前证券最大可申购数量,发送购买数量10000000的信息,这时接口会返回错误信息,信息中包括股票可申购最大数量,但是这个数量不是我们的额度。

3) 根据步骤2中股票最大可申购数量,发送购买信息, 这个时候就会返回错误信息,该信息中包括账户可申购额度。

4) 根据步骤3中获取到的可申购额度,以及从东方财富网查询到的该股票的申购价格,进行下单。

以上就是股票申购客户端的主体流程以及具体的算法,具体程序参见https://gitee.com/ctosoft/StockClient

添加服务以及自动启动

1) 通过srvanyui程序将TdxTradeServer添加到系统服务中,这样开机就会自动启动该服务

2) 通过任务计划将StockClient添加到任务计划中,定时启动,省的忘记启动该程序。

这样就实现了股票自动打新程序。

原创文章,作者:火推财经,如若转载,请注明出处:https://www.cbht.com.cn/n/15208.html