Example #1
0
date: 2017年05月17日
择时策略框架的主函数
"""

import pandas as pd
import Signals
import Timing_Functions
# 目前遇到的问题就是导入自己的文件夹的时候不正确
from program import Functions  # 或者 import program.Functions
# import program.Functions as Functions
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行

# ===== 第一个模块: 数据准备
# === 读入数据
code = 'sz300001'
df = Functions.import_stock_data(code)
# 判断股票上市是否满一定时间,如果不满足,则不运行策略
if df.shape[0] < 250:
    print '股票上市未满一年,不运行策略'
    exit()

# === 计算复权价
fuquan_type = '后复权'
df[[i + '_' + fuquan_type for i in '开盘价', '最高价', '最低价', '收盘价'
    ]] = Functions.cal_fuquan_price(df, fuquan_type)

# ===== 第二个模块:产生交易信号
# === 根据均线策略产生交易信号
df = Signals.signal_ma(df, ma_short=5, ma_long=50)

# =====  第三个模块: 根据交易信号计算每天的仓位
Example #2
0
# -*- coding: utf-8 -*-
"""
@author: Xingbuxing
date: 2017年05月06日
本程序示例如何将日线数据转换为周线数据、以及resample函数的使用方式
"""
import pandas as pd
from program import Functions
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行


# =====读入数据
code = 'sz300001'
df = Functions.import_stock_data(code)


# =====以日线数据转化为周线数据为例,
# ===上课资料文件夹中的《日线转周线说明》
# ===将'交易日期'这一列设置为index,之后讲为什么需要这么做
df.set_index('交易日期', inplace=True)

# ===周期转换方法:resample
week_df = df.resample(rule='w').last()
# 'w'意思是week,意味着转变为周线;
# last意思是取最后一个值
# 查看week_df中2009-11-08这一行的数据
# print df.iloc[:7]
# print week_df
# exit()

# 这一周的开、高、低的价格
Example #3
0
# -*- coding: utf-8 -*-
"""
@author: xingbuxing
"""
from program import Functions
from program import config
import pandas as pd
import talib
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行

# 通过pattern_name设定要跑的指标,在此处设定指标名称
pattern_name = 'CDL3OUTSIDE'

# 得到所有股票的列表
code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path +
                                                     '/stock_data')

# 遍历所有股票
output = pd.DataFrame()
for code in code_list:
    print code

    # 导入数据
    df = Functions.import_stock_data(code)

    # 计算后复权价,计算指标要用复权价
    df[[i + '_后复权' for i in ['开盘价', '最高价', '最低价', '收盘价']
        ]] = Functions.cal_fuquan_price(df)

    # 计算N天后涨跌幅
    for i in [1, 3, 5, 10]:
# -*- coding: utf-8 -*-
"""
@author: xingbuxing
"""
from program import Functions
import pandas as pd
import talib
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行

# 通过pattern_name设定要跑的指标,在此处设定指标名称
pattern_name = 'CDL2CROWS'

# 导入一只股票的数据,在此处设定股票代码
code = 'sz000001'
df = Functions.import_stock_data(code)

# 计算后复权价,计算指标要用复权价
df[[i + '_后复权'
    for i in ['开盘价', '最高价', '最低价', '收盘价']]] = Functions.cal_fuquan_price(df)

# 计算N天后涨跌幅
for i in [1, 3, 5, 10]:
    df[str(i) + '天后涨跌幅'] = df['收盘价_后复权'].shift(-i) / df['收盘价_后复权'] - 1

# 计算技术指标。不同指标此处需要参数可能不同,需要修改。
df[pattern_name] = getattr(talib, pattern_name)(df['开盘价_后复权'].values,
                                                df['最高价_后复权'].values,
                                                df['最低价_后复权'].values,
                                                df['收盘价_后复权'].values)

# 找出符合pattern的日期
Example #5
0
# x = stock_data.iloc[:3]['下月每天资金曲线']
# print x
# print list(x), len(list(x))  # 将x变成list
# print np.array(list(x))  # 矩阵化
# print np.array(list(x)).mean(axis=0)  # 求每天的资金曲线
# print list(np.array(list(x)).mean(axis=0))
# print [1] + list(np.array(list(x)).mean(axis=0))
# print pd.DataFrame([1] + list(np.array(list(x)).mean(axis=0)))
# print pd.DataFrame([1] + list(np.array(list(x)).mean(axis=0))).pct_change()[0]
# print list(pd.DataFrame([1] + list(np.array(list(x)).mean(axis=0))).pct_change()[0])
# print list(pd.DataFrame([1] + list(np.array(list(x)).mean(axis=0))).pct_change()[0])[1:]
select_stock.reset_index(inplace=True)
select_stock['资金曲线'] =  (select_stock['下月平均涨跌幅'] + 1).cumprod()

# 计算每日资金曲线
index_data = Functions.import_sh000001_data()
equity = pd.merge(left=index_data, right=select_stock[['交易日期', '股票代码']], on=['交易日期'],
                  how='left', sort=True)  # 将选股结果和大盘指数合并

equity['股票代码'] = equity['股票代码'].shift()
equity['股票代码'].fillna(method='ffill', inplace=True)
equity.dropna(subset=['股票代码'], inplace=True)

equity['每日涨幅'] = select_stock['下月每天平均涨跌幅'].sum()
# print select_stock[['交易日期', '下月每天平均涨跌幅']]
# print select_stock['下月每天平均涨跌幅'].sum()

equity['equity_curve'] = (equity['每日涨幅'] + 1).cumprod()
equity['benchmark'] = (equity['大盘涨跌幅'] + 1).cumprod()
print equity
Example #6
0
本程序演示如何抓取股票数据
"""
import pandas as pd
from program import config
import numpy as np
from program import Functions
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行

