作者归档:desmond

转向量化交易

量化交易

量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。

就职公司

经传多赢投资咨询有限公司

以前我做什么

2014年毕业, 接触客户端的C++开发工作, 当时主要使用的是window下的duilib开发, 在15年的时候转向linux后端开发, 后面岔开一年左右负责PHP后端开发工作, 直到17年继续负责行情后端的研发, 在18年左右, 正式成为了公司行情后端的组长, 随后一直负责行情后端. 期间带领团队重新建立起了一套完整的行情后端服务, 支持高可用, 水平拆分, 垂直拆分等, 除开一些基础库之外, 全部使用自己编写的框架, 将公司的后端技术水平提升到行业前列.

转方向

与其说是转方向, 不如说是开拓一片新的天地, 行情相关的项目, 已经被我玩透了, 在我手下估计很难再玩出花来. 而量化交易是一片新的蓝海, 可以从0到1搭建出一个完整的量化交易项目, 再均衡各种利弊之后, 依然决定跳出以前的项目组, 转向量化交易.

量化交易系统到底在做什么

从20年开始, 公司资管部门的负责人就已经跟我再搭线, 帮忙做量化交易系统。那么到底什么事量化交易系统呢? 网上有很多种定义, 但是从程序员的角度上看呢, 量化交易 = 策略 + 机器交易, 策略根据行情,持仓等各种因素产生交易信号, 然后程序化的下单。虽然只有两句话, 但是实际里面的行为是非常复杂的, 市面上的量化交易系统, 大多比较复杂, 看他们的PPT都吹得牛逼哄哄的, 也不知道是真的还是假的. 但是每个公司的需求不一样, 做出的量化系统也各有千秋.

继续阅读

我们在招人

公司介绍

经传多赢是一家以股票软件作为载体的, 经证监会核准的证券投资咨询机构, 业务范围包括股票, 基金, 资产管理等方面. 公司正处于快速上升期, 各线业务飞速发展, 业绩增长可观, 上市规划清晰.

我们是谁

我们是证券行情组, 是公司最为核心的中坚力量, 主要负责分布式行情服务器系统, 证券客户端软件PC端的研发工作.

我们主要做什么

行情组主要分为行情后端组和客户端前端组, 后端组维护了一套分布式行情服务系统, 从交易所过来的行情, 经过行情系统的二次计算, 重新分发, 支持百万级别的用户实时订阅查看. 同时为我们资管公司维护程序化交易系统, 直接操盘亿级资金. 前端组主要为PC客户端, 同时维护PC证券软件, 基金软件, 交易软件等多线路产品.

技术实力

我们的分布式行情系统, 程序化交易系统等服务, 均采用C++语言编写, 并且全部使用自研的技术框架, 轻轻松松抗百万并发, 水平伸缩, 垂直伸缩, 动态扩容均不在话下, 我们的目的是使用最小的资源, 实现最好的效果. 团队大牛比比皆是, 气氛活跃, 定期技术分享, 加速成长。

希望你具备什么

初级后端工程师(应届)

  1. 扎实的C/C++功底
  2. 良好的编程习惯和代码风格
  3. 熟练使用一种linux的发行版
  4. 对POSIX API有一定的认知
  5. 热爱学习, 不懂就问, 有良好的逻辑思维能力和自我管理能力
    继续阅读

折腾精神

好的程序员,会折腾.

        经常在办公室评价别人, 会以折腾精神来评价, 那家伙不错, 挺会折腾的. 这家伙一般, 不爱折腾. 作为理工科出生, 折腾一定程度上代表了动手能力, 解决问题能力, 甚至于直接上升到工作能力.

继续阅读

前端的一些奇怪的问题备注

bind函数

当绑定一个函数, 然后这个函数会在别的地方回调的时候,会丢失上下文的信息,这个时候,我们就要使用bind函数, 将这个上下文绑定到这个函数里面

  stRes: STRes = {
    reName: {
      list: "users",
      total: 'pageinfo.count'
    },
    // 这个函数, 会在内部被调用, 这个时候一定要绑定this, 否者这个this, 就会是奇怪的东西
    process: this.resprocess.bind(this)
  };

  resprocess(data: STData[], rawData?: any) {
    for(let index in data) {
      data[index]['image'] =this.userimage(data[index]['image']);
    }
    return data;
  }

决战客户端技术

  最近经常有小伙伴问我要做一个客户端, 该怎么弄. 这个问题问得很粗犷, 但是实际上客户端的选型是一个很细的问题. 从大学到现在, 也弄了不少的客户端, 从公司主营炒股专业客户端, 到内部项目使用的OA客户端, 还有大学的时候为了毕业而弄的QT, 各式各样, 这里就给大家讲解一下, 我所了解的几种客户端的选型(这里主要针对windows,也会提及一些跨平台技术).

  windows下的客户端都是基于win32, 在这基础上, 我们可以细分为, 原生win32, MFC, C#(语言封装), 高级win32-duilib, QT, CEF, electron(nwjs) 大体就这几种了, 其中很多是重合的, 下面我们就每个都讲一讲优劣.
