- 博客(186)
- 资源 (19)
- 问答 (1)
- 收藏
- 关注
原创 一个线程池的理解(二)
一般对于常规的学习,理解后应该是如何应用的问题,最简单的应用就是利用这个线程池执行异步任务,在测试例子中便有简单的应用。深入点应用则是修改原始码,根据自己的需要增加或改造功能。比如,仿制一个最简单的cron的定时器功能,即异步定时任务功能。
2024-04-05 19:33:52 759
原创 深入理解EMA和SMA
一直对EMA的理解都比较模糊,总是不能完全把握,因此,凡是牵涉到EMA的公式都搞不清其内在的数学模型是什么。刚好看到个文章,觉得写的很好。参考内容:https://www.codeleading.com/article/9441142281/EMA公式:EMAtoday=α * Pricetoday + ( 1 - α ) * EMAyesterday;其中,α为平滑指数,一般取作2/(N+1)推导公式:EMA(X,N)=[2*X+(N-1)Y’]/(N+1)下面是对于公式的拆解,分别解出当N=
2020-10-07 00:47:18 8836 6
原创 缠论再学习1-K线标准化
之前学过几轮缠论,由于总总原因,止步于缠论的线段。最近发现有一点时间了,再来学习一下。缠论的基础是,其中K线这一块需要先进行标准化的工作,即把有包含关系的K线合并成一根新K线,然后拿这根新K线和右边邻近的K线进行比较,判断是否形成新的包含关系,依此类推。
2024-08-10 15:12:29 419
原创 thread_pool的一些想法
之前有探讨过线程池的逻辑,这两天刚好闲下来,看了github上C++20的句法,语法是有点夸张,以这个push为例:这段代码是C++20标准中使用的概念(concepts)和协程(coroutines)的一部分,用于创建一个异步执行函数并返回其结果的。概念定义(Concept Definition):这里定义了一个名为的概念。是一个C++标准库中的类型特征,用于检查给定的类型是否可以使用参数进行调用。如果可以被调用,那么概念就是有效的。当前程序中没有自己定义concept,而是直接使用了std定义的i
2024-05-31 16:34:09 932
原创 C++11的可变参数
第二个代码片段定义了一个名为print的模板函数,它使用了 SFINAE(Substitution Failure Is Not An Error)技术和条件模板以确保函数只有在满足特定条件时才被实例化。: 这是一种 SFINAE 技术,确保这个模板只有在为true时才会实例化。可能是一个用来检查模板参数S是否为字符串类型的类型特征。: 这是一个字符串格式化参数。: 这是一个可变参数包,包含任意数量的格式化参数。fmt::print。
2024-05-29 08:33:52 396
原创 二进制的协议的测试程序
由于要调试二进制私有协议,不想用C++重头到尾写,用C++写工程量有点大,因此想找一个比较简单的工具,postman无法实现,外界的几乎找不到合适的工具,只能考虑手写一个。这点无法共用,其它关于打包成二进制数据,由二进制数据解析成类对象,借助python强大的功能,可以直接用buffer(),unpack()全部搞定,当然,各类的成员。这个是一个半成品,即,只需定义各个类,即可直接完成收发的过程了,更强大的是写一个工具,然后只需在配置文件中定义各类的变量的大小即可。变量是多大是少不了得自己先定义下来了。
2024-05-25 21:25:42 422
原创 python封装的一个数据库类
这样一个数据库连接的最主要的功能就实现了。不过既然想用的舒服一点,还必须考虑到额外的一些功能,比如,断开了怎么办?要是在执行的过程中突然断开了怎么办?这个组件最主要的优点是读取的数据可直接转化为dataframe,之前我用的数据库得一项一项读取出来再逐个赋值给类成员,在这个要求东西快点出来的今天,很不够用,然后就发现了这个。执行数据库操作的过程结束后要不要关闭数据连接,是手动关闭还是自动关闭,还是都可以。诸如此类的问题想明白了,这个数据库类的封装也就完成了。对数据库的封装,就两点:读出数据,写入数据。
2024-05-17 20:54:07 268
原创 由读写arrow引发的对时间时区的思考
好,总结一下时间转换,df中的时间一般从数据库中读取或是csv中读取默认都没有时间印记,但因为我们是在中国,所有人都认为看到的时间为东八区,因此存入arrow前先做时区调整,将之本地化东八区,然后转成格林时间,再消除时间印记,存入arrow中,这样所有人从arrow中读取的时间都是格林时间,互相就对得上了。if not df['time'].dt.tz: 表达的为如果没有时区印记,即没带上时区信息,就先默认为东八区的时间本地化,再将之转换为格林时间,最后将时区印记抹除(抹除的原因是防止C++读取时出错)
2024-05-15 14:48:13 217
原创 关于kline-chart图表程序的一些构想
实现了一个看起来不错的K线图表的功能,可以按要求生成对应的图形。简单的想法是生成笔的算法,生成段的算法,生成中枢的算法,然后把笔,段,中枢的数据扔到对应的区域即可,不过由于我做的方法里是统一数据接口的,想扔不同的数据到系统中看起来不是那么友好,因此最好有一种特别的方法,想把数据扔到哪个窗口都行,直接扔过去,跳过中间环节,即每个窗口有一个唯一标识号,这样才能方便的扔过去。嗯,临时的一些想法,本来是要用github的,那上面记录零散的想法最合适,结果上面要双认证一直没搞通,就先把这记录下来。
2024-05-02 08:59:45 193 1
原创 python实现将所有交易数据按年分组存取的核心逻辑
一个是实现获取以某天为基准日的交易日列表,比如0305,如果交易日中有0305则0305作为最后交易日放置于交易日列表。接下来的程序是在前基础上做的进一步分化,比如交易日太多,超过年的,我们要按年取(当然,按此类推,也可按月存取),逻辑很简单,先定义一个类,用来记录跨年的开始日期和结束日期。然后从交易日列表开始,第0个开始认为开始日期和结束日期相同,并将之加入跨年列表中,然后找到年份不同的,更新结束日期并开始新的开始日期,直到达到最后一个之前的列表。
2024-04-30 00:52:04 188 1
原创 rust实现一个post小程序
主要是白天折磨了半天,无论如何post出去都不能成功,搞得我专门修改了一堆server的代码,以拦截任何访问服务器的数据,结果还是返回502,结果晚上回来一遍过,也真是奇怪的不行。先把一遍过的代码放出来,防止哪天又卡在这儿过不去。后面就是打印结果了。居然直接一遍过了,在公司可是花了好几小时查遍了所有资料,也改遍了服务器的代码。最后再贴出服务器的python测试代码:my_http_server.py。最后由于服务器运行用到了sanic组件和一个跨域组件,所以最后记得。然后是main.py。
2024-04-08 22:45:15 419
原创 一个线程池的理解
最近看到一个线程池,写的实在太好,于是想深入理解一下。由于平时的工程一般只支持到C++11,而拿到的代码应该是在C++20下才能编译通过,因此也做了一些修改,需要原始码的可去github上自行下载。测试结果如下:可以看到,加入到线程池的过程是在主线程中进行的,实际运行的都是在工作线程中完成。
2024-04-04 23:24:55 849
原创 C++关于线程间同步的理解
创建了独占的锁,此时如果ready为真,说明数据已经准备好了,无需等待,直接获取即可,即跳出while循环,否则进入while循环,执行cv.wait。有一点须知:std::unique_lock和std::lock_guard的作用几乎一样,前者更耗资源,并且可由cv.wait释放,也可通用lock.un_lock()释放,而后者需通过超出作用域释放。在执行cv.wait时,会自动释放独占锁,若跳过cv.wait时,则会在超出作用域时自动释放独占锁。
2024-03-31 16:40:07 299
原创 一个python实现的kline-chart图表程序(二)
这个相对简单,调用PySide6的组件QtWidgets,然后加载主窗口即可w.show()app.exec()
2024-03-24 22:39:12 1084
原创 一个python实现的kline-chart图表程序(一)
至于MA,MACD,VOL这些应该属于指标,可以从基础数据计算得来或是直接加载,当然可加载的还有其它一些指标,比如买卖点或是直线,射线,线段或是矩形什么的。最好能把这个框架高度模块化,然后想计算什么指标直接加进去,或是做个什么插件,嗯,插件这一块明显还不熟,先做到高度封装的Kline再说。起因是想研究量化交易,然后核查算法的落角点,比如哪些指标的组合可以入场做单,没有一个形象化的工具算法写起来总是感觉差强人意。初步想法是需要一个数据串,里面记录一组开高低收量,然后打开程序后可以将这个基础数据显示成K线。
2024-03-23 17:38:56 306
原创 python通过tcp协议发送二进制数据
不过这是一个玩具程序,实际的工程会异常复杂,如果按这种逻辑来写的话会很累,且后期维护也会非常不易,比如巨大的结构中增加或删除某些变量,某些类型有所改变,改动的过程会很辛苦,因为拆解包时需要一个个核对,稍有不慎就会错误一大堆。写c++程序时经常会有发送私有化协议的过程,比如头结构+数据包,数据包往往是一个结构体,有时为了方便调试会用python写一些测试程序。对于请求的,将数据打包成二进制数,对于返回的将二进制数拆解成类结构,在这里pack即打包,unpack为拆解。
2024-03-22 19:26:36 302
原创 MQL5学习之简单移动平均线MA的编写
从目前实践的看起来,MQL5难度要显著高于通达信或是北极星什么的,唯一的好处是可以做极其复杂的计算,无限制的变量,类什么的,并可以做文件存储,网络传输,几乎能想到的一切,比如后面对接实盘时,官方对接实盘是收费的,如果你有程序化交易的程序接口,完全可在算法中直接http协议完成实盘交易。昨天还是有点高估自己了,MACD相对较难一点,改学MA的编写,首先明确MA的计算,假如有4个值,p=[1,2, 3, 4], period=3,然后与通达信上的相比较,发现是一致的,说明计算无误。
2024-03-03 19:01:54 853
原创 MQL5-MT5连接上国内期货
MT5连接国内期货已经做好了,拿来即用,试了下,专业版反而不能显示出对应的期货数据,因此下了标准版的客户端,当然,模拟账户肯定是要在他们的官网注册一个的。然后根据官网的文档,直接在服务器选择输入106.14.27.154:2000即可,若是后面有变动,相信他们的指南上也会更新上新的IP.然后就可以加品种了,我当前只关心白糖,其它的都隐藏了。
2024-03-03 11:39:20 978
原创 MQL5学习之RSI指标编写
研究MT5时发现MQL5这个指标编写功能很强大,应该是碾压国内所有的指标系统,不过这个东西相对复杂很多,比通达信公式不知复杂几许,看起来和C++语法接近,倒是比较适合自己。试着玩一下,发现还是有点难度的。嗯,这个代码量有点大,看起来挺头晕的,不过好在只有两个函数,一个为void OnInit(), 看起来像是初始化的地方,一个为int OnCalculate()看起来就是指标计算的地方。这几个搞清楚了,再学其它的应该就很容易了。学习最快的方式就是拿相对简单的东西七改八改一下,然后看呈现出来的是什么样。
2024-03-02 22:13:55 654
原创 go里面关于超时的设计
从运行结果看,只要超过700ms没有数据进入,就会引发定时器的回调,并且从2500ms的超时看只激发了一次,说明这里的定时器只会运行一次。没有超过700ms的,由于定时器被重置了,又开始等700ms才会运行,运行SQL_Entity_3时,定时器被删除,从结果看,虽然间隔是900ms远超700ms,依然定时器没有执行。通道中夹杂一个timer定时器的处理,若通道在700ms内有数据,则定时器被重置,重新等待700ms再调用定时器处理函数,否则,700ms时间到,运行定时器处理函数。
2023-08-21 10:30:51 543
原创 python路径
看到vscode装jupyter还是很好用的,同事说路径不好搞,尤其是将ipynb单独放在一个目录中时,调用主目录中的的其它模块就很麻烦,研究了一会发现可通过。
2023-03-09 11:09:24 179 1
原创 pygame9 扫雷游戏2
其中cover是我们之前所写的整个20*20的方格块,且每个格子的大小为25*25 game_map是我们即将实现的新类,此类中用来标明每个小格子中存放的是地雷还是表示地雷数量的数字。获取到鼠标按下时的坐标值。很明显,此类中应该首先包含一个表格,此表格每行应有格子20个,然后有20行,与前面cover中表示的格子一致。2 再点击格子时,发现是地雷,将其存储到red_point中,使得在显示雷时,格子是红色的。moves是标记每一格的上下左右和斜上,斜下8个方向的相对距离。确认是鼠标左键被按下。
2023-03-05 08:37:12 521
原创 pygame8 扫雷游戏
看起来是需要设计一个列表,其长度是20,宽度也是20,每一个方格都是一个25像素的正方形,画的时候可以用一个循环,将列表中的方格依次用draw.rect画出来。这儿注意的是方格是宽高都为25,但真正画的时候宽高应该少一个像素,原因是画满的话格子边界就会混在一起,看不出来了。从图上可以看出是一个20*20的方格列表,我们可以定义一个类Cover 将关于怎样画这些小方格包在里面,更新屏幕主要分三部分,首先是刷白屏幕,然后是画出覆盖物,最后是将缓存更新到屏幕。分别对应为运行游戏主逻辑,事件检测,更新屏幕。
2023-02-19 10:54:17 1082
原创 pygame7 弹球游戏2
做一个球洞比较简单,直接在while True中用circle画一个黑色的圆即可,当然,在此之前我们要思考洞的位置,可放在右下角,用到pygame为我们提供的Rect。这样当鼠标左键按下时,球就被打出来了,由于平常的速度在2至4左右,这个计算出来的距离有点大,我们取其中的十分之一作为速度。然后我们发现当A撞击B,B撞C时,新的情况出现了,B和C在那不断抖动,猜想可能是撞击完后没能实现各自的速度取返。原因是被撞的球此时速度已经为0了,此时再怎么取返,速度都为0,因此需要重新考虑。这样,我们改一个crash。
2023-02-11 23:47:54 424
原创 通达信插件获取并存储通达信商品指数的实时数据
通达信商品指数一共有23个,如下图所示:如果想获取历史数据,只需要通过通达信的数据下载和导出功能即可,现在我们需要获取这23个指数的实时数据,通过导出功能就没有办法了。在最初的阶段,考虑的是合成的逻辑,即找到每一个指数的成份股,计算出对应的加权指数后再进行算术平均来计算对应的指数。
2023-01-23 18:26:23 4734 3
原创 pygame6 弹球游戏
pygame.mouse.get_pos(): 获取鼠标当前点的坐标pygame.mouse.get_pressed()[0]: 获取鼠标左键是否为点击。
2023-01-14 18:10:11 741
原创 vscode调试python
点击左边的三角运行按钮,显示出 create a launch.json file这个超链接,注意,Run and Debug此时没啥用,需要先创建一个launch.json文件。即可发现首先是将环境调整成conda pydev3.9的,然后再运行调试程序。点击launch.json超链接,弹出的选项中选Python。二、创建调试环境launch.json。创建完成后点击左上角的运行小三角,
2022-12-24 11:04:32 1666
原创 pygame5 动画精灵和碰撞检测
那么这个小球首先会有变量image,就是从物理图片中加载入内存的变量,然后应该有一个大小size,还有一个位置point,这两个可以合并为rect(x, y, width, height), 还有一个表示左右移动的速度和上下移动的速度speed[x,y]移动的逻辑是:每次移动speed的距离(speed指的是向横移动x,向纵移动y)并更新rect,若到最左边或是最右边,则speed的x方向取反,若到最上边或最下边,speed的y方向取反。这样,我们就完成了球的定义和移动的逻辑。2)移动球并更新位置。
2022-12-11 00:01:35 898 1
原创 pygame4 练习课
代码如下:2 pygame的窗口消息前面可以显示一个最简单的白色屏幕内容,但整个窗口无法操作了,是因为我们没有设置窗口的响应事件,一般每个pygame程序都有一个无限循环用来处理各种窗口事件:以上代码只是处理了当窗口收到退出事件时,整个程序退出surface通常是screencolor表示的是颜色,即rgb的值,红色为[255, 0, 0]center:表示圆心坐标,平面上的坐标通常是两个值,比如窗口中心[320, 240]radius:表示直径,我们可以指定为100width:默认为0
2022-12-03 18:50:23 1332
原创 pygame2 画点线
如果我们只是想改变某些像素的颜色,用draw.rect通过小矩形来做就有点浪费资源,可以用screen.set_at([x, y], [0, 0, 0])来实现相同的效果。由于plotPoints是一个数组,因此我们需要先根据x值计算出所有的y值,然后将x,y成队的加入到数组plotPoints中,最后再通过lines一次性画出整个曲线来。二中画的曲线,如果仔细看就会发现中间不是连续的,点与点之前存在间隙。需要注意的是,矩形的线宽须是1,而不是平常写的为0,这是因为矩形太小了,没有中间部分可以填充。
2022-11-05 10:37:01 905
原创 pygame 初识
pygame是做游戏的第三方库,首先安装pygame注意: -i及之后的是防止不能访问国外网站,转用清华源进行安装安装成功大至会出现图中圈出来的Successfully字样。
2022-10-29 07:58:54 1408
原创 boltons.tbutils 中的ExceptionInfo初步接触
这几天写python代码忽然想到各种语言都有一些基础库,python应该也有,在网上搜索到一个boltons库,说里面有好多基础功能。可惜的是光有说明没有范例。随便看一个异常类,通过摸索发现果然是一个好东西,比traceback好用一些,可以打印出出错堆栈,出错的代码行,出错的具体代码和出错的消息。
2022-10-21 23:59:34 204
原创 go实现一个简单的websocket推送程序
最近要在一个go实现的K线服务器上追加一个websocket推送功能。初步设想是在各品种每分钟的数据完成后立即向各订阅单位推送对应的K线数据。
2022-10-17 17:14:52 988
原创 python类的封装,继承和多态
在这个例子中实际的变量是self._name, self._age, 外界看不出来,以为还是self.name, self.age。实际上对于人的名字和年龄是不能随便改的,因此我们需要使用一个技术“隐藏”,使得外界只能看,不能改。验证:print(super()._age) # 这儿会报错,说找不到对应的变量。1 Person为父类,Student为子类,子类拥有父类的一切特性(属性和方法)2 super()函数可以调用一切父类的属性和方法(被隐藏的除外)
2022-09-25 11:48:30 1409
原创 python中的对象
1 direction,color,size这些内容在对象创建时不存在,是在对象创建完成后创建的。一般情况下我们不这样做,通常我们在创建对象时会将需要的属性都设置好,这称为初始化对象。在类定义时,可以定义一个特定的方法,名为__init__(),每次类被实例化时,都会调用这个方法。我们希望对象打印的内容:这是一个什么颜色的球。此时系统默认调用一个魔法函数。给实例加上属性并调用其方法。2 类名(Ball)
2022-09-17 23:47:11 490
C++11标准实现的线程池以及在此基础上实现的仿cron功能的定时器
2024-04-05
kline-chart,python3.12下运行,主要使用pyside6开发,下载下来后将所缺库安装即可直接运行
2024-03-24
boost_1_66_0_windows.rar
2024-03-16
webpy框架写的blog
2017-05-11
web-server
2017-05-10
gtest使用范例-使用cmake编译
2017-02-08
一个简单的calendar源代码
2016-06-19
Spring 3.x 企业应用开发实战-源代码(myeclipse测试通过)
2015-12-25
maven3 安装包
2015-12-06
wing ide 5.0.6 最新注册机
2014-06-02
正则表达式解析器源码(C#完成)
2014-04-20
log4cplus-1.1.2vs2008编译通过
2013-12-08
nginx源码vs2008版
2012-08-25
log4cxx测试工程
2012-03-03
设计模式之详解(c++实现版)
2009-07-08
多叉树构造器
2008-04-13
在android系统中如何监控可写入的控件获得焦点这样的事件
2014-03-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人