# 神奇的链接http://hq.sinajs.cn/list=sh600000,sh600004

# 本程序的作用是:从新浪网上,将所有股票最新的数据抓取下来并且保存。
# 可以每天定期运行,然后就能得到每天的数据了。

# ===读取所有股票代码列表
s_list = pd.read_hdf(config.input_data_path + '/stock_code_list_store.h5', 'table')
all_code_list = list(s_list)


# ===分组遍历股票
# 逐个股票的去遍历,会太慢。因为每次请求和新浪的交互时间都比较久。
# 也不能所有股票一次全部请求。
# 可以分组去遍历
chunk_len = 50
for code_list in np.array_split(all_code_list, len(all_code_list) / chunk_len + 1):
    Functions.save_stock_data_from_sina_to_h5(code_list)

# ===从h5文件中中读取数据
code = 'sh600004'
df = pd.read_hdf(config.output_data_path + '/each_stock_data_h5.h5', code)
print df
# -*- coding: utf-8 -*-
"""
@author: xingbuxing
"""
from program import Functions
from program import config
import pandas as pd
import talib
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行


# 通过pattern_name设定要跑的指标,在此处设定指标名称
pattern_name = 'CDL3OUTSIDE'

# 得到所有股票的列表
code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path + '/stock_data')

# 遍历所有股票
output = pd.DataFrame()
for code in code_list:
    print code

    # 导入数据
    df = Functions.import_stock_data(code)

    # 计算后复权价,计算指标要用复权价
    df[[i + '_后复权' for i in ['开盘价', '最高价', '最低价', '收盘价']]] = Functions.cal_fuquan_price(df)

    # 计算N天后涨跌幅
    for i in [1, 3, 5, 10]:
        df[str(i) + '天后涨跌幅'] = df['收盘价_后复权'].shift(-i) / df['收盘价_后复权'] - 1
# -*- coding: utf-8 -*-
"""
本段程序用于生成选股策略所需要的数据
"""
import pandas as pd
from program import config
from program import Functions
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行


# ===读取所有股票代码的列表
stock_code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path+'/stock_data')
stock_code_list = stock_code_list[:20]

# ===循环读取并且合并
# 导入上证指数
index_data = Functions.import_sh000001_data()[['交易日期']]
# 循环读取股票数据
all_stock_data = pd.DataFrame()
for code in stock_code_list:
    print code

    # 读入数据,额外读入'总市值'这一列
    df = Functions.import_stock_data(code, other_columns=['总市值'])
    # 将股票和上证指数合并,补全停牌的日期
    df = Functions.merge_with_index_data(df, index_data)
    # 将日线数据转化为月线,并且计算'是否交易'、'最后一天涨跌幅'、'交易天数'、'市场交易天数'
    # 并且计算'每天资金曲线',excel展示计算原理
    df = Functions.transfer_to_period_data(df, period_type='m')

    # 对数据进行整理
Example #9
0
# -*- coding: utf-8 -*-
"""
邢不行量化小讲堂系列文章配套代码
文章标题:Python说:这个炒股指标是我见过最废的,没有之一
文章链接:https://mp.weixin.qq.com/s/3oXyBrWdAK2__u5-08qNag
作者:邢不行
微信:xingbx007
"""
from program import Functions
import program.config as config
import pandas as pd
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行

# 得到所有股票的列表
code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path +
                                                     '/stock_data')

# 遍历所有股票
output = pd.DataFrame()
for code in code_list:
    print code

    # 导入数据
    data = Functions.import_stock_data(code)

    # 计算后复权价
    data[['开盘价', '最高价', '最低价', '收盘价']] = Functions.cal_fuquan_price(data)

    # 计算N天后涨跌幅
    for i in [1, 3, 5, 10]:
        data[str(i) + '天后涨跌幅'] = data['收盘价'].shift(-i) / data['收盘价'] - 1
Example #10
0
# -*- coding: utf-8

"""
@author: davidfnck
date: 2017年6月20日
本段程序用于生成选股策略所需要的数据
"""

import pandas as pd
from program import config
from program import Functions
pd.set_option('expand_frame_repr', False)  # 当列太多时不换行

# ==读取所有股票代码的列表
stock_code_list = Functions.get_stock_code_list_in_one_dir(config.input_data_path+'/stock_data')
stock_code_list = stock_code_list[:20]
print stock_code_list
exit()