准备给我的交易系统写一个短信通知的模块,以前都是发邮件通知,感觉还不够及时,搞一个短信通知更稳妥一些。阿里云官方提供的demo感觉有点臃肿,自己写了个工具函数重新封装了一下API,简单实现发送文字短信,分享一下代码。 阿里云官方demo:https://next.api.aliyun.com/api-tools/sdk/Dysmsapi?version=2017-05-25&language=python-tea&tab=primer-doc 我封装的函数如下: 阿里云短信服务的开通、签名、短信模版…

2024年4月16日 0条评论 100点热度 0人点赞 阅读全文

最近一直在用NiceGUI这个图形库重构我的交易系统,在系统中有一个利润统计的模块,可以按照指定的属性统计利润总和,并以柱状图进行显示。写这块代码的时候遇到一个动态属性绑定的问题,记录一下解决方法。 需求很简单,就是在利润统计模块中,如果利润总和小于等于0,即亏损的,在柱状图上用绿色柱图显示,如果是大于0,则用红色柱图显示。这个需求如果是写前端页面很好解决,js中属性直接绑定一个function回调就OK了,但是使用NiceGUI的时候,因为代码都是python的,所以不能直接用js特性的方法解决,好在新版的Nic…

2024年4月12日 0条评论 119点热度 0人点赞 阅读全文

最近在重构旧版的Python交易框架代码,前端准备换用NiceGUI这个最近比较火的前端框架,玩了一周左右,体会如下: 1、NiceGUI的前端实现基于对Quasar和Tailwind CSS这些框架的二次封装。尽管封装程度较高,但对使用NiceGUI开发前端界面而言,并不能完全避免js和相关前端技术栈。写界面python代码的时候还是需要打开Quasar和Tailwind CSS这些东西的官方文档参考。 2、NiceGUI的使用上,感觉和用Vue开发前端应用有些相似的感觉。从我个人的习惯上,页面路由函数下一般分2…

2024年3月24日 0条评论 203点热度 0人点赞 阅读全文

春节前给自己开了一个新坑,准备做一个对标BackTrader的量化策略回测框架,当时还发了篇博客 准备自己写一套量化回测框架。今天终于把一个功能比较完整的初版demo做完了,这里记录一下。 不可否认BackTrader的功能强大,但想得心应手的运用好这套工具大概率需要自己读源码进行魔改。所以我一直在想,干脆自己动手撸一个,简单实现的话,技术上其实并不是很难,而且更适合自己,用起来会更方便一些。 框架实现的整体思路其实很简单,就是在源数据的dataframe基础(日期、开高收低量)上,加入策略相关的技术指标数据、头寸…

2024年2月27日 0条评论 268点热度 0人点赞 阅读全文

股票价格是否是随机的是一个一直处于争论中的话题。我曾经和身边的朋友就这个问题谈过看法,多数倾向于股票价格中有某种规律可循,不是随机的,但我的观点可能稍有不同。我的看法是,就股票价格,即开高收低这四个价格本身的分布而言,特征是随机的,但股票的长期趋势有内生规律可循,而所谓的规律,并不是价格这个简单的因子能够解释的,而是基于一些更宏观的因素,比如经济周期,企业基本面,以及地缘或其他周期性因素的影响。 在交易策略算法的研究中,经常会使用蒙特卡洛式的算法进行大量的数据生成,模拟与回归。就这个问题,我曾经写过一个简单的模拟股…

2024年2月12日 0条评论 407点热度 0人点赞 阅读全文

年化收益率是衡量投资收益回报的重要指标。它是把当前收益率(例如日收益率、周收益率、月收益率)换算成年收益率来计算的,并不是真正的已取得的收益率。以日收益率为例,反算为年化收益率,可以简单理解为,按照过去每日的收益的一个平均情况,维持在这个水平上,平均一年能赚到多少个百分点,年化收益率是一个复合的年增长率。QThinker Plus 上提供了这个计算工具,可以直接计算。下面说一下计算方法。 具体到计算上,一般有两种方式计算年化收益率: 一、通过日收益率序列计算年化收益率 这种计算,通常以资产期初价值为1,先计算期末的…

2023年11月27日 0条评论 188点热度 1人点赞 阅读全文

最近想给自己的交易程序添加一些自动化功能,将可转债的筛选过滤与实盘操作全部交给机器运行。 之前关于实时价格和K线数据的获取都是用的自己写的爬虫模块,稳定运行没啥问题(一共实现了四个接口,两个日用,两个备用)。可转债这块我犯了次懒,没有再写爬虫,而是导入了Akshare这个金融数据包。结果就是因为这个包的引用,导致程序后来打包编译的时候问题不断。 很多特别细节的东西已经记得不是太清楚了,大致出现的问题和解决如下: 所有的开发测试都完成后,准备打包成exe,部署到我的实盘交易机器上。编译的时候没有问题,但是运行exe时…

2023年2月18日 2条评论 937点热度 0人点赞 阅读全文

我感觉这个问题算是用pysimplegui写界面时候一个容易遇到坑,记录一下。 对于多窗体应用,如果在生成子window之前,其所用的layout单独在别的模块中定义,并在生成window时进行引用,那么这个子window在调用close后,想要重复显示的时候就会报错,提示layout不能reuse。 解决这个问题的方式是不要直接引用layout,在调用window之前予以即时的layout变量定义,然后传入window。这样可以解决问题,但不好的地方是会造成代码冗长,一个合理的解决方案是在其他模块中定义函数,然后…

2023年2月12日 0条评论 701点热度 0人点赞 阅读全文

媳妇是做文字工作的,比较忙,经常要写大量的文字稿,想到最近爆火的ChatGPT,感觉是个帮手,于是写了个小工具调用其API帮助媳妇完成工作。在博客上分享一下,如下图: 在界面中暴露的主要是一些可以影响输出的参数,具体含义详见如下地址中的官方说明: https://platform.openai.com/docs/api-reference/completions/create API-Key这个参数是需要自己注册获得或者去某宝上购买的,值得注意的是,某宝上购买的账户中默认有18美刀的体验金,ChatGPT是个付费A…

2023年1月31日 2条评论 966点热度 1人点赞 阅读全文

我之前开发用的虚拟环境已经很久没有变动动过了,最近筹划写点新的功能模块,需要用到一些新的第三方包,我想测试一下这些新的包安装到venv中后,用pyinstaller打包后的exe文件尺寸有多大变化,随后发现问题。 在向venv环境添加了新包后,用pyinstaller打包程序时出现错误信息:Fatal error in launcher: Unable to create process using '"D:\dev\Qthinker.venv\Scripts\python.exe" "D:\Qthinker.ve…

2023年1月26日 0条评论 832点热度 0人点赞 阅读全文