楼主: aris_zzy
11514 11

[学者专栏] [讨论]关于..从事金融工程,有无必要学一门编程语言,我的看法 [推广有奖]

  • 0关注
  • 19粉丝

http://www.ariszheng.com

副教授

6%

还不是VIP/贵宾

-

威望
0
论坛币
215 个
通用积分
5.2404
学术水平
7 点
热心指数
10 点
信用等级
7 点
经验
16240 点
帖子
352
精华
1
在线时间
830 小时
注册时间
2005-10-21
最后登录
2019-10-3

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
以下是引用irvingy在2007-2-7 1:07:00的发言:

我承认C/C++程序写好的,是一件不容易的事

我也在好几个地方看到你说,只要把模型告诉你,你就能编出好程序来,看来你对自己的编程能力还真有信心

但是实话说,能弄出模型来的,能把模型跟你讲清楚的,都会自己编程

我说编程不容易,因为是个熟练工种,只能靠长年累月积累,只靠在学校学是不够的,跟英文一样

换句话说,搞金融工程的,既不会另外请一个程序员,也不会另外找一个英文翻译

你说的我爱听............. 我就多说点吧

一个模型建立了,.......... 就要求解模型, 当然能求解这个模型的算法有很多...... 你知道哪个算法是最适合你这个模型的吗?

如果你知道了........ 哪个算法最合适你的模型, 你就要算法编程实现...... 当然这就设计到了具体的语言,你让matlab去做计算?

计算量大了, 可能它是算不出来的......我测试过C/C++的速度几乎是matlab的100倍, 再说就算你会用matlab, 我看到过很多人自己的程序,

matlab的基础是矩镇计算, 我看见还有人没有 X=zeors(n,m)就直接用X(i,j)当然这也行..... 可是这里的区别是什么呢?又有多少人知道呢?

不谈matlab了, 再说C/C++....... double a[]; 和 double *a=new doubel[][]....具体我的blog上有...有兴趣的看看吧.

还有  C/C++中的效率问题, 可能有的人编出来的C/C++的程序比matlab还慢... 他就说"....."

有人说SAS处理数据快, 你知道SAS对数据的列是有限制的, 还有,大量数据了 它会抽样..

软件解决问题,....., 这个软件越傻瓜式 操作起来越简单,. 他会为你作些处理.. 但是这些地层处理你可能不关心,那就没问题, 但是你要关心的话,.... 你知道它做的处理是你想要的吗?


我的结论是:你要学编程语言的目的是什么,我上面最要是给大家一个参考,看看你学的什么程度才能达到你的最初的目的..

[此贴子已经被作者于2007-2-10 17:54:11编辑过]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:编程语言 金融工程 Irvingy SAS处理数据 MATLAB 金融 讨论 语言 看法 工程

http://www.ariszheng.com
沙发
aris_zzy 发表于 2007-2-10 17:41:00 |只看作者 |坛友微信交流群

问题---->模型---->模型算法选择----->算法编程实现---->算法测试--->效率分析..... 如果有问题了, 还要改算法or模型,or程序问题 or ...

如果一个金融工程师在这几个方面都很NB,我就没话可说了

以后我也做金融工程的 现在主要还是做 模型算法, 算法实现.....

http://www.ariszheng.com

使用道具

藤椅
aris_zzy 发表于 2007-2-10 17:44:00 |只看作者 |坛友微信交流群

看看下面这个问题, 做投资组合的寸头

就是的随机数生成  不知道你们有更好的算法没有...

我以前搞类似的测试
今天写随机模拟的程序遇到了一个问题;
X1,X2,...,Xn均匀分布的随机数,Xi>=0;
X1+X2+.....Xn=1;
如何生成这样随机数的问题,假设n=5;
而且X1,..,X5 相互之间选取是公平的!!!

