# 根据缺口的模式选股买股票

'''

--------------------------------------------

1、总体回测前要做的事情

initialize(context)

1.1、设置策略参数 ----> 全局常量

1.2、设置中间变量 ----> 全局变量

1.3、设置回测条件 ----> JoinQuant额外需要的

2、每天开盘前选股策略 (下面策略,发现这种股,不容错过)

2.1、设置手续费

2.2、设置可行股票池,比如过滤当日停牌股票

2.3、筛选上市满一年的全部A股

2.4、筛选上市发生向上缺口的时点

定义为:今日最低价>昨日最高价,删除涨停的个股

涨幅>5%

2.5、筛选前期盘整阶段,比如20-30个交易日,最高价-最低价/最低价<15%或者标准差较少的

2.6、缺口当日成交量 > 前20个交易日平均成交量的50%,也就是15倍以上。

3、每天交易时

3.1、买入/卖出信号判断

3.2、执行买入/卖出的操作

4、每天收盘

--------------------------------------------

关于什么时候卖?

策略有三,第一个就是设置止盈位。也就是不需要追求最高点卖出。

比如你设置一个从最近高点下滑3%(比例自调)的位置作为卖出点。

第二个就是利用技术分析,看重要的压力位,一方面是均线系统的压力,

要看的是日线,周线月线,周期越大,压力越强,其次是前期的高点,

密集成交区,这个区域是深度套牢区,因此可以暂时止盈。

还有就是识技术指标的图,比如看MACD顶背离,这个比较准,KDJ超卖等等。

建议多去分析大盘,80%的股票和大盘会保存一样走势,大盘触顶,个股一般也好不到哪去。

第三就是关注基本面,同行对比,分析当前的股价的PE,以及与同行业的公司来看,

比如营业总收入排第几,净利润排第几,收入增速排第几,它的总市值排在第几。

如果基本面排在行业第10,但是市值排在第一,这就表示高估了。可以择机止盈。

'''

#

import jqdata

import pandas as pd

import datetime as dt

import time

'''

================================================================================

总体回测前

================================================================================

'''

# 初始化函数,设定基准等等

def initialize(context):

print '初始化方法'

set_params() # 设置策略常量

set_variables() # 设置中间变量

set_backtest() # 设置回测条件

print '--------------------------------------'

#1

#设置策略参数

def set_params():

print '设置策略参数'

g.tc = 15 # 调仓天数

g.num_stocks = 10 # 每次调仓选取的最大股票数量

#2

#设置中间变量

def set_variables():

print '设置中间变量'

g.t = 0 # 记录回测运行的天数

g.if_trade = False # 当天是否交易

#3

#设置回测条件

def set_backtest():

print '设置回测条件'

# 设定沪深300作为基准,就是基准收益

set_benchmark('000300.XSHG')

# 开启动态复权模式(真实价格)

set_option('use_real_price', True)

# 输出内容到日志 log.info()

log.info('初始函数开始运行且全局只运行一次')

# 过滤掉order系列API产生的比error级别低的log

# log.set_level('order', 'error')

### 股票相关设定 ###

# 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱

set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')

## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG'或'510300.XSHG'是一样的)

# 开盘前运行

run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')

# 开盘时运行

run_daily(market_open, time='every_bar', reference_security='000300.XSHG')

# 收盘后运行

run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')

log.set_level('order','error') # 设置报错等级

'''

================================================================================

每天开盘前

================================================================================

2、每天开盘前选股策略 (下面策略,发现这种股,不容错过)

2.1、设置手续费

2.2、设置可行股票池,比如过滤当日停牌股票

2.3、筛选上市满一年的全部A股

2.4、筛选上市发生向上缺口的时点

定义为:今日最低价>昨日最高价,删除涨停的个股

涨幅>5%

2.5、筛选前期盘整阶段,比如20-30个交易日,最高价-最低价/最低价<15%或者标准差较少的

2.6、缺口当日成交量 > 前20个交易日平均成交量的50%,也就是15倍以上。

'''

## 开盘前运行函数

def before_market_open(context):

# 输出运行时间

log.info('函数运行时间(before_market_open):'+str(context.current_dt.time()))

print '----每天开盘前要做的事情----'

set_slip_fee(context) # 设置滑点与手续费

# g.stocks=get_index_stocks('000300.XSHG') # 设置沪深300为初始股票池

g.stocks=get_index_stocks('000002.XSHG') # 设置000002.XSHG全部上市A股

# 设置可行股票池

g.feasible_stocks = set_feasible_stocks(g.stocks,context)

# 给微信发送消息(添加模拟交易,并绑定微信生效)

# send_message('美好的一天~')

# 要操作的股票:平安银行(g.为全局变量)

# g.security = '000001.XSHE'

#

# 设置可行股票池:过滤掉当日停牌的股票

# 输入:initial_stocks为list类型,表示初始股票池; context(见API)

