stock的一些基础处理

首先先导入apple的股票,这里已经把股票下载为csv文件了,直接用panda来加载

import pandas as pd
stocks=pd.read_csv("1Appl2010-2021.csv",header=[0,1])
stocks

接着我们可以查看股票的列名

也可以用to_flat_index()方法将其扁平化,方便查看

#convert multi index to one tuple
stocks.columns=stocks.columns.to_flat_index()
stocks.columns

这里用loc方法截取Close这一列的所有数据

import pandas as pd
stocks=pd.read_csv("1Appl2010-2021.csv",header=[0,1])
stocks.loc[:,'Close'] 

这里用copy方法先把Close这列信息传给close

import pandas as pd
stocks=pd.read_csv("2spy_aapl_ko_2010-2021.csv",header=[0,1])
close=stocks.loc[:,'Close'].copy()
close

然后我们可以用seaborn样式画个图,清晰得知这三个股票的走势差距

close.AAPL.div(close.iloc[0,0])#与第一位的值进行比较

差距除了图像上也可以从树枝上体现,这里用的div方法,将这列数值与第一个值进行一个除法得出比值

normclose=close.div(close.iloc[0]).mul(100)
plt.style.use("seaborn")

normclose.plot(figsize=(15,8),fontsize=12)

这里的normclose表示了之后的值的相对于第一排的变化率,mul(100)相当于乘以100,所以这里其实是一个百分比

aapl['lag1']=aapl.shift(periods=1)

shift方法就是将数值往下拉一格,移动多少取决于period

这里用sub方法,将原数组减去移动后数组,得出difference记作diff

aapl['Diff']=aapl.AAPL.sub(aapl.lag1)
aapl

aapl['% Change']=aapl.AAPL.div((aapl.lag1)).sub(1).mul(100)
aapl

这里用原数组除以移动后数组后减去1然后乘以100,就是为了得到变化的百分比形式

这里用了pct_change方法,直接得到aapl除以移动后的aapl数据的百分比

del aapl['Diff2']

如果要删除数据的话直接用del

aapl.rename(columns={'% Change':'Change'},inplace=True)
aapl

 rename方法可用来改变列名和行名

若是要将数据按照时间分段列出来可以用

 

我们可以根据日期来分割信息

ret=aapl.pct_change().dropna()
ret

dropna方法可以去除掉那些为空值的

info方法可以得知表格的各个属性

通过hist方法可以看出aapl大致区间在于0左右

 

 var_daily_ret=ret.var()
var_daily_ret

得到方差

import numpy as np
std_daily_ret=np.sqrt(var_daily_ret)
std_daily_ret

得到每天的标准差

ret.std()

annual_mean_ret=daily_mean_ret*252
annual_mean_ret

得到每年的平均值

annual_var_ret=var_daily_ret*252
annual_var_ret

得到每年的方差

annual_std_ret=np.sqrt(var_daily_ret)
annual_std_ret

得到每年的标准差

 import pandas as pd
stocks=pd.read_csv("3spy_aapl_ko_ibm_dis_msft_2010-2021.csv",header=[0,1])
close=stocks.loc[:,'Close'].copy()
close

normclose=close.div(close.iloc[0]).mul(100)
plt.style.use("seaborn")

normclose.plot(figsize=(15,8),fontsize=12)

这与之前的相似,但是多了许多股票

用T方法可以让列和行反过来

summary.plot.scatter(x='std',y='mean',figsize=(12,8),s=50,fontsize=15)
for i in summary.index:
    plt.annotate(i,xy=(summary.loc[i,'std']+0.002,summary.loc[i,'mean']+0.002),size=15)

由图中我们可以看到这些股票的标准差和平均值的方位,标准差越小说明越稳定,因此我们最好选用SPY

cov和corr方法分别是协方差

import seaborn as sns
plt.figure(figsize=(12,8))
sns.set(font_scale=1.4)
sns.heatmap(ret.corr(),cmap='Reds',annot=True,annot_kws={'size':15},vmax=0.6)
plt.show()

通过热图我们可以看出这些股票的协方差的值的变化,

simplereturns=df.pct_change().dropna()
simplereturns

simplereturns.mean()

simplereturns就是简单的将每年的数值与前一年进行一个比值,得出变化

logreturns更加准确,用原数组除以移动后数组后再取平均值

spy.rolling(window=10,min_periods=5).max().head(15)

这里用了rolling方法,window相当于确定一个大范围,min_periods就是运行的最小区间

spy["SMA50"]=spy.Close.rolling(window=50,min_periods=50).mean()

 

 spy.plot(figsize=(12,8),fontsize=15)
plt.legend(loc='upper left',fontsize=15)

这里可以得知以50个数据得平均值的曲线

 

可以看出数量越大,取得得曲线就越平滑

index.day_name和index.quarter分别表示为星期几和月季度来表示

这里可以通过set_index改变序号

 也可以通过fillna方法中ffill和bfill分别向前向后调整数据

这里d_returns跟之前一样处理得到比值

然后我们运用consum累加函数得到比值的和

通过累加的比值和我们画出的曲线可以表达出来股票的上升走势

通过cummax方法我们可以得到累加和的最大值

由此我们可以得到提款drawdown

 对此我们可以进行索引得到精准的时间序号

apple.drawdowns.max()apple.drawdowns.idxmax()apple.loc[(apple.index==2696)]

apple['drawdowns%']=(apple['drawdowns']/apple['cummax'])
apple

也可以通过百分比来精确得知其变化率

最后我们可以得到变化率最大值的索引,之后就可以看看当天的具体变化

apple['drawdowns%'].max()

apple['drawdowns%'].idxmax()

apple.loc[(apple.index==828)]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用 Stock 创建服务器端和客户端程序的基本代码,供参考: 服务器端: ```cpp #include <stdio.h> #include <stdlib.h> #include "Stock/Core.h" using namespace stock; int main() { // 创建一个 TCP 监听套接字 TcpListener listener; listener.Listen("0.0.0.0", 12345); printf("Server started.\n"); // 循环等待客户端连接 while (true) { TcpSocket client = listener.Accept(); printf("Client connected.\n"); // 在新线程中为每个客户端处理数据 std::thread t([&client]() { while (true) { // 处理客户端发送的数据 std::string data = client.Receive(); if (data.empty()) { printf("Client disconnected.\n"); break; } printf("Received data: %s\n", data.c_str()); // 处理游戏逻辑并同步状态到客户端 // ... // 发送数据给客户端 std::string response = "Hello, client!"; client.Send(response); } }); t.detach(); } return 0; } ``` 客户端: ```cpp #include <stdio.h> #include <stdlib.h> #include "Stock/Core.h" using namespace stock; int main() { // 创建一个 TCP 套接字并连接到服务器端 TcpSocket socket; socket.Connect("127.0.0.1", 12345); printf("Connected to server.\n"); // 循环发送和接收数据 while (true) { // 处理用户输入并发送数据给服务器端 std::string request = "Hello, server!"; socket.Send(request); // 接收服务器端发送的数据并处理游戏逻辑 std::string response = socket.Receive(); printf("Received data: %s\n", response.c_str()); // 处理游戏逻辑并更新界面 // ... } return 0; } ``` 以上代码仅为示例,实际应用中需要根据需要进行调整和优化。在使用 Stock 开发网络应用程序时,需要了解 Stock 库的基本使用方法和相关概念,例如 Socket、I/O 线程、事件循环等。同时,还需要掌握 C++ 和网络编程的基础知识,例如套接字、TCP/IP 协议、多线程编程等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值