- 博客(178)
- 资源 (19)
- 问答 (1)
- 收藏
- 关注
原创 一个线程池的理解(二)
一般对于常规的学习,理解后应该是如何应用的问题,最简单的应用就是利用这个线程池执行异步任务,在测试例子中便有简单的应用。深入点应用则是修改原始码,根据自己的需要增加或改造功能。比如,仿制一个最简单的cron的定时器功能,即异步定时任务功能。
2024-04-05 19:33:52 745
原创 深入理解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 8565 6
原创 rust实现一个post小程序
主要是白天折磨了半天,无论如何post出去都不能成功,搞得我专门修改了一堆server的代码,以拦截任何访问服务器的数据,结果还是返回502,结果晚上回来一遍过,也真是奇怪的不行。先把一遍过的代码放出来,防止哪天又卡在这儿过不去。后面就是打印结果了。居然直接一遍过了,在公司可是花了好几小时查遍了所有资料,也改遍了服务器的代码。最后再贴出服务器的python测试代码:my_http_server.py。最后由于服务器运行用到了sanic组件和一个跨域组件,所以最后记得。然后是main.py。
2024-04-08 22:45:15 367
原创 一个线程池的理解
最近看到一个线程池,写的实在太好,于是想深入理解一下。由于平时的工程一般只支持到C++11,而拿到的代码应该是在C++20下才能编译通过,因此也做了一些修改,需要原始码的可去github上自行下载。测试结果如下:可以看到,加入到线程池的过程是在主线程中进行的,实际运行的都是在工作线程中完成。
2024-04-04 23:24:55 808
原创 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 286
原创 一个python实现的kline-chart图表程序(二)
这个相对简单,调用PySide6的组件QtWidgets,然后加载主窗口即可w.show()app.exec()
2024-03-24 22:39:12 879
原创 一个python实现的kline-chart图表程序(一)
至于MA,MACD,VOL这些应该属于指标,可以从基础数据计算得来或是直接加载,当然可加载的还有其它一些指标,比如买卖点或是直线,射线,线段或是矩形什么的。最好能把这个框架高度模块化,然后想计算什么指标直接加进去,或是做个什么插件,嗯,插件这一块明显还不熟,先做到高度封装的Kline再说。起因是想研究量化交易,然后核查算法的落角点,比如哪些指标的组合可以入场做单,没有一个形象化的工具算法写起来总是感觉差强人意。初步想法是需要一个数据串,里面记录一组开高低收量,然后打开程序后可以将这个基础数据显示成K线。
2024-03-23 17:38:56 228
原创 python通过tcp协议发送二进制数据
不过这是一个玩具程序,实际的工程会异常复杂,如果按这种逻辑来写的话会很累,且后期维护也会非常不易,比如巨大的结构中增加或删除某些变量,某些类型有所改变,改动的过程会很辛苦,因为拆解包时需要一个个核对,稍有不慎就会错误一大堆。写c++程序时经常会有发送私有化协议的过程,比如头结构+数据包,数据包往往是一个结构体,有时为了方便调试会用python写一些测试程序。对于请求的,将数据打包成二进制数,对于返回的将二进制数拆解成类结构,在这里pack即打包,unpack为拆解。
2024-03-22 19:26:36 178
原创 MQL5学习之简单移动平均线MA的编写
从目前实践的看起来,MQL5难度要显著高于通达信或是北极星什么的,唯一的好处是可以做极其复杂的计算,无限制的变量,类什么的,并可以做文件存储,网络传输,几乎能想到的一切,比如后面对接实盘时,官方对接实盘是收费的,如果你有程序化交易的程序接口,完全可在算法中直接http协议完成实盘交易。昨天还是有点高估自己了,MACD相对较难一点,改学MA的编写,首先明确MA的计算,假如有4个值,p=[1,2, 3, 4], period=3,然后与通达信上的相比较,发现是一致的,说明计算无误。
2024-03-03 19:01:54 557
原创 MQL5-MT5连接上国内期货
MT5连接国内期货已经做好了,拿来即用,试了下,专业版反而不能显示出对应的期货数据,因此下了标准版的客户端,当然,模拟账户肯定是要在他们的官网注册一个的。然后根据官网的文档,直接在服务器选择输入106.14.27.154:2000即可,若是后面有变动,相信他们的指南上也会更新上新的IP.然后就可以加品种了,我当前只关心白糖,其它的都隐藏了。
2024-03-03 11:39:20 517
原创 MQL5学习之RSI指标编写
研究MT5时发现MQL5这个指标编写功能很强大,应该是碾压国内所有的指标系统,不过这个东西相对复杂很多,比通达信公式不知复杂几许,看起来和C++语法接近,倒是比较适合自己。试着玩一下,发现还是有点难度的。嗯,这个代码量有点大,看起来挺头晕的,不过好在只有两个函数,一个为void OnInit(), 看起来像是初始化的地方,一个为int OnCalculate()看起来就是指标计算的地方。这几个搞清楚了,再学其它的应该就很容易了。学习最快的方式就是拿相对简单的东西七改八改一下,然后看呈现出来的是什么样。
2024-03-02 22:13:55 522
原创 go里面关于超时的设计
从运行结果看,只要超过700ms没有数据进入,就会引发定时器的回调,并且从2500ms的超时看只激发了一次,说明这里的定时器只会运行一次。没有超过700ms的,由于定时器被重置了,又开始等700ms才会运行,运行SQL_Entity_3时,定时器被删除,从结果看,虽然间隔是900ms远超700ms,依然定时器没有执行。通道中夹杂一个timer定时器的处理,若通道在700ms内有数据,则定时器被重置,重新等待700ms再调用定时器处理函数,否则,700ms时间到,运行定时器处理函数。
2023-08-21 10:30:51 525
原创 python路径
看到vscode装jupyter还是很好用的,同事说路径不好搞,尤其是将ipynb单独放在一个目录中时,调用主目录中的的其它模块就很麻烦,研究了一会发现可通过。
2023-03-09 11:09:24 174 1
原创 pygame9 扫雷游戏2
其中cover是我们之前所写的整个20*20的方格块,且每个格子的大小为25*25 game_map是我们即将实现的新类,此类中用来标明每个小格子中存放的是地雷还是表示地雷数量的数字。获取到鼠标按下时的坐标值。很明显,此类中应该首先包含一个表格,此表格每行应有格子20个,然后有20行,与前面cover中表示的格子一致。2 再点击格子时,发现是地雷,将其存储到red_point中,使得在显示雷时,格子是红色的。moves是标记每一格的上下左右和斜上,斜下8个方向的相对距离。确认是鼠标左键被按下。
2023-03-05 08:37:12 504
原创 pygame8 扫雷游戏
看起来是需要设计一个列表,其长度是20,宽度也是20,每一个方格都是一个25像素的正方形,画的时候可以用一个循环,将列表中的方格依次用draw.rect画出来。这儿注意的是方格是宽高都为25,但真正画的时候宽高应该少一个像素,原因是画满的话格子边界就会混在一起,看不出来了。从图上可以看出是一个20*20的方格列表,我们可以定义一个类Cover 将关于怎样画这些小方格包在里面,更新屏幕主要分三部分,首先是刷白屏幕,然后是画出覆盖物,最后是将缓存更新到屏幕。分别对应为运行游戏主逻辑,事件检测,更新屏幕。
2023-02-19 10:54:17 1045
原创 pygame7 弹球游戏2
做一个球洞比较简单,直接在while True中用circle画一个黑色的圆即可,当然,在此之前我们要思考洞的位置,可放在右下角,用到pygame为我们提供的Rect。这样当鼠标左键按下时,球就被打出来了,由于平常的速度在2至4左右,这个计算出来的距离有点大,我们取其中的十分之一作为速度。然后我们发现当A撞击B,B撞C时,新的情况出现了,B和C在那不断抖动,猜想可能是撞击完后没能实现各自的速度取返。原因是被撞的球此时速度已经为0了,此时再怎么取返,速度都为0,因此需要重新考虑。这样,我们改一个crash。
2023-02-11 23:47:54 409
原创 通达信插件获取并存储通达信商品指数的实时数据
通达信商品指数一共有23个,如下图所示:如果想获取历史数据,只需要通过通达信的数据下载和导出功能即可,现在我们需要获取这23个指数的实时数据,通过导出功能就没有办法了。在最初的阶段,考虑的是合成的逻辑,即找到每一个指数的成份股,计算出对应的加权指数后再进行算术平均来计算对应的指数。
2023-01-23 18:26:23 3944 3
原创 pygame6 弹球游戏
pygame.mouse.get_pos(): 获取鼠标当前点的坐标pygame.mouse.get_pressed()[0]: 获取鼠标左键是否为点击。
2023-01-14 18:10:11 704
原创 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 1595
原创 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 842 1
原创 pygame4 练习课
代码如下:2 pygame的窗口消息前面可以显示一个最简单的白色屏幕内容,但整个窗口无法操作了,是因为我们没有设置窗口的响应事件,一般每个pygame程序都有一个无限循环用来处理各种窗口事件:以上代码只是处理了当窗口收到退出事件时,整个程序退出surface通常是screencolor表示的是颜色,即rgb的值,红色为[255, 0, 0]center:表示圆心坐标,平面上的坐标通常是两个值,比如窗口中心[320, 240]radius:表示直径,我们可以指定为100width:默认为0
2022-12-03 18:50:23 1302
原创 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 896
原创 pygame 初识
pygame是做游戏的第三方库,首先安装pygame注意: -i及之后的是防止不能访问国外网站,转用清华源进行安装安装成功大至会出现图中圈出来的Successfully字样。
2022-10-29 07:58:54 1349
原创 boltons.tbutils 中的ExceptionInfo初步接触
这几天写python代码忽然想到各种语言都有一些基础库,python应该也有,在网上搜索到一个boltons库,说里面有好多基础功能。可惜的是光有说明没有范例。随便看一个异常类,通过摸索发现果然是一个好东西,比traceback好用一些,可以打印出出错堆栈,出错的代码行,出错的具体代码和出错的消息。
2022-10-21 23:59:34 190
原创 go实现一个简单的websocket推送程序
最近要在一个go实现的K线服务器上追加一个websocket推送功能。初步设想是在各品种每分钟的数据完成后立即向各订阅单位推送对应的K线数据。
2022-10-17 17:14:52 969
原创 python类的封装,继承和多态
在这个例子中实际的变量是self._name, self._age, 外界看不出来,以为还是self.name, self.age。实际上对于人的名字和年龄是不能随便改的,因此我们需要使用一个技术“隐藏”,使得外界只能看,不能改。验证:print(super()._age) # 这儿会报错,说找不到对应的变量。1 Person为父类,Student为子类,子类拥有父类的一切特性(属性和方法)2 super()函数可以调用一切父类的属性和方法(被隐藏的除外)
2022-09-25 11:48:30 1365
原创 python中的对象
1 direction,color,size这些内容在对象创建时不存在,是在对象创建完成后创建的。一般情况下我们不这样做,通常我们在创建对象时会将需要的属性都设置好,这称为初始化对象。在类定义时,可以定义一个特定的方法,名为__init__(),每次类被实例化时,都会调用这个方法。我们希望对象打印的内容:这是一个什么颜色的球。此时系统默认调用一个魔法函数。给实例加上属性并调用其方法。2 类名(Ball)
2022-09-17 23:47:11 481
原创 文华商品指数研究
文华的商品指数如下:基本上据此可以很清晰的感知整个期货大势的情况,以及各板块的涨跌状况,进而对操作哪一个品种形成指导。那么这些指数是怎样来的呢?参考地址:文华指数 - 文华财经资讯股份有限公司 (wenhua.com.cn) 每一个品种的各个月份合约做加权平均,以合约持仓量为权重,总持仓量为1,各持仓量为占比,以价格为参数,乘上各自的权重然后累加,得出品种的加权价格如图所述,6月1日有效合约11个,总持仓量2562136手,将各合约的价格乘上自身持仓量与总持仓的比例即得出各合约的权重价,最后将权重价累加,即
2022-07-14 20:45:52 3814
原创 一个简单的websocket例子
写的一个范例,用来测试websocket服务器用的有自动连接部分,即如果与服务器断开,系统会再次连接websocket服务器,避免因网络问题引发数据彻底断了需要注意的是,websocket组件必须是0.57.0,后面更新的组件没有再跟了,应该与当前的使用有冲突。完整代码如下:运行截图:...
2022-07-13 15:57:10 832
原创 python中列表和字典的应用-一个简单的考试系统
1 之前我们学习了列表,知道列表可以用来存储一组数据,可以增删改查,可以遍历2 之前我们学习了字典,知道字典可以用来存储键值对,与列表类似,字典也可以进行增删改查,同样也可以遍历这节课我们利用学到的这两种类型的数据结构做一个练习一个简单的考试系统:这个系统有以下几个部分:1)使用系统需要先登录,只有输入正确的用户名和密码才能进入,否则会一直要求输入正确的用户名和密码2)登录成功后,通过随机分配的方式,分配一组考试题3)考试结束后会输出用户名和考试分数考试系统需要两样数据,一是用户信息,另一个是考试的题库我们
2022-06-03 06:55:14 395
原创 python字典
通过列表,我们可以将同类的数据按照顺序去排列,但是在取数据的时候,只能通过下标去获取。这样有许多不便之处:1.不是所有的数据都需要按照顺序去排列,比如学生的姓名。2.对于数据缺乏相应的描述,通过下标很难知道要取的数据是什么意思,比如得分数据,如果只用列表,你很难知道这个得分是哪个学生的。3.如果一个数据需要保存多个属性,比如不仅需要学生的分数,还需要学生的身高,性格,爱好等,用列表很难描述清楚。所以我们需要一个新的数据类型来帮助我们存储这些复杂的数据,这就是要用到的字典。1 创建字典
2022-05-29 11:54:31 740
原创 vscode远程调试linux上的c++
1 在目标机上安装C++的开发环境:yum -y install gcc gcc-c++ kernel-devel2 在目标机上安装gdbyum -y install gdb3 vscode上安装Remote-Development4 打开远程文件,准备进行远程调试5、安装远程cpp插件只需键入cpptools,然后把红框出现的全部安装即可6 开始进行调试:开始调试的过程我分几个图展示,关键步骤是选g++,C++(GDB/LLDB)最终...
2022-05-27 12:01:38 1952
原创 python冒泡排序
假设有一个数组arr = [6, 4, 3, 1, 2]需要按从小到大的顺序排序,用眼睛一眼就看出来怎么排了,用程序该如何实现呢冒泡排序的规则:1 相邻两个数比较,若前面的数大小后面的数,交换位置2 再按1的规则进行排序,直到所有数都排好序为止使用程序来模拟前面的规则,为了便于理解,我们先用数据来实际模拟一遍原始数据集:6, 4, 3, 1, 2第一轮结果:4, 3, 1, 2, 6第二轮结果:3, 1, 2, 4, 6第三轮结果:1, 2, 3, 4, 6第四轮结果:1
2022-05-22 12:23:43 208
原创 python函数(三)
1 返回数组:函数不仅可以返回1个值或多个值,还可以返回数组:举例说明:import randomdef generate_list(): random.seed(20220522) arr = [] for i in range(5): a = random.randint(0, 100) arr.append(a) return arrprint(generate_list())2 不定参数有些函数需要容
2022-05-22 11:05:44 122
原创 python函数(二)
一 值传递简单的说值传递不会改变函数外面的情况,例如def eda(a): a = a+1 print("in", a)a = 3eda(a)print(a)可以看到不管函数内部a怎样变化,一旦出了函数,a的值又还原成了原来的数通常不可变类型作为函数参数,皆为值传递二 引用传递传递的变量在函数内的改变会影响函数外的情况,例如:def init_list(a): a.append(3) a.append(5)a = []init_
2022-05-15 12:01:32 195
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
Maven权威指南
2011-09-24
设计模式之详解(c++实现版)
2009-07-08
多叉树构造器
2008-04-13
在android系统中如何监控可写入的控件获得焦点这样的事件
2014-03-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人