2022年12月

文章地址:https://caoyongzhuo.cn/archives/902
备用地址:https://cloud.tencent.com/developer/article/2200692
代码如下:

%% 初始操作
cd 'F:\MATLAB\已恢复\本地磁盘(E)\caoyongzhuo\test2022_2\test2022_2' % 切换工作目录
ls % 列出当目录文件以确保工作路径选择正确
clc;
clear;

%% 第一问
clc;
clear;
Price = 3080; % 上证A股综合指数价格
mu = 1.051^(1/250)-1; % 上证A股综合指数平均收益率
sigma = 0.7/sqrt(250); % 上证A股综合指数标准差
N = 250*2; % 依据上课作业文件,我们可知一年的交易日为250天,两年极为250*2
dist = 'norm'; % 确定随机的模式(正态分布)
Price = RandnPrice(dist,Price,mu,sigma,N); % 上证A股综合指数预测价格
plot(Price(:,1)); % 行列转换
xlabel('time');
ylabel('price');

%% 第二问
clear % 清楚workspace中的数据文件
clc % 清楚窗口中的所有代码

% 设置时间序列数据
ftsdatas = ascii2fts('data.txt',2,2) % 设置时间序列数据
save ftsdatas.mat %将时间序列数据的mat文件保存在工作目录下

% MACD指标
% 绘制收盘价
load ftsdatas.mat
macdc = macd(ftsdatas)
plot(macdc)
% 绘制开盘价
macdo = macd(ftsdatas,'open')
plot(macdo)

% 威廉指标
wms = willpctr(ftsdatas)
plot(wms) % 绘制wms图像
hold on % 保持绘图窗口保持不变
plot(wms.dates,-80*ones(1,length(wms)),'color',[0.5 0 0],'linewidth',3) % 绘制的是横轴为时间,纵轴为一列,wms长度行的线条
plot(wms.dates,-20*ones(1,length(wms)),'color',[0 0.5 0],'linewidth',3)
hold off %关闭绘图窗口

% RSI技术指标
load ftsdatas.mat
rsi = rsindex(ftsdatas)
plot(rsi)
hold on
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0.5 0 0],'linewidth',2) % 绘制的是横轴为时间,纵轴为一列,rsi长度行的线条
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0 0.5 0],'linewidth',2)
hold off

% OBV指数
load ftsdatas.mat %% 从本地mat文件中调用数据
obv = onbalvol(ftsdatas) %%% 从workspace中调用数据
plot(obv)

% 绘制candle图
load ftsdatas.mat;
candle(ftsdatas)

% 绘制合并图
load ftsdatas.mat;
subplot(2,2,4)
candle(ftsdatas) %%绘制candle图

subplot(2,2,3)
plot(willpctr(ftsdatas))

subplot(2,2,1)
plot(macd(ftsdatas))

subplot(2,2,2)
rsi = rsindex(ftsdatas)
plot(rsi)
hold on
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0.5 0 0],'linewidth',2) % 绘制的是横轴为时间,纵轴为一列,rsi长度行的线条
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0 0.5 0],'linewidth',2)
hold off

%% 第三问
%存放20股票的100天的收盘价
clc 
clear
load gp20.txt 
gps1=20
%%1﹣计算期望收益
price20 = mean(gp20)
%%2﹣计算收益率矩阵
retu =price2ret(gp20);
%%3﹣计算期望收益
expv = mean(retu);
%%%4﹣计算协方差矩阵% aita( X , Y )= sigama ( Xi - X )( Yi - Y ) Pi
aita = cov ( retu );
eig56= eig ( aita );
%协方差矩阵非半正定,进行修正
aita = aita+eye (gps1,gps1)*0.00001;%若非半正定,加很小的数使其为半正定矩阵