一开始,大家都会想到一个方法,
X1 从[0,1] 中随机取;
X2 从[0,1-X1] 中随机取;
......
X5 从[0,1-X1-..-X5].
我试了一下20个
0.3410 0.2842 0.0677 0.1643 0.0444
0.0097 0.3013 0.6653 0.0018 0.0135
0.2369 0.1436 0.3208 0.0177 0.2600
0.9462 0.0409 0.0027 0.0086 0.0012
0.4977 0.2503 0.2106 0.0100 0.0303
0.8153 0.1132 0.0377 0.0184 0.0097
0.8425 0.1087 0.0155 0.0201 0.0047
0.1197 0.2955 0.0655 0.4742 0.0046
0.7358 0.0235 0.0929 0.1437 0.0014
0.8553 0.1155 0.0127 0.0145 0.0016
0.0921 0.2226 0.2571 0.0888 0.2629
0.5569 0.1414 0.0450 0.0263 0.0640
0.3176 0.1832 0.4823 0.0063 0.0002
0.1323 0.7798 0.0608 0.0202 0.0032
0.1931 0.2242 0.1681 0.4143 0.0001
0.2613 0.5561 0.0190 0.1222 0.0039
0.1805 0.2741 0.0925 0.0702 0.0770
0.5199 0.4443 0.0165 0.0056 0.0119
0.6232 0.2762 0.0797 0.0141 0.0062
0.0348 0.8789 0.0478 0.0056 0.0113
和 8.3120 5.6574 2.7602 1.6471 0.8122
平均0.4156 0.2829 0.1380 0.0824 0.0406
这样做是有问题的,对于X5的期望几乎是X1的10倍.
我改用最保守的方法,X1,...X5 都是[0,1]上的随机数,
如果 X1+X2+.....Xn=1;我接受, 不等于就放弃
我编程试了一下 0.995<X1+X2+.....Xn<1.005
0.2172 0.4497 0.1591 0.0043 0.1728
0.1483 0.0999 0.1171 0.0322 0.6034
0.1638 0.2952 0.2006 0.3195 0.0179
0.1100 0.4344 0.1518 0.2466 0.0524
0.2527 0.3003 0.0051 0.3336 0.1055
抽了11176次才找到了5个合适的 0.00044739(概率)
如果变成取六个X1,...X5,X6
0.2980 0.0646 0.0746 0.0876 0.2419 0.2306
0.2805 0.0510 0.0425 0.3594 0.2662 0.0014
0.1765 0.0013 0.1578 0.4213 0.1302 0.1088
0.0405 0.4552 0.1629 0.1624 0.0277 0.1496
0.1266 0.0423 0.2186 0.1275 0.2813 0.1987
抽了 44661 0.00011195
这些只是近似统计...
改进...

针对这个问题,可以这样考虑(不知道能否满足你的要求):生成上面一个矩阵后再随机打乱(x1-x5)的顺序即可。请看下面代码:
a=zeros(100,5);
for k=1:4
a(:,k)=unifrnd(0,1-sum( a(:,1:k),2 ) )';
end
a(:,5)=1-sum(a,2);
%%%以下代码打乱顺序
for k=1:100
a(k,:)=a(k,[randperm(5)]);
end

sum(a)
ans =
18.5247 17.5005 23.6076 20.8922 19.4750
相差不大了吧?
如果不要求xi均大于0请参考一下:

扯远了,不好意思了!

[此贴子已经被作者于2007-2-10 17:55:34编辑过]

http://www.ariszheng.com

使用道具

板凳
玫瑰猴 发表于 2007-2-10 18:04:00 |只看作者 |坛友微信交流群

如果不换个讨论题目的话,实在有点扯远了.

使用道具

报纸
aris_zzy 发表于 2007-2-10 18:08:00 |只看作者 |坛友微信交流群
以下是引用玫瑰猴在2007-2-10 18:04:00的发言:

如果不换个讨论题目的话,实在有点扯远了.


让有兴趣的人看看吧... 

http://www.ariszheng.com

使用道具

地板
ajajaj 发表于 2007-2-11 00:38:00 |只看作者 |坛友微信交流群

国外基本是这样的

quant主要做数学模型这块 这方面数学要求比较高 一般由math/stat PhD完成

quant developer/IT developer主要完成编程这块