# 输出:unsuspened_stocks为list类型,表示当日未停牌的股票池,即:可行股票池

def set_feasible_stocks(initial_stocks,context):

# 判断初始股票池的股票是否停牌,返回list

# print '设置可行股票池:过滤掉当日停牌的股票',context.current_dt.day

# print '当前时期%10s' %(context.current_dt.strftime("%Y-%m-%d"))

paused_info = []# 存储对应股票是否停牌的信息数组

liste_Date_info = []# 存储对应的上市时间

# 在股票基本信息表 - STK_STOCKINFO能找到

stock_info = get_all_securities(['stock']);

# get_current_data ♠ - 获取当前时间数据

current_data = get_current_data()

print '打印--',initial_stocks

print '再打印--当前时间数据对象返回是空的',current_data

for i in initial_stocks:

# i是遍历出来的每个股票的代码

# 然后paused是判断这个股票是否停牌,False表示没有停牌

paused_info.append(current_data[i].paused)

# print '获取所有股票数据',stock_info[i].start_date

# 如何获取上市满一年的股票

# 先获取所有股票数据 .start_data

# print '当前时期:%10s--股票上市时期:%10s' %(context.current_dt.strftime("%Y-%m-%d"),stock_info.at[i,'start_date'])

# print '当前时期:%10s--股票上市时期' %((stock_info.at[i,'start_date']-context.current_dt).days)

# 存储上市时间是否满一年,如果满一年为YES

isGoPublicOneYear = calculate_goPublick_OneYear(context.current_dt.strftime("%Y-%m-%d"),str(stock_info.at[i,'start_date']))

liste_Date_info.append(isGoPublicOneYear)

if isGoPublicOneYear == False:

print '上市不满一年的股票%10s:%10s' %(i,stock_info.at[i,'display_name'])

df_paused_public_info = pd.DataFrame({'paused_info':paused_info,'liste_Date_info':liste_Date_info},index = initial_stocks)

# print 'df_paused_public_info:\n',df_paused_public_info

unsuspened_stocks = list(df_paused_public_info.index[(df_paused_public_info.paused_info == False) and (df_paused_public_info.liste_Date_info == True)])

# print '最后获得的index',unsuspened_stocks

return unsuspened_stocks

# 计算当天交易时间是否为上市时间满一年

def calculate_goPublick_OneYear(currentTime,goPublicTime):

currentTimeDate = time.strptime(currentTime,"%Y-%m-%d")

y,m,d = currentTimeDate[0:3]

goPublicTimeDate = time.strptime(goPublicTime,"%Y-%m-%d")

y2,m2,d2 = goPublicTimeDate[0:3]

# print (dt.datetime(y,m,d)-dt.datetime(y2,m2,d2)).days

if ((dt.datetime(y,m,d)-dt.datetime(y2,m2,d2)).days)>366:

return True

else:

return False

#5

# 根据不同的时间段设置滑点与手续费

# 输入:context(见API)

# 输出:none

def set_slip_fee(context):

print '根据不同的时间段设置滑点与手续费'

# 将滑点设置为0

set_slippage(FixedSlippage(0))

# 根据不同的时间段设置手续费

print '根据不同的时间段设置手续费'

dt=context.current_dt

if dt>datetime.datetime(2013,1, 1):

set_commission(PerTrade(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))

elif dt>datetime.datetime(2011,1, 1):

set_commission(PerTrade(buy_cost=0.001, sell_cost=0.002, min_cost=5))

elif dt>datetime.datetime(2009,1, 1):

set_commission(PerTrade(buy_cost=0.002, sell_cost=0.003, min_cost=5))

else:

set_commission(PerTrade(buy_cost=0.003, sell_cost=0.004, min_cost=5))

'''

================================================================================

每天交易时

================================================================================

'''

## 开盘时运行函数

def market_open(context):

log.info('函数运行时间(market_open):'+str(context.current_dt.time()))

security = g.security

# 获取股票的收盘价

close_data = attribute_history(security, 5, '1d', ['close'])

# 取得过去五天的平均价格

MA5 = close_data['close'].mean()

# 取得上一时间点价格

current_price = close_data['close'][-1]

# 取得当前的现金

cash = context.portfolio.available_cash

# 如果上一时间点价格高出五天平均价1%, 则全仓买入

if current_price > 1.01*MA5:

# 记录这次买入

log.info("价格高于均价 1%%, 买入 %s" % (security))

# 用所有 cash 买入股票

# order_value(security, cash)

# 如果上一时间点价格低于五天平均价, 则空仓卖出

elif current_price < MA5 and context.portfolio.positions[security].closeable_amount > 0:

# 记录这次卖出

log.info("价格低于均价, 卖出 %s" % (security))

# 卖出所有股票,使这只股票的最终持有量为0

# order_target(security, 0)