继续阅读

线程池的自我修养

最近重构行情服务端的框架,其中有一部分就是重写mysql线程池,线程池是一个很独立的东西,今天就拿出来给大家分享, 怎样设计一个线程池, 以及我是怎么做的.

为什么要使用线程池

常见的线程池使用场景分为两种

  1. 大量计算, 充分利用多核

这个很好理解, 当程序需要大量计算, 单核CPU跑到100%, 这个时候可以将计算任务分解, 分多个线程计算, 如果我们有4核, 那这个时候我们可以跑到400%, 理想情况下, 可以节省3倍的时间. 当然这个不是绝对的, 具体情况要具体分析. 总而言之, 是为了让程序充分打满CPU.

  1. 同步阻塞,转异步回调

如果这个是web程序, 异步绝对是提高并发的神器. 在我们的C++服务器中, 也会有大量的阻塞任务, 可能是读取mysql, 可能是读取mongodb, 或者任意需要同步等待完成的事情, 那么在等待的时候, 我们的工作线程是完全没法做别的工作的, 这个时候我们就把等待的过程, 变成一个任务, 让线程池去做, 主线程继续处理别的工作, 等线程池完成之后, 再接管任务, 继续往下面执行.

继续阅读

雀观代码

  写博客已经有很长一段时间了, 虽然大部分都是记着流水账, 但是也有不少篇幅的积累. 以前写博文有个习惯, 不想暴露太多私人信息, 所以写起来大多畏畏缩缩, 更多的是针对一些细节的反复描述. 近来发现时机已经成熟, 想创造自己的技术力影响圈, 所以开了<雀观代码>的公众号, 欢迎大家订阅.

  不是所有的人都在BAT. 中国现在程序员群体大约在200万左右, 正真在大公司的可能占20%, 也就是说绝大多数的还是在普通的中小型企业, 我就是其中一个. 在企业的5年里面, 有幸见证了技术部从20号人, 慢慢扩展到现在的170人左右, 人员走走留留, 大浪淘沙. 这5年了积累了很多的经验, 也悟出了独有的方法. 不是所有BAT的技术都适合中小企业, 我将从中小企业的角度, 向大家阐述中小企业技术人员的生存之道, 欢迎订阅<雀观代码>.

  下面我将从技术, 资源, 晋升, 视野等角度, 讲述在中小企业的状况.

继续阅读

值得纪念的一年

拿到股权

从大学毕业至今已有4年半载, 在这个社会大学毕业之际, 拿到公司的股权是对我过去四年的肯定, 内心非常高兴. 也许是自考上大学之后的第二个转折点.

这一年干了什么

工作上主要负责了C++行情服务器的开发, 价值猎手项目主题猎手项目, 以及各类杂七杂八的项目, 虽然算不上非常成功, 但是也都是井井有条.
继续阅读

CLion 远程编译调试

eclipse cdt 使用rse

尝试和很久使用eclipse cdt的rse实现远程编译, 最后终于放弃了, 个人觉得自己的折腾能力还是很强的, 我花了两天的时间研究, 最后还是失败了, 大家还是不要尝试了.

为什么要使用远程编译

普通的PC机器, 性能太渣, 随随便便编译一下就卡死了, 特别是调试程序的时候, 我们的程序动不动就30多个G的内存, 普通的PC机器根本扛不起来, 公司的高配机器有很好的性能, 放一台在内网做公共的开发机器, 能极大的提高效率.
继续阅读

sort 导致进程崩溃

转载自沙子泥巴刘的博客

前言

最近被一个在sort自定义排序导致的崩溃问题, 弄得焦头烂额. 后在网上看了这篇文章, 才解决问题, 转载一次.

正文

近期我们开发的一个工具在调用c++ sort函数对数组进行排序时居然会导致进程崩溃,此问题细节我觉得对于类似我这种不常用stl的同学可能不容易觉察,这里简单总结下。

出错代码

因为代码太复杂不好展示,我这里就用下面这个简单的示例来描述。

#include <algorithm>

bool comp(int d1, int d2)
{
    return d1 >= d2;
}

const int N = 50;

int main()
{
    int d[N];
    for(int i = 0; i < N; ++i)
    {
        d[i] = 20;
    }

    std::sort(d, d + N, comp);
    return 0;
}

不知你是否直觉上也会觉得这段代码没什么问题,但是这段代码运行后会core dump。查看core文件可以看到内存里的栈被写坏了,这说明sort调用导致了内存越界访问,在这么少的代码行下,不难判定应该是comp函数实现可能不符合c++标准库的某种规则(C++ STL是基于concept的设计和实现)。
继续阅读