自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 扫描全能王文档矫正逆向记录

花了两三个月时间将扫描全能王的一个算法扒了个底朝天

2023-10-19 20:45:00 1376 2

原创 Could not find install_name_tool 错误

Could not find install_name_tool 错误的原因和解决

2022-03-23 15:37:34 4728

原创 程序员如何学习量化交易,一文总结

最近有位金融行业的朋友想把一个盈利能力很强的策略做成量化程序遇到问题,问题是这样的线程A在while(true)的循环里做条件判断,循环耗时1分钟。循环结束判断条件满足的时候调用交易接口下单建仓。想实现条件成立马上建仓,而不需要等待1分钟的循环。想通过多进程或者多线程方式,但两个线程不知道如何交互。对有经验的开发来说这样的逻辑很简单,只要通过线程通信的方式就可以实现。A线程判断到满足条件就发个消息给B线程,B线程while(true)等待消息就行。技术本身不复杂,只是没接触过编程的不知道还可以这么干

2021-07-06 11:23:09 4859 4

原创 中文字符在MQL的处理

“我花了两天时间,解决了一个中文字符在MQL下的解码问题”众所周知中文字符需要用UTF8编码。如果是用高级语言开发,那么基本不会遇到编解码问题,语言本身就帮你处理了这些细节。但如果你用C语言,而且不允许用第三方库呢?UT8和中文编码以前的计算机只支持英文字符的时候,全部字符加符号也不过一两百个,ascii解决不了的,扩展一下表就可以了。后来遇到了中文等其他语言,ascii就没辙了。动不动几万个字符,这咋整?于是就有了UTF8编码。比如"帅小伙",用UTF8编码是帅&

2021-06-08 14:56:57 516

原创 十年量化交易经验精华总结

量化交易的入门资料太难找,当时也是自己一路摸爬滚打自学过来。把这十年的经验整理了一下,只把最精华的部分列出来,给想学的做参考。学量化交易只要两个东西,基本上是有手就会。MQL官网官网上有MQL语言所有需要的API和框架介绍,开发过程中有什么不认识的API直接查就行。官网链接http://docs.mql4.com书推荐一本《炒汇入门》,这本书只有几十页,包含了所有需要了解的最基本常识。包括指标,基本的经济原理,这些是量化交易开发能力之外所需要掌握的常识。建议学量化交易靠自学能解决一大

2021-06-08 11:19:20 7064

原创 量化交易入门--写第一个量化程序

一位量化交易程序员手把手教你入门上篇介绍完了如何配置量化交易所需要的环境,这篇继续介绍如何写第一个量化交易程序。MT4提供的sample程序只有基本的功能,不能够自动交易。我们写一个自动交易程序,逻辑如下· 下一个多单· 检查当前盈利情况· 盈利大于1美金止盈平仓,或者亏损大于1美金止损平仓· 退出程序//+------------------------------------------------------------------+//|

2021-04-12 16:00:31 10559

原创 量化交易入门,看这篇就够了

一位量化交易程序员手把手教你入门市面上教量化交易的资料五花八门,我们希望能用最少的篇幅,最少的文字,在最短时间内让大家可以尝试量化交易。量化交易不是什么新鲜名词了,自从计算机出现在金融交易领域之后,就有越来越多的交易员从传统的人工交易转到计算机自动交易。那些从事量化交易的交易员,本身也是很优秀的制图师,他们需要分析大量的市场数据,得到不同的指标之后作为判断依据。从这个方式出发诞生了很多理论,像波浪理论,动量理论。量化交易其实就是通过计算机代替人力分析大量的市场数据。对于千亿甚至万亿的金融市场来说,这

2021-04-12 11:08:38 12330 2

原创 MQL--量化交易编程语言

​extern mode 风控选择=1 ; extern bool 第一组货币交易=true ;这两行代码是从一个MQL程序里摘出来的,它命名了一个枚举和一个布尔变量。能用中文命名变量的语言不少,但MQL的特别之处在于,它能赚钱!量化交易程序语言MQLMQL全称叫MetaQuotesLanguage,是一种广泛应用在外汇交易领域的语言。第一次接触它是在很多年前,那时候它还只有MQL4版本,现在已经更新到MQL5了。在用MQL进行交易之前,我每天都要盯着交易软件,那时.

