资产价格可以用以下方程表示:
- dx = adt + bdz
x是资产价格,dx就是资产价格在微小时间变化段dt内的变动,比如股票价格的波动率Stock Price Volatility,z就是所谓维纳过程(Wiener Process),他的物理含义是资产价格x变动的随机项。根据维纳过程的性质,波动率是正比例于时间间隔的,方差为1.0+T,T是时间间隔,在股市上预测股价的跌涨和幅度是一种愚蠢的行为。所以,问题的提法是个关键,说明投资者的思路是否正确
-
在shell上转换到ipython命令行:ipython -p scipy(或者pylab)直接输入scipy模块进入交互的加强的python命令行。在ipython命令行,用?命令可以查看ipython的使用方法;用%magic命令可以查看ipython的magic函数;help(obj)还是python的帮助命令,像obj?一样可以查看obj的帮助信息。
如使用%logstart -fourier.py命令,可以在当前目录里创建一个跟交互命令同步的脚本-fourier.py,以后可以编辑使用。
matplotlib是一个独立的python/scipy的一个扩展包,用了给科学和工程数据作图的。输入pylab模块,能实现全部流行的数学软件matlab的命令。下面是一个傅立叶变换的作图题例,傅立叶变换是把波形分解成若干个简单的正弦或者余弦函数的和,在信号处理上有用。
$ ipython -pylab Python 2.5.1 (r251:54863, May 2 2007, 16:27:44) Type "copyright", "credits" or "license" for more information. IPython 0.7.3 -- An enhanced Interactive Python. ? -> Introduction to IPython's features. %magic -> Information about IPython's 'magic' % functions. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more. Welcome to pylab, a matplotlib-based Python environment. For more information, type 'help(pylab)'. 然后: In [1]: %logstart Activating auto-logging. Current session state plus future input saved. Filename : ipython_log.py Mode : rotate Output logging : False Raw input log : False Timestamping : False State : active 在缺省的情况下,这样将创建一个在当前目录上的文件,名字ipython_log.py,以后可以编辑修改。 In [2]:from scipy import * In [3]:a = zeros(1000) #用zeros?查看:创建一个有1000个元素的数组 In [4]:a[:100] = 1 In [5]:b = fft(a) #fft?查看:快速傅立叶变换函数的定义和用法说明 In [6]:plot(abs(b)) #作图 In [7]:show()![]()
另一个例子:
from scipy import arange, special, optimize
from
x = arange(0,10,0.01)
for k in arange(0.5,5.5):
y = special.jv(k,x)
plot(x,y)
f = lambda x: -special.jv(k,x)
x_max = optimize.fminbound(f,0,6)
plot([x_max], [special.jv(k,x_max)],'ro')
作图:参见这里
-
一般来说,可以根据scipy的文档学习计算,关于numpy的有时候需要参考旧的文档,有的早在2001年,那里的图形库还是用Tkinter,但是现在标准是用wxpython了。从这里可以了解scipy的一个概貌。我由摘要了一个帮助的目录:
- scipy的帮助。可以用help(obj),obj是模块和函数,也可以在ipython命令行上用help(obj)或者obj?都可以得到doctring,如果你想了解有哪些模块、函数和包就用dir(obj)等等。
- 作图和图像(Ploting and Graphic)。作图工具类似于国内流行的matlab(当然大多数是盗版的),如前面我举的一个关于傅立叶变换的作图例子。
- 数学、统计学和科学计算处理能力。使用help(scipy)先了解个大概,包括主要的包组、主要函数;特殊函数如快速傅立叶变换等;其他有数值积分;插值函数(interpolate);数据I/0;线性代数(linalg);优化(optimize);稀疏矩阵(sparse);统计学(statistics),用from scipy import stats输入;单元测试(unit test)等
我们说的资产价格包括有价证券的价格和商品价格,包括期货等衍生产品的价格。
马尔可夫过程(Markov Process)是一种过程,未来的行为只跟当前的状态有关而跟这种状态以前的状态和行为无关。这实际上我们假定,当前的状态包含了从前的所有信息,是从前系统作用交互的结果。资产价格的波动可以用所谓“维纳过程”(Weiner Process)来描述,维纳过程的物理模型是所谓的“布朗运动”(Brownian Motion)。Brownian Motion是爱因斯坦发现的,一个粒子在10-3—10-5cm的范围内运动,它的运动距离用均方距离描述:2> = (6kt/u)*t,这里k是常数,T是温度,u是期望位置。
我们从现在开始准备用scipy/numpy来描述这些过程以及他们的图像。
维纳过程是指一个变量z,z在描述资产价格的一般变动模式时,是作为最后一个随机干扰项或者叫做噪音干扰项的。在一个小时间段Δt变化中,Δz的行为具有两个性质的过程:
我们scipy.stats里的函数获得均值为0,标准差为1.0的正态分布。首先构造一个数据点集,使用r_[]函数或者linspace函数。r_[-1:1:100j]就是把(-1,1)的区间分成100个等分并包含100,或者用arange(-1,1,0.01)就是从-1开始逐个加0.01一直到1并且不包含1;然后使用函数stats.norm.pdf()画出标准正态分布曲线:
一些注释:第2行是引用scipy.norm正态分布模块的随机变量函数rvs,size=100是样本大小,loc=0是均值,scal=1是标准差,在ipython的命令行“help(stats.norm.rvs)“可以查看函数的使用方法,或者用stasts.norm.rvs?,注意查到的信息是不一样的,都有价值;第3行是构造样本空间的数据点,就是从0开始到1选100个数据点,每个间隔0.01就是0,0.01,0.02,0.03......,1总共100个
-
Δz =
√Δt( 为从标准正态分布的随机变量中取的一个值) -
对于任意两个小的时间间隔Δt,对应的两个Δz值互相独立
我们scipy.stats里的函数获得均值为0,标准差为1.0的正态分布。首先构造一个数据点集,使用r_[]函数或者linspace函数。r_[-1:1:100j]就是把(-1,1)的区间分成100个等分并包含100,或者用arange(-1,1,0.01)就是从-1开始逐个加0.01一直到1并且不包含1;然后使用函数stats.norm.pdf()画出标准正态分布曲线:
- $ ipython -pylab, -p scipy #输入pylab和scipy模块; $ plot(t,y);
- $ e = stats.norm.rvs(size=100,loc=0,scal=1) ;
- $ t = arange(0,1,0.01) ;
- $ y = e *
√t ; - $ plot(t,y)
一些注释:第2行是引用scipy.norm正态分布模块的随机变量函数rvs,size=100是样本大小,loc=0是均值,scal=1是标准差,在ipython的命令行“help(stats.norm.rvs)“可以查看函数的使用方法,或者用stasts.norm.rvs?,注意查到的信息是不一样的,都有价值;第3行是构造样本空间的数据点,就是从0开始到1选100个数据点,每个间隔0.01就是0,0.01,0.02,0.03......,1总共100个