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

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

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

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

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

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

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

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

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

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

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

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

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

2023年1月31日 2条评论 873点热度 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条评论 790点热度 0人点赞 阅读全文

最近发现新版的同花顺交易端界面有变化,其界面上的Static序号有变化,重新研究了一下,这里做个备忘。 因为过去写过一个叫做Broker的类,其中的某些方法在判断可用资金和仓位上需要读取对应控件的值,具体可以看这篇博文— 《仓位管理类的实现和遇到的坑》。之前的交易界面是这样的: 新版的交易界面是这样的: 之前程序中需要读取的Static对应序号如下: 总资产 :Static12 持仓市值:Static11 持仓盈亏:Static14 可用金额:Static6 新版交易界面对应的Stactic序号变化如下: 总资产 …

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

在实盘策略上,我目前所有持仓标的应用的都是网格策略。在市场处于震荡期间,网格无疑是最好的交易策略之一。而对于网格交易来讲,最需要关注的是仓位,确保在市场出现调整时仓位按照预期进行控制,并且有资金可以加仓。除去仓位管理这个工作,我不太关心明天市场是涨是跌,因为只要有波动性在就可以稳定赚取差价收益,积少成多。 过去在仓位控制上,没有通过代码进行自动化的管理,基本都是靠盘前主观预判后,手动开启或关闭策略类实例的买入或者卖出权限实现。周末写了一个类,完善了之前在仓位管理上存在的不足。 之所以过去没有做仓位管理的自动化处理,…

2022年8月29日 0条评论 466点热度 5人点赞 阅读全文