Quant note
打开量化交易的黑箱
概念阐明
1. “无效市场无风险套利”
“当其他交易者的需求使得证券市场的供需关系短暂失衡时,量化交易可以通过提供流动性使得市场更有效率。从有效市场(eficientmarket)的经济角度而言,不平衡性也称为市场无效(inefficients)。真正的无效市场代表着存在很少的、转瞬即逝的无风险套利机会。”
这段话主要讨论了量化交易如何通过提供流动性来帮助证券市场达到更高的效率,并简要提到了有效市场理论与市场无效的概念。下面我会逐步解释这些概念,以便更容易理解:
量化交易提供流动性
量化交易通常涉及使用算法和数学模型自动执行大量的交易。当市场上某些证券的买卖订单不平衡时,即供求关系失衡,量化交易可以迅速介入,通过买入或卖出这些证券,帮助“填补”市场上的订单空缺。这种快速响应市场的能力使得量化交易者可以为市场提供所谓的“流动性”,即使资金更容易、更快速地在市场参与者之间流动。
市场效率与市场无效
有效市场假说(Efficient Market Hypothesis,EMH)认为,市场价格在任何给定时间都已经反映了所有可用信息。因此,在一个完全有效的市场中,没 ...
OS_lab
OS lab
M1: 打印进程树 (pstree)
总体思路按照实验指南:
得到命令行的参数,根据要求设置标志变量的数值;
得到系统中所有进程的编号 (每个进程都会有唯一的编号) 保存到列表里;
对列表里的每个编号,得到它的的父亲是谁;
在内存中把树建好,按命令行参数要求排序;
把树打印到终端上。
1. 得到命令行的参数
c可以在main入口函数中得到命令行参数,这里的参数是一个字符串数组,每个字符串是一个参数,由空格分隔。于是遍历这些参数,并转化成我们需要的标志变量。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748int main(int argc, char *argv[]) for (int i = 0; i < argc; i++) { assert(argv[i]); // C 标准保证 // printf("argv[%d] = %s\n&quo ...
TRPO
TRPO
Background
在进入TRPO和PPO(两者同根生),我们先从自然梯度法(Natural gradient)引入信赖领域(proximal region)的概念。假设我们要求解的是某个概率分布πθ(s)\pi_\theta(s)πθ(s),那么一节梯度下降法本质就是对J(θ)J(\theta)J(θ)进行一阶展开:
θ′=arg minθ′∇θJ(θ)T(θ′−θ)\theta'=\argmin_{\theta'}\nabla_\theta J(\theta)^T(\theta'-\theta)
θ′=θ′argmin∇θJ(θ)T(θ′−θ)
但是直接这样粗暴的更新会带来问题:
参数空间θ\thetaθ的微小变动,会导致策略分布大幅度变化,让优化不稳定。
参数空间对策略分布的影响不一样,有些参数对策略分布的影响大,有些参数对策略分布的影响小,这样会导致优化效率低下。
于是我们放弃使用参数空间θ\thetaθ作为优化的“步长”,转而到πθ\pi_\thetaπθ中。我们用KL散度来衡量两个分布之间的差异,我们把策略空间用K ...
Generative Adversarial Network(GAN)
Generative Adversarial Network(GAN)
detect0530@gmail.com
生成器
具体来说,在模型输入时会将一个随机变量 z 与原始输入 x 一并输入到模型中,这个变量是从随机分布中采样得到。输入时可以采用向量拼接的方式将 x 和 z 一并输入。
我们预想训练一个预测游戏目标游走的模型,如果用传统的监督学习,结果可能会是的十分模糊的甚至游戏中的角色消失、出现残影的,造成该问题的原因是,我们监督学习中的训练数据对于同样的转角同时存储有角色向左转和向右转两种输出。当我们在训练的时候,对于一条向左转的训练数据,网络得到的指示就是要学会游戏角色向左转的输出。同理,对于一条向右转的训练数据,网络得到的指示就是学会角色向右转的输出。但是实际上这两种数据可能会被同时训练,所以网络就会学到的是“两面讨好”。当这个输出同时距离向左转和向右转最近,网络就会得到一个错误的结果———— 向左转是对的,向右转也是对的。
传统过的监督学习,只会让model输出一个结果,但是很多时候,我们希望模型有一些随机性(在有多个合理可能性时)。于是我们让网络有概率的输出一切可能 ...
SAC
SAC
detect0530@gmail.com
Problem to be solved
policy梯度那里,Z为什么能忽略。以及梯度加法那里。(泛函杀我)
SQL数学上和SAC区别
SAC’s background
SAC主要解决的是连续动作空间的控制问题,在我们一探SAC究竟之前,让我们先回顾SAC之前解决连续动作控制问题的两个主流算法:DDPG,PPO。
DDPG
DDPG是基于DPG(Deterministic Policy Gradient)的算法,我们接着先从DPG说起。
DPG
引入AC(actor - critic)框架,让值函数直接指导策略优化。这里有必要提一下,是因为DPG与之前的PG算法有本质的不同:
过去的PG算法使用累计收益(需要真的去模拟,做蒙特卡洛估计)作为目标,调整策略以追求更高的收益。
而DPG则是利用critic(Q函数)找到可能得最优策略,随后直接依靠Q值去优化策略函数,也就是说策略的调整完全不用依靠实际收益。
DPG的核心公式:
maxθEs∼D[Qωμ(s,μθ(s))]\max_{\theta}\mathbb{E ...
tensorboard
Tensorboard
详细的介绍和常见报错可以参考
TensorBoard最全使用教程:看这篇就够了
Tensorboard 无法打开网页 /不显示数据 / 命令行报错等解决办法集合
导入库
tensorboard是tensorflow的可视化工具,可以用来查看模型的训练过程,模型结构,模型参数等。
但是现在pytorch也支持tensorboard了,在处理loss,acc等数据的时候,可以使用tensorboard来可视化。
使用方法
123456# 生成一个writer对象,并指定生成图片的目录,其中logs为指定生成事件的目录writer = SummaryWriter("logs")for i in range(100): # 以y=x为标题,i为横坐标值,i同时也为纵坐标值,相当于绘制了一个y=x(0<=x<100)的直线 writer.add_scalar("y=x",i,i)writer.close()
运行代码之后会生成一个指定名字的目录,并且会包含一个事件在里面,这个事件要用tensorb ...
ArgumentParser
ArgumentParser
更具体细节的讲解可以参考知乎_Link
创建parser
12import argparseparser = argparse.ArgumentParser("Hyperparameters Setting for PPO-continuous")
创建parser对象,可以传入一个字符串作为描述信息。
添加参数
123parser.add_argument("--max_train_steps", type=int, default=int(3e6), help=" Maximum number of training steps")parser.add_argument("--evaluate_freq", type=float, default=5e3, help="Evaluate the policy every 'evaluate_freq' steps")parser.add_argument("--pol ...
Python Grammar
Python
1D = collections.defaultdict(list)
创建一个默认映射到list的字典。(帮助避免了很多意外情况)
12op,l,r,y,z = map(int,input().split())t = ''.join(input().split(" "))
很方便的处理一行的输出,split()默认跳过空白字符。
将输入拼成一个字符串,方便处理。
1a.sort(key=lambda x:x.r)
对a本生进行排序,这里有key函数:按照key=(比较函数),进行比较。比较函数,可以很方便的用lambda来表示。
如果想反过来排序,可以用reverse=True参数。
1print("{0} - > {1}".format(i.l,i.r),end="\n")
格式化输出,这里的0和1是format函数的参数,可以用来指定输出的位置。同时python print自带换行,如果不想换行可以自定义end参数 ...
PPO code experiment
PPO code experiment
detect0530@gmail.com
This is a simple experiment to test the PPO algorithm on the OpenAI gym environment.
All code resource is from the repository: Link1, which is also inspired by a blog paper from 37 PPO Tricks.
Here, I’d like to split the code frame, and note what I have learned from the code.
Code Frame
main
argparse, set the hyperparameter
tensorboard, log the training process
evaluate policy, test the policy
train policy, train the policy
ppo_agent
Actor Mod ...