写在前面本文假设诸位对于各种专业名词有一定的了解,当然,如果对其中的专业名词还不熟悉,可以看一下这篇文章:[点击下载 Theory For Ready Trader One](/Theory For Ready Trader One.pdf)
对于Fair price,所谓Fair price就是我们通过模型和经验预测的资产在某一时间点的真实价值。所以交易的本质内在逻辑就是当市场价高于Fair price就卖出,否则就买入。
Market maker & Market taker首先要知道交易市场中存在maker与taker两种身份,其中maker是市场流动性的提供者,能够促进整个市场的交易,对整个交易所有利,所以maker在交易过程中的交易费较低,甚至是负的交易费;反之taker则需要像正常金融产品交易一样,缴纳相对较高的交易费。当然,如果maker获得了负交易费,那么该费用的绝对值一定比taker的费用低,否则交易所无法盈利。
从具体的行为上来看,在当前LOB中的一系列价格中,你下在一个位置,等待别人来交易,那你就是maker;反之,你直接选择一个交易对手报出的价 ...
什么是XGBoost首先,要了解GBDT(梯度提升决策树)是一种基于boosting增强策略的加法模型,其核心思想是通过迭代的方式,每次训练一棵CART(分类与回归树)来拟合前t-1棵树预测结果与实际训练样本真实值之间的残差。在训练过程中,GBDT采用前向分布算法进行贪婪学习,旨在逐步优化整体模型的预测能力。
接着,XGBoost(极限梯度提升)在GBDT的基础上进行了多项优化。例如,它对损失函数进行了二阶泰勒展开,使模型能够更准确地逼近最优解;在目标函数中加入了正则项,有助于防止过拟合;同时,XGBoost支持并行处理,大大加快了训练速度;并且默认对缺失值进行了处理,提高了模型的鲁棒性。这些优化使得XGBoost在可扩展性和训练速度上有了显著的提升,但其核心思想——通过迭代训练CART树来拟合残差——与GBDT保持一致。
XGBoost如何实现并行?boosting不是一种串行的结构吗?XGBoost怎么可以实现并行的?
XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。
XGBoos ...
over里面怎么写?先写partition by col1,代表着我们在进行窗口函数计算时,先将数据按照col1列进行分组,与SQL的DQL语言中的group by一样。
其次,order by col2,代表着我们在进行窗口函数计算时,先将数据按照col2列进行排序,这对我们在进行排名类的操作时至关重要,同样的,与SQL的DQL语言中的order by一样。
最后是选取范围,要用到rows between …… and …… 关键字,从其英文含义上就很容易理解他的使用方式。具体的可选参数有以下几个:
unbounded preceding 前面所有行
unbounded following 后面所有行
current row 当前行
n following 后面n行
n preceding 前面n行
这几个参数可以根据你的需要进行组合,应该很容易理解。简单来说,就是将窗口函数的参数范围限制在了有限的行中,实现滚动窗口的左右。
排序类在窗口内进行排序。
row_number() over()
rank() over()
dense_rank() over()
ntile(n) ov ...
首先直接放出最终代码放在replace_url.sh文件中,然后运行bash replace_url.sh 即可,别忘了这个只能在bash中运行,windows的cmd是不行的,可以打开git bash后再运行。
123456789101112131415161718192021222324252627282930313233343536#!/bin/bash# 备份旧的IFS变量OLDIFS="$IFS"IFS=$'\n' # 修改分隔符为换行符before="https:\/\/cdn.jsdelivr.net"after="https:\/\/jsd.onmicrosoft.cn"# 计算当前目录下.md文件的数量file_count=$(find . -type f -name "*.md" | wc -l)count=0# 开始处理文件并显示进度echo "正在进行文件处理..."for md_file in $(find . -type f -name ...
安装1yum -y install screen
常用命令创建会话123screen -S myscreenscreen -U -S myscreen # 解决screen中中文乱码问题
显示已经创建的会话1234screen -lsThere is a screen on: 29085.myscreen (Detached)1 Socket in /run/screen/S-root.
离开会话
保持会话运行
1Ctrl+a
恢复会话1234screen -r 29085.myscreen # 别忘了加入前面的pidscreen -x 29085.myscreen # 也可以进入会话screen -U -r myscreen # 解决screen中中文乱码问题,要求screen是用screen -U -S myscreen方案构建的
关闭会话12exitctrl + d
其他技巧screen的移动由于开启screen后,你无法使用鼠标滚轮进行翻页,此时需要一些技巧开启“复制模式”,然后动用上下左右键移动光标找到你想要查看的内容。
121. Contr ...
事件循环是一种常见的运行机制,尤其在单线程的JavaScript语言中就采用这种机制,来解决单线程运行带来的一些问题。本文尝试用python来实现事件循环的基本逻辑与功能:
基本概念python的协程方案首先要了解Python中的异步编程,主要有以下几种方案:
twisted:使用事件驱动机制来提升python性能
gevent:使用greenlet在用户态完成栈和上下文切换来减少切换带来的性能损耗
tornado:使用生成器来保存协程上下文及状态,使用原生的python语法实现了协程
asyncio:异步编程标准化。
而本次就先介绍asyncio的异步编程标准化方案
协程
协程是一个可以在返回之前“暂停执行”的函数,它可以在一段时间内间接地将控制传递给另一个协程
1234# await将函数控制传递回事件循环(它暂停了周围协程的执行)async def g(): r = await f() return r
asyncio
Async IO是一种语言无关的编程范式,asyncio是与其对应的python包
async/await用于定义协程的py ...
GIL
“CPython解释器”所采用的一种机制,确保同一时刻只有一个线程在执行 Python bytecode
Thread
Thread对象
如何创建线程?创建线程的2种方式:
方式1:传递一个可调用对象给Thread构造函数
方式2:继承Thread,在子类中重载run()方法。要注意的是,子类只能重载构造函数和run()方法,不能重载其它方法
如何启动线程?线程被创建之后,调用start()启动,会在独立的线程中调用run()方法
一旦现成被启动,该线程被认为是“存活”的,当run()方法正常退出或者抛出未被处理的异常,线程就不是“存活”的了,可以用is_alive()方法检测线程是否存活
如何等待一个线程结束?其他线程可以调用一个线程的 join() 方法,这会阻塞调用该方法的线程,直到被调用 join() 方法的线程终结
守护线程
守护线程的含义:当剩下的线程都是守护线程时,整个Python程序将会退出
守护线程在程序退出时会突然关闭,他们的资源(例如已经打开的文档等)可能没有被正确释放
主线程不是一个守护线程
可以通过设置参数daemon来设置一个线程是否是守护线 ...
数据仓库概念模型、逻辑模型、物理模型概念模型是面向业务的,可以用E-R图进行构建,比如我们在一个水果网购的业务中,就需要考虑到需要有一个客户的实体,然后订单实体,商家实体,然后考虑这些实体之间的对应关系。
逻辑模型也是面向业务的,是在概念模型上的进一步丰富,这一步就是给各个实体添加详细的信息,比如联系人需要他的昵称、联系方式,地址等信息。就是把概念模型中的实体抽象为一个个数据表。
最后的物理模型是面向技术实现层面的,我们需要考虑各个字段的变量类型,具体的各个表之间的外键链接以及约束关系等等数据库实现方面的要素。
数据仓库的主要特征数据仓库是面向主题的(Subject-Oriented )、集成的(Integrated)、稳定的(Non-Volatile)和时变的(Time-Variant )数据集合,面向数据分析,用以支持管理决策。
主题性:不同于传统数据库对应于某一个或多个项目,数据仓库根据使用者实际需求,将不同数据源的数据在一个较高的抽象层次上做整合,所有数据都围绕某一主题来组织。
集成性:数据仓库中存储的数据是来源于多个数据源的集成,原始数据来自不同的数据源,存储方式各不相同 ...
取倒数的问题在我们计算因子时,有时可能会用到倒数的操作。可能是为了将其作为一个希望越小越好的权重,又或者是希望反转这个因子的方向,但又不想让因子出现负值。但是操作过程中能随便用倒数吗?
如果此时的因子值都是正数,那当然没有问题。采取倒数操作后,因子值的方向完全反过来,且不会出现负数的情况。具体从函数概念来说,当$x>0$时,$y=\frac 1x$为减函数。
但是因子值有负数时,情况就大不相同了。
考虑一个简单的序列$-3,-2,-1,1,2,3$,将他们分别取倒数,就可以得到:$-\frac13,-\frac12,-1,1,2,3$。问题出现了,负数部分的大小顺序反了,正确的顺序应该是:$-1,-\frac12,-\frac13,1,2,3$。从函数角度说,当$x>0$或$x<0$时,$y=\frac 1x$为减函数,但是整体来看,$y=\frac 1x$却不是一个减函数。
所以,如果随便的取倒数,就会造成因子顺序发生变化。而对一个因子来说,顺序无疑是重要的,不管是计算Rank-IC还是计算分组收益率,乃至最终根据因子进行选股,都需 ...
利率风险利率风险用以描述债券价格在收益率变化时的变化情况,可以通过绘制不同特征的债券价格变化率随利率变化情况的图来进行分析。
具体的,当收益升高时,债券价格下跌;当收益下降时,债券价格上升。
债券的到期收益率升高导致其价格变化的幅度小于等规模的收益率下降导致其价格变化的幅度。
长期债券价格对利率变化的敏感性比短期债券高。
当债券期限增加时,债券价格对收益率变化的敏感性增加,但增速递减。
利率风险和票面利率成反比,低票面利率债券的价格比高票面利率债券的价格对利率更敏感。
债券价格对其收益率变化的敏感性与当期出售债券的到期收益率成反比,也就是当前债券的YTM低,则他的价格对YTM变化更加敏感。
利率风险指标债券定价是通过未来现金流贴现实现的,对债券价格公式进行泰勒展开:$$\begin{align}p(y) &= \sum\limits_{t=1}^TCF_t(1+y)^{-t} \\p(y) &= p(y_0) + \frac{dp}{dy}(y-y_0) + \frac12 \frac{d^2p}{dy^2}(y-y_0)^2 + o ...