程序员如何学习量化交易,一文总结 最近有位金融行业的朋友想把一个盈利能力很强的策略做成量化程序遇到问题,问题是这样的线程A在while(true)的循环里做条件判断,循环耗时1分钟。循环结束判断条件满足的时候调用交易接口下单建仓。想实现条件成立马上建仓,而不需要等待1分钟的循环。想通过多进程或者多线程方式,但两个线程不知道如何交互。对有经验的开发来说这样的逻辑很简单,只要通过线程通信的方式就可以实现。A线程判断到满足条件就发个消息给B线程,B线程while(true)等待消息就行。技术本身不复杂,只是没接触过编程的不知道还可以这么干
中文字符在MQL的处理 “我花了两天时间,解决了一个中文字符在MQL下的解码问题”众所周知中文字符需要用UTF8编码。如果是用高级语言开发,那么基本不会遇到编解码问题,语言本身就帮你处理了这些细节。但如果你用C语言,而且不允许用第三方库呢?UT8和中文编码以前的计算机只支持英文字符的时候,全部字符加符号也不过一两百个,ascii解决不了的,扩展一下表就可以了。后来遇到了中文等其他语言,ascii就没辙了。动不动几万个字符,这咋整?于是就有了UTF8编码。比如"帅小伙",用UTF8编码是帅&
十年量化交易经验精华总结 量化交易的入门资料太难找,当时也是自己一路摸爬滚打自学过来。把这十年的经验整理了一下,只把最精华的部分列出来,给想学的做参考。学量化交易只要两个东西,基本上是有手就会。MQL官网官网上有MQL语言所有需要的API和框架介绍,开发过程中有什么不认识的API直接查就行。官网链接http://docs.mql4.com书推荐一本《炒汇入门》,这本书只有几十页,包含了所有需要了解的最基本常识。包括指标,基本的经济原理,这些是量化交易开发能力之外所需要掌握的常识。建议学量化交易靠自学能解决一大
量化交易入门--写第一个量化程序 一位量化交易程序员手把手教你入门上篇介绍完了如何配置量化交易所需要的环境,这篇继续介绍如何写第一个量化交易程序。MT4提供的sample程序只有基本的功能,不能够自动交易。我们写一个自动交易程序,逻辑如下· 下一个多单· 检查当前盈利情况· 盈利大于1美金止盈平仓,或者亏损大于1美金止损平仓· 退出程序//+------------------------------------------------------------------+//|
量化交易入门,看这篇就够了 一位量化交易程序员手把手教你入门市面上教量化交易的资料五花八门,我们希望能用最少的篇幅,最少的文字,在最短时间内让大家可以尝试量化交易。量化交易不是什么新鲜名词了,自从计算机出现在金融交易领域之后,就有越来越多的交易员从传统的人工交易转到计算机自动交易。那些从事量化交易的交易员,本身也是很优秀的制图师,他们需要分析大量的市场数据,得到不同的指标之后作为判断依据。从这个方式出发诞生了很多理论,像波浪理论,动量理论。量化交易其实就是通过计算机代替人力分析大量的市场数据。对于千亿甚至万亿的金融市场来说,这
MQL--量化交易编程语言 extern mode 风控选择=1 ; extern bool 第一组货币交易=true ;这两行代码是从一个MQL程序里摘出来的,它命名了一个枚举和一个布尔变量。能用中文命名变量的语言不少,但MQL的特别之处在于,它能赚钱!量化交易程序语言MQLMQL全称叫MetaQuotesLanguage,是一种广泛应用在外汇交易领域的语言。第一次接触它是在很多年前,那时候它还只有MQL4版本,现在已经更新到MQL5了。在用MQL进行交易之前,我每天都要盯着交易软件,那时.
深度模型量化交易的一次尝试 这是我们团队开发的深度学习模型在2016-2020年外汇投资上的收益曲线。这个模型在没有人工干预的情况下5年获得了10W美金的盈利,平均年化达到了100%。下面这张是我们把这个模型放到2010-2015的历史数据去测试得到的收益曲线,收益12W美元。如果想要回测数据的话可以在公号后台回复"回测数据"下载。基于对冲策略的深度模型这个模型的理论基础来自于毛子的《Pairs Trading》这本书,作者是Ganapathy Vidyamurthy。(用达瓦里希的理论薅布尔乔亚
Tensroflow 手动编译TFLite 本篇主要作为一个操作手册来介绍怎么编译Tensorflow和记录编译过程中踩过的坑建议在编译TFLite之前通读一遍本文,可以少走很多弯路。在安卓上使用TFLite一般可以通过直接在gradle中引用dependencies的方式增加TFlite依赖。但在一些自定义场景下需要我们手动去编译TFlite依赖库,比如在C++下开发了基于Tensorflow Lite的模型或者逻辑。google预编译的TFLite so库的C++ 符号只有基本的几个JNI接口,如果我们想在安卓的C++ 层对TFLite进
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
visual studio创建和链接dll-显示链接 环境:visual studio 2019本篇主要介绍如何操作并显示链接dll。win平台dll的链接有两种方式,在上一篇visual studio创建和链接dll-隐式链接中介绍的是如何隐式链接,和显示链接的区别主要有两点。隐式链接不需要手动加载dll隐式链接在程序启动的时候,系统会自动加载exe和dll显示链接只在需要的时候才手动加载,同时也要手动释放显示链接在编译主程序的时候不需要静态库做符号链接,但需要手动做符号导出创建DLL创建DLL和隐式链接的方式一样,这里不重复介绍,参考v
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
Binder通信和启动流程源码详解 所有源码均基于android M本篇从情景化角度出发分析Binder的通信逻辑。其中会涉及到几个概念· media server - 系统多媒体服务· media player server - 多媒体服务下的视频服务· Binder驱动先总结一下本篇所会涉及到的概念和他们之间的关系。media server 是安卓系统中用来管理各个多媒体服务的“服务的服务类”。media server管理着多个服务的启动和加载,包括 AudioFlinger,Camera,MediaPlayerServi
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
Kotlin协程-特殊的阻塞协程 阻塞协程是种特殊的协程启动方式,一般是用 runBlocking{} 扩起来一段协程。fun main() = runBlocking { launch { println("launch start") delay(100L) // 非阻塞的等待 1 秒钟(默认时间单位是毫秒) println("World Thread: ${Thread.currentThread().name}") println("World!") // 在
Kotlin协程-协程的内部概念Continuation 一个协程的生命周期是这样的,±---------+ ±---------------------+| START |----------------------->| SUSPENDED |±---------+ ±---------------------+ | ^ V | ±-----------+ completion invoked ±----------------
Kotlin协程-调度器中的精妙实现 kotlin的默认调度器实现其实有两个,而我们常用的是DefaultScheduler。另一个是CommonPool。internal actual fun createDefaultDispatcher(): CoroutineDispatcher = if (useCoroutinesScheduler) DefaultScheduler else CommonPoolCommonPool也是一个线程池实现。它创建线程池的部分很有意思,private fun createPool():
Kotlin协程-一个协程的生命周期 《Kotlin协程》均基于Kotlinx-coroutines 1.3.70在安卓或者kotlin平台上使用协程是很简单的一件事情。举一个最简单的例子,不依赖安卓平台的协程代码,fun main() { GlobalScope.launch { delay(1000L) // 非阻塞的等待 1 秒钟(默认时间单位是毫秒) println("World!") // 在延迟后打印输出 } delay(100L) println("Hello,"
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)的。这个结论跟常识其实有点相反。一开始学习相关的技术点会觉得违反常理,但随着学习的深入,会发现这东