编程金融小白学 股票期权 lv.6 希腊字母 Gamma
上一篇 隐含波动率
文章目录
- 编程金融小白学 股票期权
- 希腊字母 II
- 波动率 Sigma (σ)(\sigma)(σ)
- Delta (Δ)(\Delta)(Δ) — 标的资产价格
- 特征 I
- 特征 II
- 特征 III
- 特征 IV
- 证券组合的 Delta 值
- Delta 中性
- Gamma (Γ)(\Gamma)(Γ)
- 特征 I
- 特征 II
- 特征 III
- 特征 IV
- 证券组合的 Gamma 值
- Gamma 中性
- Theta (Θ)(\Theta)(Θ) — 时间
- Vega (ϑ)(\vartheta)(ϑ) — 隐含波动率
- Rho (r)(r)(r) — 利率
- 下一篇 [希腊字母 Theta](https://blog.csdn.net/Varalpha/article/details/105890191)
编程金融小白学 股票期权
希腊字母 II
运用希腊字母 是对期权 比较静态的敏感分析
含义:其他条件不变,(某因素)变化一单位,期权价格大概变化多少?
- 标的资产价格: Delta (Δ)(\Delta)(Δ)
- 时间: Theta (Θ)(\Theta)(Θ)
- 隐含波动率: Vega (ϑ)(\vartheta)(ϑ) T
- 利率: Rho (r)(r)(r)
Gamma (γ)(\gamma)(γ): 标的价格变动1单位时,Delta Δ\DeltaΔ 变多少?
波动率 Sigma (σ)(\sigma)(σ)
- 详情 请看 隐含波动率
Delta (Δ)(\Delta)(Δ) — 标的资产价格
标的资产价格变化一单位,期权价格大概变化多少?
例:
- Delta = 0.3141 意味着
- 如果指数上涨 10 点,期权价格大概上涨 3.141点
Δ=∂c∂S\Delta = \frac{\partial c}{\partial S}Δ=∂S∂c
期权价格曲线切线斜率(动态时变)
(无红利欧式期权) Delta 的4个特征:
特征 I
标的价格 | 看涨多头 | 看涨空头 | 看跌多头 | 看跌空头 |
---|---|---|---|---|
区间 | 0<Δ<10<\Delta<10<Δ<1 | 符号相反 | −1<Δ<0-1<\Delta<0−1<Δ<0 | 符号相反 |
虚值 | Δ→0\Delta\to0Δ→0 | Δ→0\Delta\to0Δ→0 | Δ→0\Delta\to0Δ→0 | Δ→0\Delta\to0Δ→0 |
平价 | Δ≈0.5\Delta\approx0.5Δ≈0.5 | Δ≈−0.5\Delta\approx-0.5Δ≈−0.5 | Δ≈−0.5\Delta\approx-0.5Δ≈−0.5 | Δ≈0.5\Delta\approx0.5Δ≈0.5 |
实值 | Δ→1\Delta\to1Δ→1 | Δ→−1\Delta\to-1Δ→−1 | Δ→−1\Delta\to-1Δ→−1 | Δ→1\Delta\to1Δ→1 |
图像 |
特征 II
- PCP 平价原理
- 看涨期权Delta=看跌期权Delta+1看涨期权 Delta = 看跌期权 Delta + 1看涨期权Delta=看跌期权Delta+1
c+X1+r(T−t)=p+S→∂c∂S=∂p∂S+1c + \frac{X}{1+r(T-t)}=p+S \to \frac{\partial c}{\partial S}= \frac{\partial p}{\partial S}+1c+1+r(T−t)X=p+S→∂S∂c=∂S∂p+1
- 如图,可以看出来 他们的Delta 相差1
特征 III
- 快到期时,实值、虚值、和平值期权的Delta 差异比较大
- 剩余期限比较大的话 时间价值比较大 它的期权价格曲线相对平滑,所以它的切线斜率比较小
看涨 | 看跌 |
---|---|
特征 IV
- 波动率较低时,实值、虚值、和平值期权的Delta 差异比较大
- 原理与特征 III 相同
看涨 | 看跌 |
---|---|
证券组合的 Delta 值
头寸 | Delta | 例子(N为数量) |
---|---|---|
现货多头 | 1 | 4单位: 4×1=44\times 1 =44×1=4 |
现货空头 | -1 | 3单位: 3×−1=−33\times -1 =-33×−1=−3 |
期货多头 | 1 | 2单位: 2×1=22\times 1 =22×1=2 |
现货多头 | -1 | 5单位: 5×−1=−55\times -1 =-55×−1=−5 |
欧式看涨期权多头 (无红利) |
0<Δ<10<\Delta<10<Δ<1 | 5单位多头,每单位Delta为0.5: 5×0.5=2.55\times 0.5 =2.55×0.5=2.5 |
欧式看涨期权空头 (无红利) |
−1<Δ<0-1<\Delta<0−1<Δ<0 | 4单位空头,每单位Delta为-0.4: 4×−0.4=−1.64\times -0.4 =-1.64×−0.4=−1.6 |
欧式看跌期权多头 (无红利) |
−1<Δ<0-1<\Delta<0−1<Δ<0 | 3单位多头,每单位Delta为-0.5: 3×−0.5=−1.53\times -0.5 =-1.53×−0.5=−1.5 |
欧式看跌期权空头 (无红利) |
0<Δ<10<\Delta<10<Δ<1 | 2单位空头,每单位Delta为0.6: 2×0.6=1.22\times 0.6 =1.22×0.6=1.2 |
投资组合 | ∑iNi⋅Δi\sum_i N_i\cdot\Delta_ii∑Ni⋅Δi |
Delta 中性
- 在投资组合中 让Delta 为0 称 Delta 中性
- 意味着 投资组合对现货价格变动的一阶敏感性为 0
- 实现:运用同一标的资产的现货,期货和期权等进行相互套期保值,使证券组合的值等于0
- 特点:有期权的情况下是动态的,需要不懂调整头寸以使组合重新处于Δ\DeltaΔ中性状态,这种调整称为再均衡(Rebalancing)。
Gamma (Γ)(\Gamma)(Γ)
标的价格变动1单位时,Delta Δ\DeltaΔ 变多少?
例:
- Gamma = 0.0056,Delta = 0.3141 意味着
- 如果指数上涨 10 点,Delta大概上升至 0.3141+10∗0.0056=0.37010.3141+10*0.0056 = 0.37010.3141+10∗0.0056=0.3701
- 如果指数下跌 10 点,Delta大概下降至 0.3141−10∗0.0056=0.25810.3141-10*0.0056 = 0.25810.3141−10∗0.0056=0.2581
Γ=∂Δ∂S=∂2c∂S2\Gamma = \frac{\partial \Delta}{\partial S}=\frac{\partial^2 c}{\partial S^2}Γ=∂S∂Δ=∂S2∂2c
期权价格曲线曲度的主要部分 dc≈Δ×dS+12Γ×(dS)2d c \approx \Delta \times d S + \frac{1}{2}\Gamma \times (d S)^2dc≈Δ×dS+21Γ×(dS)2
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt # 画图
plt.rcParams['font.sans-serif'] = ['FangSong'] # 设置中文
plt.rcParams['axes.unicode_minus'] = False # 设置中文负号class BlackScholes:def __init__(self, S0, X, r, T, sigma=0.3,t=0):self.S0 = S0self.X = Xself.r = rself.sigma = sigmaself.dT = T-tdef d1(self):return(np.log(self.S0/self.X)+(self.r+self.sigma**2/2)*(self.dT))/(self.sigma*np.sqrt(self.dT))def d2(self):return self.d1()-self.sigma*np.sqrt(self.dT)def calc(self, call_put):if call_put in {'c','C','call','Call','CALL'}:return self.S0 * norm.cdf(self.d1())- \self.X*np.exp(-self.r*self.dT)*norm.cdf(self.d2())elif call_put in {'p','P','put','Put','PUT'}:return self.X*np.exp(-self.r*self.dT)*norm.cdf(-self.d2())- \self.S0 * norm.cdf(-self.d1())raise NameError('Must be call or Put!',call_put)def imp_vol(self,call_put,mktprice):price = 0sigma = 0.3up, low = 1,0loop = 0while abs(price-mktprice)>1e-6 and loop<50:price = BlackScholes(self.S0,self.X,self.r,self.dT,sigma).calc(call_put)if (price-mktprice)>0:up = sigmasigma = (sigma+low)/2else:low = sigmasigma = (sigma+up)/2loop+=1return sigma
def d1(X,Y):dx = X[2:] - X[:-2]dy = Y[2:] - Y[:-2]return X[1:-1],dy/dxdef d2(X,Y):X, Y = d1(X,Y)return d1(X,Y)def plt_slope(X,Y,x):dx,slopes = d1(X,Y)d2x, gammas = d2(X,Y)slope_x = slopes[abs(dx-x)<1e-6]gamma_x = gammas[abs(d2x-x)<1e-6]y = Y[abs(X-x)<1e-6]plt.plot(X,slope_x*(X-x)+y,'--',c='orange',label='slope')plt.annotate(fr'$\Delta = ${round(slope_x[0],4)}',xy=(x,y-0.08),weight="bold")plt.annotate(fr'$\Gamma = ${round(gamma_x[0],4)}',xy=(x,y-0.12),weight="bold")
# 标的价格S做自变量 求因变量c
S = np.arange(2.5,3.5,0.001)
BS = [BlackScholes(s,3., 0.05, 0.16)for s in S]
bc = np.array([bs.calc('c') for bs in BS]) # Buy Call
bp = np.array([bs.calc('p') for bs in BS]) # Buy Put
bc_dx,bc_dy = d1(S,bc) # Buy Call Delta
bp_dx,bp_dy = d1(S,bp) # Buy Put Delta
bc_d2x,bc_d2y = d2(S,bc) # Buy Call Delta
bp_d2x,bp_d2y = d2(S,bp) # Buy Put Delta
x_samples = [2.6,3,3.4]
y_samples = [bc[abs(S-x)<1e-6]for x in x_samples] # 计算得出y坐标
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,bc)
plt_slope(S,bc,3.)
plt.grid(True)
plt.xlabel('标的价格')
plt.ylabel('看涨期权价格')
plt.yticks(y_samples,[r'$C_2$',r'$C_0$',r'$C_1$'])
plt.xticks(x_samples,[r'$S_2$',r'$S_0$',r'$S_1$'])
plt.show()
- (无红利欧式期权)Gamma的4个特征
特征 I
- 期权多头 Γ>0\Gamma>0Γ>0 凹曲面 Convex
- 看涨 Convex up 上凹
- 看跌 Convex down 下凹
- 期权空头 Γ<0\Gamma<0Γ<0 凸曲面 Concave
- 看涨 Concave down 下凸
- 看跌 Concave up 上凸
# 看涨多头
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,bc,'r',lw=2)
plt_slope(S,bc,3.)
plt.xlabel('标的价格')
plt.ylabel('看涨期权价格')
plt.title('看涨期权多头 Gamma 特征')
plt.show()
# 看跌多头
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,bp,'r',lw=2)
plt_slope(S,bp,3.)
plt.xlabel('标的价格')
plt.ylabel('看跌期权价格')
plt.title('看跌期权多头 Gamma 特征')
plt.show()
# 看涨空头
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,-1*bc,'r',lw=2)
plt_slope(S,-1*bc,3.)
plt.xlabel('标的价格')
plt.ylabel('看涨期权价格')
plt.title('看涨期权空头 Gamma 特征')
plt.show()
# 看跌空头
plt.figure(figsize=(8,5), dpi=200)
plt.plot(S,-1*bp,'r',lw=2)
plt_slope(S,-1*bp,3.)
plt.xlabel('标的价格')
plt.ylabel('看跌期权价格')
plt.title('看跌期权空头 Gamma 特征')
plt.show()
特征 II
- 其他条件相同的欧式期权:看涨Gamma=看跌Gamma
c+X1+r(T−t)=p+S→∂2c∂S2=∂2p∂S2c + \frac{X}{1+r(T-t)}=p+S \to \frac{\partial^2 c}{\partial S^2}= \frac{\partial^2 p}{\partial S^2}c+1+r(T−t)X=p+S→∂S2∂2c=∂S2∂2p
# 对比多头 Gammaplt.figure(figsize=(8,5), dpi=200)
plt.plot(bc_d2x,bc_d2y,'r',lw=4,label='Call') # 因为相等 加粗
plt.plot(bp_d2x,bp_d2y,'green',label='Put')
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.xlabel('标的价格')
plt.grid(True)
plt.show()
特征 III
- 平价附近期权的Gamma值最大
特征 IV
- 快到期时,实值、虚值、和平值期权的Delta 差异比较大
- 波动率较低时,实值、虚值、和平值期权的Delta 差异比较大
# 看涨期权的Gamma 与期限的关系
T = np.arange(0.01,2,0.001)
BS_T_r = [[BlackScholes(3.48+i*0.01,3., 0.05, t).calc('c') for i in range(5)] for t in T] # 实值
BS_T_e = [[BlackScholes(2.98+i*0.01,3., 0.05, t).calc('c') for i in range(5)] for t in T] # 平价
BS_T_i = [[BlackScholes(2.48+i*0.01,3., 0.05, t).calc('c') for i in range(5)] for t in T] # 虚值
interval_x = np.array([i*0.01 for i in range(5)])plt.figure(figsize=(8,5), dpi=200)
for BS_T,labels,color in zip([BS_T_r,BS_T_e,BS_T_i],['实值','平价','虚值'],['r','orange','g']):bc = [d2(interval_x, np.array(bs))[1][0] for bs in BS_T] # Buy Call Gammaplt.plot(T,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看涨期权的Gamma 与期限的关系')
plt.xlabel('期权期限(年)')
plt.xticks([0,1,2])
plt.grid(True)
plt.show()
# 看跌期权的Gamma 与期限的关系
T = np.arange(0.01,2,0.001)
BS_T_r = [[BlackScholes(3.48+i*0.01,3., 0.05, t).calc('p') for i in range(5)] for t in T] # 实值
BS_T_e = [[BlackScholes(2.98+i*0.01,3., 0.05, t).calc('p') for i in range(5)] for t in T] # 平价
BS_T_i = [[BlackScholes(2.48+i*0.01,3., 0.05, t).calc('p') for i in range(5)] for t in T] # 虚值
interval_x = np.array([i*0.01 for i in range(5)])plt.figure(figsize=(8,5), dpi=200)
for BS_T,labels,color in zip([BS_T_i,BS_T_e,BS_T_r],['实值','平价','虚值'],['r','orange','g']):bc = [d2(interval_x, np.array(bs))[1][0] for bs in BS_T] # Buy Put Gammaplt.plot(T,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看跌期权的Gamma 与期限的关系')
plt.xlabel('期权期限(年)')
plt.xticks([0,1,2])
plt.grid(True)
plt.show()
# 看涨期权的Gamma 与波动率的关系
Sigma = np.arange(0.01,1,0.001)
t = 0.5
BS_S_r = [[BlackScholes(3.48+i*0.01,3., sigma, t).calc('c') for i in range(5)] for sigma in Sigma] # 实值
BS_S_e = [[BlackScholes(2.98+i*0.01,3., sigma, t).calc('c') for i in range(5)] for sigma in Sigma] # 平价
BS_S_i = [[BlackScholes(2.48+i*0.01,3., sigma, t).calc('c') for i in range(5)] for sigma in Sigma] # 虚值
interval_x = np.array([i*0.01 for i in range(5)])plt.figure(figsize=(8,5), dpi=200)
for BS_S,labels,color in zip([BS_S_r,BS_S_e,BS_S_i],['实值','平价','虚值'],['r','orange','g']):bc = [d2(interval_x, np.array(bs))[1][0] for bs in BS_S] # Buy Call Gammaplt.plot(Sigma,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看涨期权的Gamma 与波动率的关系')
plt.xlabel('波动率')
plt.xticks([0,0.5,1],['0%','50%','100%'])
plt.grid(True)
plt.show()
# 看跌期权的Gamma 与波动率的关系
Sigma = np.arange(0.01,1,0.001)
t = 0.5
BS_S_r = [[BlackScholes(3.48+i*0.01,3., sigma, t).calc('p') for i in range(5)] for sigma in Sigma] # 实值
BS_S_e = [[BlackScholes(2.98+i*0.01,3., sigma, t).calc('p') for i in range(5)] for sigma in Sigma] # 平价
BS_S_i = [[BlackScholes(2.48+i*0.01,3., sigma, t).calc('p') for i in range(5)] for sigma in Sigma] # 虚值
interval_x = np.array([i*0.01 for i in range(5)])plt.figure(figsize=(8,5), dpi=200)
for BS_S,labels,color in zip([BS_S_i,BS_S_e,BS_S_r],['实值','平价','虚值'],['r','orange','g']):bc = [d2(interval_x, np.array(bs))[1][0] for bs in BS_S] # Buy Put Gammaplt.plot(Sigma,bc,color,label=labels)
plt.legend(loc='best')
plt.ylabel('Gamma 值')
plt.title('看跌期权的Gamma 与波动率的关系')
plt.xlabel('波动率')
plt.xticks([0,0.5,1],['0%','50%','100%'])
plt.grid(True)
plt.show()
证券组合的 Gamma 值
头寸 | Gamma | 例子(N为数量) |
---|---|---|
现货多头 | 0 | 4单位: 4×0=04\times 0 =04×0=0 |
现货空头 | 0 | 3单位: 3×0=03\times 0 =03×0=0 |
期货多头 | 0 | 2单位: 2×0=02\times 0 =02×0=0 |
现货多头 | 0 | 5单位: 5×0=05\times 0 =05×0=0 |
欧式看涨期权多头 (无红利) |
Γ>0\Gamma>0Γ>0 | 5单位多头,每单位 Gamma 为0.005: 5×0.005=0.0255\times 0.005 =0.0255×0.005=0.025 |
欧式看涨期权空头 (无红利) |
Γ<0\Gamma<0Γ<0 | 4单位空头,每单位 Gamma 为-0.004: 4×−0.004=−0.0164\times -0.004 =-0.0164×−0.004=−0.016 |
欧式看跌期权多头 (无红利) |
Γ>0\Gamma>0Γ>0 | 3单位多头,每单位 Gamma 为0.005: 3×0.005=0.0153\times 0.005 =0.0153×0.005=0.015 |
欧式看跌期权空头 (无红利) |
Γ<0\Gamma<0Γ<0 | 2单位空头,每单位 Gamma 为-0.006: 2×−0.006=0.0122\times -0.006 =0.0122×−0.006=0.012 |
投资组合 | ∑iNi⋅Γi\sum_i N_i\cdot\Gamma_ii∑Ni⋅Γi |
Gamma 中性
- 只有期权有 Gamma 值
- 在投资组合中 让 Γ\GammaΓ 为0 称 Γ\GammaΓ 中性
- Γ\GammaΓ 中性 时为了消除 Δ\DeltaΔ 中性的误差,同样也是动态的概念
- 实现:由于保持 Γ\GammaΓ 中性只能通过期权头寸调整获得,实现中性的结果往往时非中性,因而常常还需要运用标的资产或期货头寸进行调整,才能使得证券组合同时实现 Δ,Γ\Delta ,\ \GammaΔ, Γ 中性
Theta (Θ)(\Theta)(Θ) — 时间
时间变化一天,期权价格大概变化多少?
Time 时间
例:
- Theta = 1.234 意味着
- 时间每过一天,期权价格大概上涨 1.234点
Vega (ϑ)(\vartheta)(ϑ) — 隐含波动率
隐含波动率变化一百分点,期权价格大概变化多少?
Volatility 隐含波动率
例:
- Vega = 1.878 意味着
- 每隐含波动率上升1%,期权价格大概上涨 1.878点
Rho (r)(r)(r) — 利率
- Rate 利率
下一篇 希腊字母 Theta
编程金融小白学 股票期权 lv.6 希腊字母 Gamma相关推荐
- 编程金融小白学 股票期权 lv.5 希腊字母 Delta
上一篇 隐含波动率 文章目录 编程金融小白学 股票期权 希腊字母 I 波动率 Sigma (σ)(\sigma)(σ) Delta (Δ)(\Delta)(Δ) - 标的资产价格 特征 I 特征 II ...
- 编程金融小白学 股票期权 lv.7 希腊字母 Theta
上一篇 希腊字母 Gamma 文章目录 编程金融小白学 股票期权 希腊字母 IV 波动率 Sigma (σ)(\sigma)(σ) Delta (Δ)(\Delta)(Δ) - 标的资产价格 特征 I ...
- 编程金融小白学 股票期权 lv.0 基本概念
文章目录 编程金融小白学 股票期权 基本概念 什么是期权? 认购期权 认沽期权 Python 期权类 买入认购线性图 买入认沽线性图 卖出认购线性图 卖出认沽线性图 期权线性图 合约要素 实值,虚值与 ...
- 编程金融小白学 股票期权 lv.3 PCP 平价
上一篇 期权策略 文章目录 编程金融小白学 股票期权 PCP PCP 平价原理 PCP 现货 正向套利操作 (Forward) 反向套利操作 (Reversal) PCP 期货套利 策略构造 保护性看 ...
- 小白学编程“Java小白”入门解疑大全
成功的人分几种,有一种人叫做关系户,他们渠道多,广织关系网,有一种叫做平台户,他们平台有多硬,他们就有多硬,但无论是关系户还是平台户,依靠的总是别人的手.别人的嘴巴.别人辛苦创立下来的资源,归根到底, ...
- 学金融会python_大学生金融小白自学Python做量化投资需要注意哪些?
大学生金融小白自学python做量化投资需要注意些什么?量化金融其实是一个交叉复合学科,需要掌握数学.计算机.金融等方面的知识.显而易见,对于金融学背景的同学来说,就需要另外学习计算机编程的知识,而计 ...
- 编程小白学python知乎周刊_在知乎上学 Python - 入门篇
写在前面 本文对知乎上关于Python入门方面的问答.文章.专栏做了一定的收集和整理,希望对各位Python学习者能有帮助,至少可以节省大家一点时间. 这一篇主要针对的是零基础或初学Python,包括 ...
- java编程好学么_零基础小白学Java编程好学吗
Java是一门不会衰落的开发语言,伴随着IT行业的兴起,目前学习java培训的人员也是变得更多了,但要想学好java的话通过自学是没有那样非常容易的事情.尤其是对于初学者的学生而言,那么零基础小白学J ...
- 吐血整理:小白学python编程基础(1)
小白学Python编程基础 华丽蜕变 TIOBE开发语言排行榜 中国教育界重大变革 教育界重大变革缘由 前世今生 程序设计语言 编程语言的使命 Python的诞生 Python的发展 Python的语 ...
最新文章
- 如何为项目配置网关并且测试、实战
- 基数估算HyperLogLog
- @EnableAutoConfiguration原理简单分析
- 发布一个原创的基于Ajax的通用(组合)查询
- 计算机二级vb考试查分,全国计算机二级考试VB程序设计复习试题
- python空气质量分析报告_Python数据可视化:2018年北上广深空气质量分析
- 8.36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块,要一次搬完。问:男、女、小孩各多少?
- 【设计模式之美】<Reading Notes>抽象类与接口
- hdu5424 Rikka with Graph II
- linux系统下升级node,linux下安装指定版本的nodejs(升级到指定版本)
- 利用scrapy爬取文件后并基于管道化的持久化存储
- 人脸检测-Haar分类器方法
- gnome-shell 扩展
- 第二季-专题12-通过按键玩中断
- RedHat 安装 CentOS yum
- 2022年深圳有哪些好玩的小镇古城推荐
- 频谱泄露、栅栏效应、补零实验
- 使用组策略批量禁用u盘
- HTML5常用的文本标签及css字体样式属性
- 记第一次使用CDSN进行学习记录
热门文章
- 版本迭代和测试周期的意思
- Spring知识点讲解 【笔记】
- 以太坊:在合约里调用指定地址的另一已部署合约
- [贪心]leetcode55:跳跃游戏(medium)
- jsp text边框_CSS设置DIV边框实例
- mui框架scroll,鼠标滑轮可以滚动,移动端触摸无法滚动
- linux运行ping,linux ping命令的几个简单使用方法
- Linux中FTP设置登录欢迎词,怎么为FTP登陆用户设置欢迎语(servu)
- 吴恩达创办Coursera是受他启发!74岁老父亲自述终身学习路,8年学完146门课程
- Envoy代理GRPC服务支持通过restful进行访问