'''

================================================================================

每天收盘后

================================================================================

'''

## 收盘后运行函数

def after_market_close(context):

log.info(str('函数运行时间(after_market_close):'+str(context.current_dt.time())))

#得到当天所有成交记录

trades = get_trades()

for _trade in trades.values():

log.info('成交记录:'+str(_trade))

log.info('一天结束')

log.info('##############################################################')

python行业缺口_根据缺口的模式选股买股票,python 学习代码相关推荐

  1. 消耗性缺口_衰竭缺口分析

    消耗性缺口:股价在大幅度波动过程中价格在奄奄一息中回光反照,作最后一次跳跃,然而,最后的挣扎好景不长,在随后的几天乃至一个星期里的价格马上开始下滑.当收市价格低于这种最后的跳空后,表明衰竭跳空已经形成 ...

  2. python selenium脚本_怎样开始写第一个基于python的selenium脚本

    1.下载并安装python(http://www.python.org/geti/). 2.安装selenium(http://pypi.python.org/pypi/selenium)下载并解压缩 ...

  3. python 字符串拼接_面试官让用 3 种 python 方法实现字符串拼接 ?对不起我有8种……...

    点击上方 蓝字关注我们 点击上方"印象python",选择"星标"公众号重磅干货,第一时间送达!之前发过很多关于 Python 学习的文章,收到大家不少的好评, ...

  4. python 建筑计算_制图小技巧:巧用Python和ELK瞬间完成总图建筑名称标注

    哎呦,又到了每周一次的制图教室啦.经过前面两次制图教程的分享,相信大家对于白模填色和写实渲染这两种表达方式肯定有了较好的掌握. 那么今天我们就转战制图技巧篇,和童鞋们聊一下总平面图中的建筑名称标注问题 ...

  5. python编程首选_为什么说学编程首选是python

    为什么学编程 你可能不会成为一名专业的程序员, 不过学编程的确是有很多的原因的 1. 最重要的是你想学!不论是因为业余爱好还是作为职业,编程都是十分有意思的, 都会让你收获很多 2. 如果你是对计算机 ...

  6. python 廖雪峰_为什么看不懂廖雪峰的Python学习教程?

    廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...

  7. 全民一起玩python提高篇_杨洋博士:全民一起玩Python之基础篇+提高篇

    课程介绍 ▶制作精细.自带吐槽,每节课程(20分钟)均耗时数十小时精心打造! ▶"全民一玩Python"系列由杨洋博士精心制作,面向所有希望学习Python编程.进而能够在学习和工 ...

  8. python ide 最好_我在iPad上最好的Python IDE

    python ide 最好 Having finished my first year at university, and being left with very little to do thi ...

  9. python笔记视频_终于拿到!清华大佬Python视频+书+笔记汇总

    终于拿到!清华大佬Python视频+书+笔记汇总 清华学姐推荐的Python视频400集,拿走不谢!

最新文章

  1. 通过hibernate 查询出来的数据默认为持久状态,也就是说:你在后头作出的任何操作都会被hibernate自动同步更新到数据库
  2. 一次性掌握机器学习基础知识脉络 | 公开课笔记
  3. Hadoop开发环境配置2-eclipse集成maven插件
  4. rose框架学习总结
  5. php中的伪类选择器,css伪类选择器介绍
  6. MyBatis学习总结(18)——MyBatis与Hibernate详细比较
  7. java在线支付---04_编写易宝支付的客户端加密工具类
  8. 打造云上深度学习实验室
  9. aix系统vi修改命令_aix系统VI编辑器的操作
  10. 中国人工智能人才培养白皮书
  11. 五笔输入法linux安装包,RedHat enterprise Linux 5 安装五笔输入法
  12. 递归构造格雷码c语言,递归构造格雷码
  13. 电脑没声音怎么调出来?让电脑重新“开口说话”,黑客仅用了2招
  14. python:从excel中提取高频词生成词云
  15. 【整理资料】空间信息网络通信协议
  16. My QQ Show
  17. 转:Linux系统管理学习路线图
  18. 西电微机原理期末考试复习重点
  19. 使用扩散模型从文本提示中生成3D点云
  20. 利用Shape Context进行形状识别

热门文章

  1. qq群关系数据库 mysql_QQ群关系数据库
  2. C++ pair使用案例(一)
  3. C语言课后习题(63)
  4. 安卓手机管理_安卓手机:管理工具
  5. php url gb2312 utf8,php实现utf-8与gb2312的url编码转换
  6. 下载丨Linux+Oracle 11g+RAC+12cc+adg国内业界最详细生产系统下实施文档
  7. MySQL 传统复制中常见故障处理和结构优化案例分析
  8. 基于机器学习和TFIDF的情感分类算法,详解自然语言处理
  9. C++语言中std::array的神奇用法总结,你需要知道!
  10. 一文快速掌握IPv6基础知识及使用指南