2021-04-11 15:54:16 7632

原创 深度模型量化交易的一次尝试

​这是我们团队开发的深度学习模型在2016-2020年外汇投资上的收益曲线。这个模型在没有人工干预的情况下5年获得了10W美金的盈利,平均年化达到了100%。下面这张是我们把这个模型放到2010-2015的历史数据去测试得到的收益曲线,收益12W美元。如果想要回测数据的话可以在公号后台回复"回测数据"下载。基于对冲策略的深度模型这个模型的理论基础来自于毛子的《Pairs Trading》这本书,作者是Ganapathy Vidyamurthy。(用达瓦里希的理论薅布尔乔亚

2021-04-11 15:50:38 641 2

原创 Tensroflow 手动编译TFLite

本篇主要作为一个操作手册来介绍怎么编译Tensorflow和记录编译过程中踩过的坑建议在编译TFLite之前通读一遍本文,可以少走很多弯路。在安卓上使用TFLite一般可以通过直接在gradle中引用dependencies的方式增加TFlite依赖。但在一些自定义场景下需要我们手动去编译TFlite依赖库,比如在C++下开发了基于Tensorflow Lite的模型或者逻辑。google预编译的TFLite so库的C++ 符号只有基本的几个JNI接口,如果我们想在安卓的C++ 层对TFLite进

2020-07-16 16:07:18 1588

原创 TFLite - NDK11 构建问题

Duplicated key “arm64-v8a” when creating dictionarytflite - bazel 1.2.0 - ndk11 构建发生错误Duplicated key “arm64-v8a” when creating dictionarybazel构建会去找 BUILD.bazel里对应的 cc_toolchain_suite 工具链套件,工具链套件是在构建过程中由bazel的androidndk插件自动生成的,位置在/private/var/tmp/_b

2020-07-10 17:56:03 369

原创 visual studio创建和链接dll-显示链接

环境:visual studio 2019本篇主要介绍如何操作并显示链接dll。win平台dll的链接有两种方式,在上一篇visual studio创建和链接dll-隐式链接中介绍的是如何隐式链接,和显示链接的区别主要有两点。隐式链接不需要手动加载dll隐式链接在程序启动的时候,系统会自动加载exe和dll显示链接只在需要的时候才手动加载,同时也要手动释放显示链接在编译主程序的时候不需要静态库做符号链接,但需要手动做符号导出创建DLL创建DLL和隐式链接的方式一样,这里不重复介绍,参考v

2020-06-15 11:13:11 837 1

原创 visual studio创建和链接dll - 隐式链接

环境:visual studio 2019本篇主要描述怎么创建一个dll库,然后用隐式链接的方式让exe链接dll。以下内容假设已经知道C艹的动态库基本概念,和一些基本的C艹语法。项目结构demo项目有两个部分,· app· mathlibmathlib只提供一个简单的方法power(),app直接调用这个方法返回一个数的平方。main.cc#include <iostream>#include "Math.h"using namespace std;int mai

2020-06-13 15:54:43 620

原创 Binder通信和启动流程源码详解

所有源码均基于android M本篇从情景化角度出发分析Binder的通信逻辑。其中会涉及到几个概念· media server - 系统多媒体服务· media player server - 多媒体服务下的视频服务· Binder驱动先总结一下本篇所会涉及到的概念和他们之间的关系。media server 是安卓系统中用来管理各个多媒体服务的“服务的服务类”。media server管理着多个服务的启动和加载,包括 AudioFlinger,Camera,MediaPlayerServi

2020-05-26 16:14:16 914

原创 Kotlin协程-Scheduler的优秀设计

在仔细分析协程源码后,发现kotlin中协程的很多设计都参考了golang中的实现。比如跟线程和任务调度关系最密切的 Scheduler 类,在它的注释中看到这句话,* The original idea with a single-slot LIFO buffer comes from Golang runtime scheduler by D. Vyukov. * It was proven to be "fair enough", performant and generally well ac

2020-05-19 20:38:46 691

原创 Kotlin协程-特殊的阻塞协程

阻塞协程是种特殊的协程启动方式,一般是用 runBlocking{} 扩起来一段协程。fun main() = runBlocking { launch { println("launch start") delay(100L) // 非阻塞的等待 1 秒钟(默认时间单位是毫秒) println("World Thread: ${Thread.currentThread().name}") println("World!") // 在

2020-05-18 22:45:35 4118

原创 Kotlin协程-协程的内部概念Continuation

一个协程的生命周期是这样的,±---------+        ±---------------------+| START |----------------------->| SUSPENDED |±---------+        ±---------------------+               |  ^               V  |              ±-----------+ completion invoked ±----------------

2020-05-18 18:01:07 2872

原创 Kotlin协程-调度器中的精妙实现

kotlin的默认调度器实现其实有两个,而我们常用的是DefaultScheduler。另一个是CommonPool。internal actual fun createDefaultDispatcher(): CoroutineDispatcher = if (useCoroutinesScheduler) DefaultScheduler else CommonPoolCommonPool也是一个线程池实现。它创建线程池的部分很有意思,private fun createPool():

2020-05-18 17:50:35 892

原创 Kotlin协程-一个协程的生命周期

《Kotlin协程》均基于Kotlinx-coroutines 1.3.70在安卓或者kotlin平台上使用协程是很简单的一件事情。举一个最简单的例子,不依赖安卓平台的协程代码,fun main() { GlobalScope.launch { delay(1000L) // 非阻塞的等待 1 秒钟(默认时间单位是毫秒) println("World!") // 在延迟后打印输出 } delay(100L) println("Hello,"

2020-05-18 14:27:14 1868

原创 Linux内核中断和io

首先考虑一个很简单的问题,假设一段代码a和b,a是cpu密集型运算,b是io密集运算。a的运行时间是O(a)b的运行时间是O(b)如果用同步代码写的话,a+b的运行时间是 O(a+b),用协程写,launch{a+b}的时间C,C < O(a+b) 吗?这个问题的答案是,C确实会小于O(a+b)。很多开发者,包括很多技术大V对协程的解释比较浅,认为没这种好事,C肯定还是等于O(a+b)的。这个结论跟常识其实有点相反。一开始学习相关的技术点会觉得违反常理,但随着学习的深入,会发现这东

2020-05-15 15:27:52 741

原创 Kotlin协程-协程派发和调度框架

一个coroutine创建好之后,就交给协程框架去调度了。这篇主要讲从launch{…}开始,到最终得到执行的时候,所涉及到的协程框架内部概念。一般开发中所接触到的协程类和接口无非是 launch, async, Dispatch.IO…,这些概念是对我们开发者来说的。进入协程源码的世界之后,这些概念就会被一些内部概念所替代。搞清楚内部概念对分析协程源码来说非常关键。协程的最小粒度-Coroutine对没接触过协程的人来说,一个OOP代码的最小调度粒度是函数。在协程中,最小的调度粒度是协程,在kotl

2020-05-14 17:23:02 585

原创 Kotlin协程开篇

《Kotlin协程》均基于Kotlinx-coroutines 1.3.70· 协程是什么?· 什么时候用协程?· 协程的核心是什么?· kotlin的协程和其他语言的协程有什么异同?协程没那么难协程的出现是为了解决异步编程中遇到的各种问题。从高级编程语言出现的第一天,异步执行的问题就伴随出现。在Kotlin里使用协程非常方便,import kotlinx.coroutines.*fun main() { GlobalScope.launch { // 在后台启动一个新的协程并继

2020-05-13 15:10:02 277

原创 Redis事件驱动(2)- 注册

在创建完文件描述符FD之后,Redis就拥有了一个可以监听客户端事件的句柄了。注意在创建fd之后,实际上并没有开始接受客户端连接。接受客户端连接请求过程分两个部分,· accept· waitaccept做的事情是等待客户端连接。当我们在服务器上运行了 redis-server,Redis会启动并开始初始化,在初始化完成时,Redis持有了一个文件描述符,并且开始等待连接。直到有一个...

2020-04-27 18:05:34 427

原创 Redis事件驱动(1)- 创建

Redis作为一个能负载十万级别QPS的数据库,它在高峰并发情况下能够承载1000个客户端的并发请求。除此之外,Redis还是在单线程模式下工作。从这个角度可以说Redis是人类编程精华。而事件驱动则是Redis的心脏。Redis的事件驱动从一个函数开始,aeCreateEventLoop()aeCreateEventLoop()在ae.h中,声明了 aeCreateEventLoop(...

2020-04-27 18:05:00 227

原创 Redis的客户端服务端连接-事件驱动前言

事件驱动是Redis的最核心功能,但在看这部分源码之前需要先了解Redis是怎么建立一个 C/S 连接的。事件驱动分为两部分,· 文件事件· 时间事件时间事件很好理解,就是一个定时任务,对当前Redis环境的信息统计,内存整理。文件事件比较晦涩,特别是对于从来没接触过Unix系统,在Unix上写过代码的人来说,这部分代码可能会占到整个源码阅读时间的1/3。所谓文件事件,在Redis中...

2020-04-27 14:39:14 205

原创 C语言实现类似Java接口的设计

面向对象设计中的接口在高级语言中常见,在Redis中居然有用C语言实现类似接口功能的代码。在阅读 dict 代码的过程中发现,词典的数据结构有个奇怪的结构体typedef struct dictType { unsigned int (*hashFunction)(const void *key); void *(*keyDup)(void *privdata, const ...

2020-04-26 20:38:19 558

原创 Redis数据对象(2)-注册与匹配

稍微猜想的话应该能猜到,Redis是根据不同的命令来找到不同的处理函数的。这些命令的构成基本有以下规则COMMAND KEY VALUE…那么Redis是怎么根据不同的COMMAND找到对应的处理函数的?Redis Comand的原型声明在开始理解这部分之前,有个前提需要说明这部分分析是脱离了Redis对client传输到服务端的数据获取和解析过程的,因为这部分逻辑涉及到事件循...

2020-04-26 20:36:47 153

原创 Redis数据对象(1)-架构

在对Redis源码的梳理过程中,下面这几类被分为数据对象。数据对象object.ct_stringt_listt_hasht_set什么是数据对象?实际上在Redis中并没有数据对象这个概念。但如果从Redis架构设计上来进行分析的话,上面这几类数据,和 sds, adlist,在Redis中起到的作用有非常大的差异。首先这几类对象只有 .c 文件,而没有 .h。相关函数声明...

2020-04-26 20:36:11 93

原创 人类编程精华 -- Redis核心源码分析开篇

以下内容默认以redis 2.8版本源码作为基础Redis的主要内容可以分为几个部分· 基本数据结构· 数据对象· 核心逻辑-事件循环/事件驱动· 磁盘文件系统围绕核心的架构,Redis还可以区分出几个模块· 服务端/客户端连接· 事务(transation/multi)· master-slave机制· expire机制· 慢查询· pub-sub机制Redis代码结构...

2020-04-26 20:35:36 265 1

原创 Redis基本数据结构(3)-dict

熟悉python的开发者应该对字典结构非常了解,字典通常泛指这类高层数据结构,dict: {“name”:“Jack”}更广泛意义上可以理解为 key-value 结构的都是 dict。在进一步地了解Redis的dict之前,需要清空对dict的刻板思维。不要认为它只是一个存储数据的数据结构。否则会对源码分析造成很大困难。Redis的dict设计非常精妙,不仅实现key-value...

2020-04-26 20:34:59 527

原创 Redis基本数据结构(2)-adlist

adlist是Redis中的双向链表。双向链表的数据结构,和遍历算法有很多资料可以查到,这里不对其中的算法细节详细描述。主要关注的是Redis利用双向链表结构,实现了什么样的精妙设计。节点的数据结构adlist首先是个链表,链表中的节点listNode定义在adlist.h中,typedef struct listNode { struct listNode *prev; ...

2020-04-26 20:34:28 366

原创 Redis基本数据结构(1)-sds

sds是Redis中最简单的数据结构,用来规范Redis中字符串的。在高级语言里我们有很多函数可以方便的操作字符串,像Java里的String,有append,trim,replace,但在C层面上,Redis为了方便操作字符串,同时为了内存管理,巧妙设计了sds这个结构体。它有两个文件· sds.c· sds.hsds 结构体sds结构体定义在 sds.h 中struct sds...

2020-04-26 20:33:52 395

原创 numpy arrays 基础和操作

python中的数据操作基本都用numpy来做,在做深度学习的过程一定也绕不过numpy。这篇分几个部分介绍numpy· numpy array 的基本属性,包括 shape, size, dim, data type· 通过 index 获取 numpy array 的数据· 分割 numpy array,获取 sub array· 变换 numpy array 的维度· 合并 num...

2019-11-11 16:50:32 884

原创 tensorflow.python.framework.errors_impl.InvalidArgumentError indices = is not in

issue在做文本分类功能,用到 embedding layer 的时候可能会遇到这个问题,tensorflow.python.framework.errors_impl.InvalidArgumentError indices = is not in具体具体数值不是固定的,可能是这样tensorflow.python.framework.errors_impl.InvalidArg...

2019-11-11 11:03:34 9996 12

原创 TextCNN in CoreML

issuesunsupported ops of type gatherv2Embedding layer: ‘embedding_1’: height dimension of the input blob must be 1.NSLocalizedDescription = “Failure dynamically resizing for sequence length.”NSLoc...

2019-11-09 15:03:45 433

原创 CoreML遇到的问题和原因

issue list· unsupported ops of type gatherv2· Embedding layer: ‘embedding_1’: height dimension of the input blob must be 1.· NSLocalizedDescription = “Failure dynamically resizing for sequence leng...

2019-11-09 14:58:24 3354

原创 观察者模式--DataBinding的原理和坑

上一次我们介绍了DataBinding的应用,不过只在应用层面描述了下,没有做深入分析。 关于DataBinding的实现原理,它的根本思想是观察者模式。 这篇会结合上次的demo来分析它的原理和坑,关于demo源码可以在后台回复”数据绑定”获得。回顾观察者模式关于观察者模式有一篇详细的文章可以看看, 重新认识观察者模式 简单的说,当数据发生变化的时候,通过 notify通知观...

2018-08-22 14:47:21 1227

原创 从暴露年龄的屏保说起-贝塞尔曲线(附Demo)

这个屏保很多90后的朋友可能没见过,当年在windows刚普及不久的时候,很多人的电脑上的屏幕保护程序就是这个。 印象这个屏保叫贝塞尔曲线,其中的每一条线都是一条贝塞尔曲线。 贝塞尔曲线就是今天的主题。 Android中很多地方都用到了贝塞尔曲线,像下面这个水波纹效果就是用贝塞尔曲线做的。什么是贝塞尔曲线Bezier curve(贝塞尔曲线)是一种用数学描述任意曲线的方法。 它...

2018-08-21 10:02:00 1507

原创 Android UI开发利器-DataBinding(附Demo)

DataBinding是谷歌官方推出的一个数据/UI绑定框架,官方解释是 The Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rath...

2018-08-21 09:54:07 627

原创 Android进阶资深开发必备技能-切面编程

切面编程听起来可能有点陌生,不过现在越来越多的开发团队正在使用上这种技术。 先说熟悉的面向对象编程 OOP,通常都是用各种对象/模块来负责具体的功能,互相之间尽量不耦合。 切面编程AOP(aspect-priented programming)是为了解决OOP中耦合无法解除的问题而产生的。打个比方现在项目中有负责 网络/数据存储/UI 几个模块,每个模块都接入了另外一个Log模块。 虽然...

2018-07-27 15:03:36 210

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除