不过这两块在国内区别不是很大

会数学的人基本在证券公司里估计也是编程最好的人 所以就差不多了 哈哈

使用道具

7
irvingy 发表于 2007-2-11 04:40:00 |只看作者 |坛友微信交流群
以下是引用aris_zzy在2007-2-10 17:37:00的发言:

你说的我爱听............. 我就多说点吧

一个模型建立了,.......... 就要求解模型, 当然能求解这个模型的算法有很多...... 你知道哪个算法是最适合你这个模型的吗?

如果你知道了........ 哪个算法最合适你的模型, 你就要算法编程实现...... 当然这就设计到了具体的语言,你让matlab去做计算?

计算量大了, 可能它是算不出来的......我测试过C/C++的速度几乎是matlab的100倍, 再说就算你会用matlab, 我看到过很多人自己的程序,

matlab的基础是矩镇计算, 我看见还有人没有 X=zeors(n,m)就直接用X(i,j)当然这也行..... 可是这里的区别是什么呢?又有多少人知道呢?

不谈matlab了, 再说C/C++....... double a[]; 和 double *a=new doubel[][]....具体我的blog上有...有兴趣的看看吧.

还有  C/C++中的效率问题, 可能有的人编出来的C/C++的程序比matlab还慢... 他就说"....."

有人说SAS处理数据快, 你知道SAS对数据的列是有限制的, 还有,大量数据了 它会抽样..

软件解决问题,....., 这个软件越傻瓜式 操作起来越简单,. 他会为你作些处理.. 但是这些地层处理你可能不关心,那就没问题, 但是你要关心的话,.... 你知道它做的处理是你想要的吗?


我的结论是:你要学编程语言的目的是什么,我上面最要是给大家一个参考,看看你学的什么程度才能达到你的最初的目的..

As RoseMonkey has said, that poll is a joke. C/C++, Java, and VB are programming languages. SPSS, SAS, and MATLAB are applications. It's comparing apples with oranges.

I never thought MATLAB is anywhere comparable to C/C++, and it never will. I have said several times that MATLAB is only good for fast prototyping.

I read the comparison of two implementations of matrix on your blog. Nothing new. Many people/books have suggested that the most efficient way to implement a m by n dense matrix in C/C++ is to define a one-dimensional array of size m*n and define another array to store the addresses of each row (if your matrix is row oriented). Your first implementation is slow because 1) memory is not contiguous and 2) new is expensive.

使用道具

8
irvingy 发表于 2007-2-11 04:56:00 |只看作者 |坛友微信交流群
以下是引用aris_zzy在2007-2-10 17:41:00的发言:

问题---->模型---->模型算法选择----->算法编程实现---->算法测试--->效率分析..... 如果有问题了, 还要改算法or模型,or程序问题 or ...

如果一个金融工程师在这几个方面都很NB,我就没话可说了

以后我也做金融工程的 现在主要还是做 模型算法, 算法实现.....

Models and algorithms are integrated. That's why a quant spends 50% of his time programming. It is extremely inefficient for a quant to come up with a model, explain it to programmers, and wait for implementation. If he has time to explain and wait, chances are he could have programmed himself. It saves time, and what is more important, the implementation is less prone to errors, because nobody knows the model better than the originator.

使用道具

9
irvingy 发表于 2007-2-11 05:12:00 |只看作者 |坛友微信交流群
以下是引用aris_zzy在2007-2-10 17:44:00的发言:

看看下面这个问题, 做投资组合的寸头

就是的随机数生成  不知道你们有更好的算法没有...

我以前搞类似的测试
今天写随机模拟的程序遇到了一个问题;
X1,X2,...,Xn均匀分布的随机数,Xi>=0;
X1+X2+.....Xn=1;
如何生成这样随机数的问题,假设n=5;
而且X1,..,X5 相互之间选取是公平的!!!

