python:计算 stock CDP

CDP指标解释:https://baike.baidu.com/item/CDP指标/12789074?fr=aladdin

get_cdp.py

# coding: utf-8
import os, sys
import numpy as np
import pandas as pd
import tushare as ts
import math

if len(sys.argv) ==2:
    code = sys.argv[1]
    i = -1
elif len(sys.argv) ==3:
    code = sys.argv[1]
    i = int(sys.argv[2])
else:
    print('usage: python get_cdp.py stockcode ')
    sys.exit(1)

if len(code) !=6:
    print('stock code length: 6')
    sys.exit(2)

df = ts.get_k_data(code)
if df.empty ==True:
    print(" df is empty ")
    sys.exit(2)

df = df[ df['date'] > '2019-01-01']
if len(df) <15:
    print(" len(df) <15 ")
    sys.exit(2)

# 收盘价
close = np.array(df['close'])
C = close[i]
# 最高价
high = np.array(df['high'])
H = high[i]
# 最低价
low = np.array(df['low'])
L = low[i]
print("H={0:.2f} , L={1:.2f} , C={2:.2f} , H-L={3:.2f}\n".format(H,L,C,H-L))
# 计算 CDP
# 第一种算法: CDP=(H+L+C)/3  早年股民用得比较多,因为用计算器方便计算.
cdp1 = round((H+L+C)/3, 2)
print("cdp1={0:.3f}".format(cdp1))
#此五个数值的排列顺序为(从最高到最低):AH(高价突破点),NH(卖点),CDP,NL(买点),AL(低价突破点)。
AH = cdp1+(H-L)
NH = cdp1*2 -L
AL = cdp1-(H-L)
NL = cdp1*2 -H
print("AH={0:.3f} , NH={1:.3f} , NL={2:.3f} , AL={3:.3f}".format(AH,NH,NL,AL))
print("AH:{0:.2f}% , NH:{1:.2f}% , NL:{2:.2f}%, AL:{3:.2f}%".format((AH/C-1)*100,(NH/C-1)*100,(NL/C-1)*100,(AL/C-1)*100))
print('----------')
# 第二种算法: CDP=(H+L+C*2)/4  现在用得比较多,因为有了电脑.
cdp = (H+L+C*2)/4
print("cdp2={0:.3f}".format(cdp))
#此五个数值的排列顺序为(从最高到最低):AH(高价突破点),NH(卖点),CDP,NL(买点),AL(低价突破点)。
AH = cdp+(H-L)
NH = cdp*2 -L
AL = cdp-(H-L)
NL = cdp*2 -H
print("AH={0:.3f} , NH={1:.3f} , NL={2:.3f} , AL={3:.3f}".format(AH,NH,NL,AL))
print("AH:{0:.2f}% , NH:{1:.2f}% , NL:{2:.2f}%, AL:{3:.2f}%".format((AH/C-1)*100,(NH/C-1)*100,(NL/C-1)*100,(AL/C-1)*100))

运行 python get_cdp.py 600030

画股价走势图 stock_cdp.py

# coding: utf-8
import os, sys
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tushare as ts
import math

if len(sys.argv) ==2:
    code = sys.argv[1]
else:
    print('usage: python stock_cdp.py stockcode ')
    sys.exit(1)

if len(code) !=6:
    print('stock code length: 6')
    sys.exit(2)

df = ts.get_k_data(code)
if df.empty ==True:
    print(" df is empty ")
    sys.exit(2)

if len(df) <15:
    print(" len(df) <15 ")
    sys.exit(2)

# 收盘价
close = np.array(df['close'])
C = close[-1]
# 最高价
high = np.array(df['high'])
H = high.max()
# 最低价
low = np.array(df['low'])
L = low.min()
print("H={0:.2f} , C={1:.2f} , L={2:.2f} , H-L={3:.2f}\n".format(H,C,L,H-L))
# 计算 CDP
# 第一种算法: CDP=(H+L+C)/3  早年股民用得比较多,因为用计算器方便计算.
df['cdp1'] = df[['close']].apply(lambda x:round((H+L+x)/3,2))
# 第二种算法: CDP=(H+L+C*2)/4  现在用得比较多,因为有了电脑.
df['cdp2'] = df[['close']].apply(lambda c:(H+L+c*2)/4)
print(df[['close','cdp1','cdp2']].tail(10))
# 计算 当前 CDP
cdp1 = round((H+L+C)/3, 3)
cdp2 = (H+L+C*2)/4
print("C-cdp1= {0:.3f}".format(C-cdp1))
print("C-cdp2= {0:.3f}".format(C-cdp2))

df = df[ df['date'] > '2018-01-01']
df.index = pd.to_datetime(df.date)
# 画股价走势图
fig,axes = plt.subplots(2,1)
df[['close','cdp1','cdp2']].plot(ax=axes[0], grid=True, title=code)
# 画股票成交量图
df[['volume']].plot(ax=axes[1], grid=True)
plt.show()

运行  python stock_cdp.py 600030 

600030_cdp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值