%% 第四问
clc
clear  %三个资产的投资选择问题
returns=[0.1 0.18 0.15] % 期望收益向量
stds=[0.15 0.25 0.2]    %标准差-表示每个资产的波动性
correlations=[1 0.9 0.1;0.9 1 0.4;0.1 0.4 1] %相关系数-对称矩阵
covariances=corr2cov(stds,correlations)  %计算协方差矩阵
portopt(returns,covariances,10) %选择10个点
hold on
rand('state',0)

weights=rand(500,3)
total=sum(weights,2) %weights矩阵的行相加
weights(:,1)=weights(:,1)./total %对权重做标准化处理
weights(:,2)=weights(:,2)./total
weights(:,3)=weights(:,3)./total
[portrisk,portreturn]=portstats(returns,covariances,weights)
plot(portrisk,portreturn,'.r')
title('均值-方差有效前沿以及各个资产组合的风险与收益')
xlabel('风险(标准差)')
ylabel('期望收益率')
hold off

clc
clear
rand('state',0)
figure
% RandSumOneTest
M=500;
N=3;
% method=1;
% X1=RandSumOne(M,N,method);
X1=rand(M,N)   
total1=sum(X1,2)       % 按行求和
for i=1:N             % 比例 标准化,变成了权重矩阵
    X1(:,i)=X1(:,i)./total1;
end
X2=rand(M,N)   
total2=sum(X2,2)       
for j=1:N             
    X2(:,j)=X2(:,j)./total2;
end
% method=2;
% X2=RandSumOne(M,N,method);

%预期收益率向量
ExpReturn = [0.1 0.18 0.15]; 
%协方差矩阵 
ExpCovariance = [0.0225000000000000,0.0337500000000000,0.00300000000000000
                0.0337500000000000,0.0625000000000000,0.0200000000000000
                 0.00300000000000000,0.0200000000000000,0.0400000000000000];
%变量初始化
PortRisk1=zeros(M,1);
PortReturn1=zeros(M,1);
PortRisk2=zeros(M,1);
PortReturn2=zeros(M,1);

for i=1:M
    [PortRisk1(i), PortReturn1(i)] = portstats(ExpReturn, ExpCovariance,X1(i,:));
    [PortRisk2(i), PortReturn2(i)] = portstats(ExpReturn, ExpCovariance,X2(i,:));
end
plot(PortRisk1, PortReturn1,'r.')
hold on
plot(PortRisk2, PortReturn2,'bo')
xlabel('PortRisk')
ylabel('PortReturn')
legend('X1','X2')

Ⅰ、// 电脑端安装(WIN)

一、环境搭建

1. 安装Git命令行工具

详情想看 “杂谈手记” ? ”WIN下安装Git并美化”一文

杂谈手记” ? ”WIN下安装Git并美化

2.安装Node.JS

详情想看 “杂谈手记” ? ”WIN下安装简易Web服务器环境”一文

杂谈手记” ? ”WIN下安装简易Web服务器环境

3.安装pm2管理工具

在Git命令行工具中输入如下指令:

npm i pm2 -g

安装过后记得查看是否成功

node -v
pm2 -v

二、安装Sharelist

1.打开Git命令行工具,进入要安装Sharelist的目录

我这里以D:/Git/download目录为例

2.输入如下命令,下载Sharelist程序安装包

#本地安装
git clone https://github.com/reruin/sharelist.git 
如果速度很慢的话,切换这个镜像地址
git clone --depth=1 https://github.com.cnpmjs.org/reruin/sharelist.git
或者
git clone --depth=1 https://hub.fastgit.org/reruin/sharelist.git

#远程安装(可选)
wget --no-check-certificate -qO-  https://raw.githubusercontent.com/reruin/sharelist/master/netinstall.sh | bash

#更新
bash update.sh

3.进入Sharelist目录

cd sharelist

4.运行安装命令

bash install.sh

5.此时打开 "http://localhost:33001"并显示界面,即为安装成功

6.安装报错,进行排查

当显示npm和pm2命令找不到时,进入sharelist文件夹,打开install.sh文件:

使用VS Code或者别的文本编辑器打开这个文件

注释掉这一行