一开始,大家都会想到一个方法,
X1 从[0,1] 中随机取;
X2 从[0,1-X1] 中随机取;
......
X5 从[0,1-X1-..-X5].
我试了一下20个
0.3410 0.2842 0.0677 0.1643 0.0444
0.0097 0.3013 0.6653 0.0018 0.0135
0.2369 0.1436 0.3208 0.0177 0.2600
0.9462 0.0409 0.0027 0.0086 0.0012
0.4977 0.2503 0.2106 0.0100 0.0303
0.8153 0.1132 0.0377 0.0184 0.0097
0.8425 0.1087 0.0155 0.0201 0.0047
0.1197 0.2955 0.0655 0.4742 0.0046
0.7358 0.0235 0.0929 0.1437 0.0014
0.8553 0.1155 0.0127 0.0145 0.0016
0.0921 0.2226 0.2571 0.0888 0.2629
0.5569 0.1414 0.0450 0.0263 0.0640
0.3176 0.1832 0.4823 0.0063 0.0002
0.1323 0.7798 0.0608 0.0202 0.0032
0.1931 0.2242 0.1681 0.4143 0.0001
0.2613 0.5561 0.0190 0.1222 0.0039
0.1805 0.2741 0.0925 0.0702 0.0770
0.5199 0.4443 0.0165 0.0056 0.0119
0.6232 0.2762 0.0797 0.0141 0.0062
0.0348 0.8789 0.0478 0.0056 0.0113
和 8.3120 5.6574 2.7602 1.6471 0.8122
平均0.4156 0.2829 0.1380 0.0824 0.0406
这样做是有问题的,对于X5的期望几乎是X1的10倍.
我改用最保守的方法,X1,...X5 都是[0,1]上的随机数,
如果 X1+X2+.....Xn=1;我接受, 不等于就放弃
我编程试了一下 0.995<X1+X2+.....Xn<1.005
0.2172 0.4497 0.1591 0.0043 0.1728
0.1483 0.0999 0.1171 0.0322 0.6034
0.1638 0.2952 0.2006 0.3195 0.0179
0.1100 0.4344 0.1518 0.2466 0.0524
0.2527 0.3003 0.0051 0.3336 0.1055
抽了11176次才找到了5个合适的 0.00044739(概率)
如果变成取六个X1,...X5,X6
0.2980 0.0646 0.0746 0.0876 0.2419 0.2306
0.2805 0.0510 0.0425 0.3594 0.2662 0.0014
0.1765 0.0013 0.1578 0.4213 0.1302 0.1088
0.0405 0.4552 0.1629 0.1624 0.0277 0.1496
0.1266 0.0423 0.2186 0.1275 0.2813 0.1987
抽了 44661 0.00011195
这些只是近似统计...
改进...

针对这个问题,可以这样考虑(不知道能否满足你的要求):生成上面一个矩阵后再随机打乱(x1-x5)的顺序即可。请看下面代码:
a=zeros(100,5);
for k=1:4
a(:,k)=unifrnd(0,1-sum( a(:,1:k),2 ) )';
end
a(:,5)=1-sum(a,2);
%%%以下代码打乱顺序
for k=1:100
a(k,:)=a(k,[randperm(5)]);
end

sum(a)
ans =
18.5247 17.5005 23.6076 20.8922 19.4750
相差不大了吧?
如果不要求xi均大于0请参考一下:

扯远了,不好意思了!


I don't know why you need random numbers for portfolio optimization. But let's put it aside.

Re your first example, you said "X5 从[0,1-X1-..-X5]". At first sight, I thought it's a typo, but it turns out it's not. Look at your first row, [0.3410 0.2842 0.0677 0.1643 0.0444], the sum is less than 1. It dosen't satisfy your constraint X1+X2+X3+X4+X5=1. So it looks like you're drawing X5 randomly from U(0, 1-X1-X2-X3-X4). But you can't do this. You have one contraint and you lose one degree of freedom. I don't need to read on.

使用道具

10
lizhe3729 发表于 2007-2-14 06:51:00 |只看作者 |坛友微信交流群

我们学金融,要求必学MATLAB&VBA!

也去比利时的各大银行参观访问过,那里的QUANTS都用MATLAB!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 04:18