其他
软件应用丨Python量化投资学习报告之二:热点获取及数据分析
昨天我们介绍了如何使用Python进行量化投资的学习报告之数据抓取,点击查看
热点获取
这里我抓取的是东方财富的国内经济要闻,页面地址位于:
这一页面的新闻列表不是通过Ajax异步加载的,可以直接抓取,而页码由url中cgnjj_x(x为页码)决定,抓取过程较为简单;这里统计的思路是,将所有的要闻简述拼接成字符串(以;分隔并写入txt作备份),然后利用jieba库分词并统计词频,项目地址:
也可以直接clone至本地:
git clone https://github.com/CatsJuice/eastmoney-yaowen-keyword.git
左右滑动查看更多
数据分析
迭代日线数据文件 判断是否是连续高换手率 判断是否在连续高换手率后出现连续低换手率 结果展示
high = []
low = []
for row in arr:
rate = row[10]
if rate == "None":
high = []
low = []
continue
if rate == 0:
if len(high) >= self.min_days and len(low) >= self.min_days:
dic = {'high': high, 'low': low}
self.res.append(dic)
high = []
low = []
continue
rate = float(rate)
# 4. 判断是否是 高 换手率
if rate >= self.border_rate:
# 4.3 判断是否是: 连续高 ->连续低 -> 结束连续低
if len(low) >= self.min_days:
# 符合条件, 写入
dic = {'high': high, 'low': low}
self.res.append(dic)
high = []
low = []
elif len(low) > 0: # 连续低中有值
# 不满足连续 低, 重置
high = []
low = []
high.append(row)
elif len(high) < self.min_days: # 是低换手率, 判断是否前面是连续高换手率
# 4.1 前面不是连续的高换手率, 重置高换手率数组
high = []
else:
# 4.2 前面是连续高换手率, 地换手率写入
low.append(row)
# 判断日期是否已达到最后
if row[0] <= self.end_date:
# 判断是否满足条件
if len(high) >= self.min_days and len(low) >= self.min_days:
dic = {'high': high, 'low': low}
self.res.append(dic)
high = []
low = []
break
左右滑动查看更多
git clone https://github.com/CatsJuice/low-switch-hand-rate.git
左右滑动查看更多
1. 概念
2. 指标用法
3. 公式
公式一:
TYP:=(HIGH+LOW+CLOSE)/3;
CCI:(TYP-MA(TYP,N))/(0.015*AVEDEV(TYP,N));
左右滑动查看更多
TYP赋值:(最高价+最低价+收盘价)/3
输出CCI:(TYP-TYP的N日简单移动平均)/(0.015*TYP的N日平均绝对偏差)
左右滑动查看更多
公式二:
我使用的是 pandas 库,关键代码如下:
df = pd.read_csv(filename, encoding='gbk')
df['cci'] = ''
for index, row in pd.iterrows():
df.loc[index, 'cci'] = cci
左右滑动查看更多
4. 程序设计
5. 参数说明
git clone https://github.com/CatsJuice/stock-cci
左右滑动查看更多
6. 测试结果
1. 概念
2. 程序设计
3. 结果
键值说明:date: 统计的日期rate_low: 打分最低的盈利几率rate_high: 打分最高的盈利几率
4. Source Code
项目地址:
git clone https://github.com/CatsJuice/stock-price-num-score.git
左右滑动查看更多
1. 概念
2. 计算
3. 程序设计
定义要计算的几日(假设为n)均线数组,进行遍历计算 迭代文件列表 打开某个文件,选取 n 行,计算这n行的 收盘价 总和 迭代 csv 文件的每一行,每次迭代,将上述收盘价的总和减去首行,追加新的一行 计算 ma 并写入原文件
4. 参数说明
5. 购买策略分析
策略一:'老太太选股法' 一根均线打天下
策略二:'黄金交叉'和'死亡交叉'
1、”黄金交叉”当10日均线由下往上穿越30日均线,形成10日均线在上,30日均线在下时,其交叉点就是黄金交叉,黄金交叉是多头的表现,出现黄金交叉后,后市会有一定的涨幅空间,这是进场的最佳时机。 2、”死亡交叉”当10日均线由上往下穿越30日均线,形成30日均线在上,10日均线在下时,其交点称之为”死亡交叉”,”死亡交叉”预示空头市场来临,股市将下跌此时是出场的最佳时机。
6. 分析结果
老太太选股法:
'黄金交叉'和'死亡交叉':
# 前一天 ma30 > ma10 , 今天ma10 >= ma30
if prev_row is not None and prev_row['ma30'] > prev_row['ma10'] and row['ma10'] >= row['ma30']:
# 买入
...
...
# 前一天 ma30 < ma10 , 今天ma10 <= ma30
if prev_row['ma30'] < prev_row['ma10'] and row['ma10'] <= row['ma30']:
# 卖出
左右滑动查看更多
# 前一天 ma30 < ma10 , 今天ma10 <= ma30
if prev_row is not None and prev_row['ma30'] < prev_row['ma10'] and row['ma10'] <= row['ma30']:
# 买入
...
...
# 前一天 ma30 > ma10 , 今天ma10 >= ma30
if prev_row['ma30'] > prev_row['ma10'] and row['ma10'] >= row['ma30']:
# 卖出
左右滑动查看更多
7. Source Code
项目地址:
git clone https://github.com/CatsJuice/line-of-ma.git
左右滑动查看更多
1. 基本概念
2. 分析的形态
3. 程序设计
4. 参数说明
5. 结果及分析
6. Source Code
项目地址为:
git clone https://github.com/CatsJuice/stock-volume-analyze.git
左右滑动查看更多
1. 基本概念
MACD的百度百科的解释:MACD 称为异同移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线( EMA12 )减去慢的指数移动平均线( EMA26 )得到快线 DIF ,再用 2 ×(快线DIF-DIF的9日加权移动均线DEA) 得到 MACD柱。
MACD 金叉:MACD 指标是股票技术分析中一个重要的技术指标,由两条曲线和一组红绿柱线组成。两条曲线中波动变化大的是 DIF 线,通常为白线或红线,相对平稳的是 DEA 线(MACD线),通常为黄线。当 DIF 线上穿 DEA 线时,这种技术形态叫做金叉,通常为买入信号。
MACD 死叉:DIF 由上向下突破 DEA,为卖出信号
2. 程序设计
数据计算:
【MACD公式】
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,MID);
MACD:(DIF-DEA)*2,COLORSTICK;
左右滑动查看更多
def calculate_all_by_thread(self, thread_num):
file_list = os.listdir(self.file_prefix)
file_count = len(file_list)
offset = file_count / thread_num
offset = math.ceil(offset)
threads = []
for i in range(thread_num):
start = i * offset
end = (i+1) * offset if (i+1) * offset < file_count else -1
thread = threading.Thread(target=self.calculate_block, args=(start, end))
threads.append(thread)
for t in threads:
t.setDaemon(True)
t.start()
t.join()
左右滑动查看更多
EMA26 (26根据传参而定) EMA12 (12根据传参而定) DIF DEA MACD
def verify_calculate(self, code):
try:
df = pd.read_csv(self.file_prefix + str(code) + '.csv', encoding='gbk')
except:
print('文件%s.csv打开失败' % code)
return
df = df[df.日期 > self.end_date]
df = df[::-1]
mid = []
dates = []
difs = []
deas = []
macds = []
color_macd = []
for index, row in df.iterrows():
mid.append(0)
dates.append(row['日期'])
difs.append(row['DIF'])
deas.append(row['DEA'])
macds.append(row['MACD'])
if row['MACD'] > 0:
color_macd.append('red')
else:
color_macd.append('green')
# 绘制图表
fig = plt.figure(dpi=128, figsize=(100, 6))
plt.plot(dates, mid, c='blue')
plt.plot(dates, difs, c='yellow')
plt.plot(dates, deas, c='black')
plt.bar(dates, macds, color=color_macd)
plt.xticks(fontsize=5)
plt.xlabel('', fontsize=5)
fig.autofmt_xdate()
plt.show()
左右滑动查看更多
数据分析
出现连续的红色块(MACD > 0) 紧接着出现连续蓝色块(MACD < 0) 蓝色块小于第一个红色块 蓝色块后面跟着一个红色块, 且后一红色块大于前一红色块
red_1 green_1 red_2
块 1 :green_1 == 0 and red_2 == 0 块 2 :red_1 != 0 and red_2 == 0 块 3 :red_1 != 0 and red_2 != 0 and green_1 != 0
3. 参数说明
4. function注释
calculate_noe 计算单只股票的 MACD 、 DIF 、 EMA 、 DEA 需要参数: code: 股票的代码 返回值: None calculate_all_by_thread 通过多线程计算所有股票 需要参数: thread_num: 线程数量 返回值: None calculate_block: 计算指定代码块的股票 需要参数: start:块下标开始 end: 块下标结束 返回值: None verify_calculate 验证计算的结果 需要参数: code: 股票的代码 返回值: None analyze_macd_one: 分析单只股票 的 macd 需要参数: code: 股票的代码 返回值: None analyze_macd_by_thread: 通过多线程分析所有股票 需要参数: thread_num: 线程数量 返回值: None analyze_block: 分析指定代码块的股票 需要参数: start:块下标开始 end: 块下标结束 返回值: None show_res: 输出分析结果并写入相关文件 需要参数:None 返回值:None
5. 结果分析
6. Source Code
git clone https://github.com/CatsJuice/MACD-Analyze.git
搜索你感兴趣的内容吧
软件应用丨Python量化投资学习报告之一:数据抓取
统计计量丨陈强:应用计量经济学的常见问题
软件应用丨吐血推荐,B站最强学习资源汇总(数据科学,机器学习,python)
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
欢迎扫描👇二维码添加关注