这是一段PATH路径寻址的代码,因为我在安装Node.js环境时配置了全局环境变量,可能导致了它加载不到正确的路径,所以我们注释掉这段代码,就可以依靠全局环境变量正确寻址。

注释完毕重新安装Sharelist即可

三、启动并配置Sharelist挂载各大网盘

1.首次启动要配置网站管理员密码、名称、虚拟路径等等。随意,后期可改

2.点击页面下方的管理,输入刚刚设置的管理员密码,进入管理后台

3.配置自己所需的网盘,具体可以参考官方文档

大神的官方文档:ShareList Docs

4.逆天功能介绍:虚拟路径

① 首先创建一个文件夹,随便在哪都行,我这里D:\Git\download\虚拟路径

② 然后创建一个.d.ln格式的文件,我这里以ctcc.d.ln为例

③ 文件的内容格式是这样 挂载标识:挂载内容

具体如下:?

Sharelist虚拟路径挂载配置内容

④ 然后在Sharelist的管理后台绑定虚拟路径

⑤ 然后在首页刷新,出现“目录选项”

⑥ 点击进去,这个ctcc其实就是等效于首页的ctcc文件夹了

四、配置Sharelist挂载WebDav

如下配置即可?

WedDav可以把整个虚拟路径的配置转出,方便我们等下搭配RaiDrive映射本地硬盘

五、使用RaiDrive本地挂载硬盘

1.下载、安装RaiDrive

点我下载:RaiDrive, The Best Way to the remote storage

2.配置RaiDrive

3.配置信息如下

4.这样就是挂载成功了

5.成果如下

六、其他的注意事项?

Sharelist的其他注意事项

七、设置pm2自启动sharelist

pm2 start app.js --name sharelist --env prod //开启sharelist进程
pm2 save //保存进程信息
pm2 startup //开机自启动

八、pm2常用命令

pm2 start app.js # 启动app.js应用程序
pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例
# 4个应用程序会自动进行负载均衡
pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
pm2 start app.js --watch # 当文件变化时自动重启应用
pm2 start script.sh # 启动 bash 脚本

pm2 list # 列表 PM2 启动的所有的应用程序
pm2 monit # 显示每个应用程序的CPU和内存占用情况
pm2 show [app-name] # 显示应用程序的所有信息

pm2 logs # 显示所有应用程序的日志
pm2 logs [app-name] # 显示指定应用程序的日志
pm2 flush

pm2 stop all # 停止所有的应用程序
pm2 stop 0 # 停止 id为 0的指定应用程序
pm2 restart all # 重启所有应用
pm2 reload all # 重启 cluster mode下的所有应用
pm2 gracefulReload all # Graceful reload all apps in cluster mode
pm2 delete all # 关闭并删除所有应用
pm2 delete 0 # 删除指定应用 id 0
pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
pm2 reset [app-name] # 重置重启数量

pm2 startup # 创建开机自启动命令
pm2 save # 保存当前应用列表
pm2 resurrect # 重新加载保存的应用列表
pm2 update # Save processes, kill PM2 and restore processes
pm2 generate # Generate a sample json configuration file
pm2 start app.js --node-args="--max-old-space-size=1024"

Ⅱ、// 电脑端安装(Linux)

Linux桌面端

首先很遗憾的是,RaiDrive的客户端只支持WIN系统。如果你电脑的主力系统是Linux,那么搭建完Sharelist以后只能用在网页访问,没法映射磁盘。

1.安装Git

#Debian/Ubuntu 系统及其发行分支
sudo apt-get -y install git

CentOS/RHEL 系统及其发行分支
sudo yum -y install git

2.下载Sharelist

#本地安装
git clone https://github.com/reruin/sharelist.git 
如果速度很慢的话,切换这个镜像地址
git clone --depth=1 https://github.com.cnpmjs.org/reruin/sharelist.git
或者
git clone --depth=1 https://hub.fastgit.org/reruin/sharelist.git

#远程安装(可选)
wget --no-check-certificate -qO-  https://raw.githubusercontent.com/reruin/sharelist/master/netinstall.sh | bash

#更新
bash update.sh

3.安装Sharelist

cd sharelist
bash install.sh

4.启动Sharelist

浏览器输入http://localhost:33001即可

5.设置自启动命令同WIN

Linux服务器端

上述不管是WIN还是Linux桌面端,都无法摆脱的问题是电脑一关机Sharelist也就关闭了,对于搞资源分享的小伙伴来说不是很友好啊,那么如果你有这个需求恰好还有一台Linux服务器的话,不妨试试这样配置,能实现24H不间断的服务。

1.至5.同桌面端

6.安装宝塔,配置好Web环境

我估摸着能看到这里的都是老司机了,我就不赘述这些过程了

7.建立好一个新的站点,绑定、解析好域名

8.域名反代,如图所示

9.启动Sharelist

接下来在任何一台设备输入站点域名即可成果启动Sharelist

10.映射磁盘

虽然Sharelist服务端在Linux服务器上跑着,但只要你工作的电脑不是Linux而是WIN,那么你也可以像文章一开始那样映射磁盘,只需要修改一下RaiDrive的配置:将127.0.0.1改为?宝塔面板绑定的Sharelist域名;33001端口改为?网站域名端口(默认80端口)

Ⅲ、//手机端安装

1.下载Termux

Termux是一个命令行工具,前往官网下载最新版

点我下载:Termux

2.安装git

pkg install git

3.安装Node.js

pkg install nodejs

4.下载Sharelist

#本地安装
git clone https://github.com/reruin/sharelist.git 
如果速度很慢的话,切换这个镜像地址
git clone --depth=1 https://github.com.cnpmjs.org/reruin/sharelist.git
或者
git clone --depth=1 https://hub.fastgit.org/reruin/sharelist.git

#远程安装(可选)
wget --no-check-certificate -qO-  https://raw.githubusercontent.com/reruin/sharelist/master/netinstall.sh | bash

#更新
bash update.sh

5.安装Sharelist

cd sharelist
bash install.sh

6.安装npm

npm install

7.安装pm2

npm i pm2 -g

8.启动Sharelist服务

pm2 start app.js --name sharelist --env prod

9.输入网址"http://127.0.0.1:33001",完成

山东财经大学 2022 -- 2023 学年第 一 学期期末综合实验

说明:

1、 答卷要有分析过程、主要计算结果与图、Matlab程序,注意单倍行距;

2、 答卷的文件以“学号与姓名”组成,提交时不要有座位电脑的编号目录;

3、 电子答卷提交后,再提交书面打印文件,答卷最好不要超过6页,左边二钉装订。

1、上证A股综合指数当前为3080,假如未来1年投资上证指数的年收益率5.1%,上证指数的年波动率标准差为0.7,如果上证指数在未来2年服从正太分布,请画出未来2年内的上证指数模拟走势图。

答:

img

2、对于古井贡的交易数据,分别画出这个股票的九日均线图MACD,相对强弱指数RSI,威廉指数WMS 和 蜡烛图candle,四个子图显示在同一窗口中。交易数据见附件。

答:

img

3、附件中的数据给出了20只股票100个交易日的价格信息,请计算该20只股票的期望价格、预期收益率和20只股票的协方差矩阵。

答:

期望收益:

1

期望收益率:

img

img

协方差:

img

4、ABC三种资产的预期收益、标准差和相关系数如下表,请在一个图中画出由10个有效投资组合构成的有效前沿、由500个可行投资方案构成的可行域。

项目相关系 数矩阵 资产A 资产B 资产C
资产A 1 0.9 0.1
资产B 0.9 1 0.4
资产C 0.1 0.4 1
预期回报 0.10 0.18 0.15
各资产标准差 0.15 0.25 0.2

注:已知资产组合的标准差和相关系数后,求解协方差矩阵的函数COV=corr2cov(标准差,相关系数)

img

img