请选择 进入手机版 | 继续访问电脑版
楼主: 唉人好累66
1086 2

[原创博文] 【干货分享】从零开始学量化:03动量选股策略 [推广有奖]

  • 0关注
  • 41粉丝

讲师

55%

还不是VIP/贵宾

-

威望
1
论坛币
1457 个
通用积分
5.0477
学术水平
11 点
热心指数
14 点
信用等级
11 点
经验
3660 点
帖子
214
精华
0
在线时间
119 小时
注册时间
2016-9-24
最后登录
2020-4-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
1. 策略原理:
选取某一个时间段内,前三天涨幅超过某一数值的股票。
用法:
输入三个参数,起始日期,结束日期,r,  最后一个参数表示三天涨幅r%。


2. 代码解读:
  1. from __future__ import division
  2. from gmsdk import *
  3. import sys
  4. import arrow

  5. md.init("", "")      # 输入用户名、密码

  6. def TGP(start_time, end_time, r):
  7.     import arrow
  8.     import pandas as pd
  9.     import numpy as np
  10.     #获取全市场股票代码
  11.     e = ['SHSE', 'SZSE']
  12.     for f in e:
  13.         if f == 'SHSE':
  14.             all_stocks = md.get_instruments(f, 1, 1)
  15.             all_stocks_symbol1 = [b.symbol for b in all_stocks]  # 获取沪市全部股票代码
  16.         if f == 'SZSE':
  17.             all_stocks = md.get_instruments(f, 1, 1)
  18.             all_stocks_symbol2 = [b.symbol for b in all_stocks]  # 获取深市全部股票代码
  19.     all_stocks_symbol = all_stocks_symbol1 + all_stocks_symbol2


  20.     code = []
  21.     time1 = []
  22.     for stock in all_stocks_symbol:
  23.         a = md.get_dailybars(str(stock), start_time + ' 00:00:00', end_time + ' 00:00:00') #获取指定时间日线数据
  24.         close_daily = [bar.close for bar in a] #获取日线收盘价
  25.         time = [bar.utc_time for bar in a]     #获取日线时间戳

  26.         AU1 = pd.Series(close_daily)            #将日线收盘价存为Series
  27.         AU2 = pd.Series(close_daily).shift(3)   #向前移动三格,得到对应时间点三天前的收盘价

  28.         AU = np.array(AU1) / np.array(AU2)      #相除得到三天的涨幅序列,使用numpy加速运算
  29.         rr = ((r / 100) + 1)          #参数处理,例如输入筛选涨幅为20%, rr = 20/100 + 1 = 1.2

  30.         AU[0:3] = 0                   #数据处理,将NaN赋值为0
  31.         if len(AU[AU >= rr]) > 0:     # 如果三天的涨幅序列中有大于等于要求涨幅的情况
  32.             index2 = time[np.where(AU >= rr)[0][0]]             #得到第一次出现满足条件的时间戳
  33.             time_happen = arrow.get(index2).to('local')        #时间戳格式转换
  34.             time_happen = time_happen.format('YYYY-MM-DD')    #保留 YYYY-MM-DD 部分
  35.             code.append(stock)                                 #记录股票代码
  36.             time1.append(time_happen)                          #记录第一次满足条件时间

  37.     time1 = pd.DataFrame(time1,columns=['time'])      #转换为DataFrame
  38.     code = pd.DataFrame(code, columns=['code'])       #转换为DataFrame
  39.     result = pd.concat([code, time1], axis=1)         #合并两列
  40.     result.to_csv('growth.csv')                      #存为 csv 文件

  41.     TGP('2017-03-01', '2017-03-28', 15)
复制代码


3. Python相关函数
    3.1 Python标准函数:
功能函数原型参数返回值
参数名含义
sys提供了一系列有关Python运行环境的变量和函数。
sys.argv[0]当前程序名
sys.argv获取当前正在执行的命令行参数的参数列表(list)。sys.argvsys.argv[1]第一个参数
sys.argv[2]第二个参数
arrow标准的时间日期库。
seriesSeries是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。Series的字符串表现形式为:索引在左边,值在右边。dataframe中的数据是以一个或者多个二位块存放的(而不是列表、字典或者别的一维数据结构)。
time返回当前时间的时间戳time.time()返回当前时间的时间戳
DataFrameDataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值的)。
len返回对象(字符、列表、元组等)长度或项目个数。len(s)s对象返回对象长度。
append用于在列表末尾添加新的对象。list.append(obj)obj添加到列表末尾的对象。该方法无返回值,但是会修改原来的列表。
    3.2 掘金接口函数:
功能函数原型参数返回值
参数名类型说明
get_instruments提取交易代码。策略类和行情服务类都提供该接口。get_instruments(exchange, sec_type, is_active)exchangestring交易所代码Instrument对象列表
sec_typeint代码类型:1.股票,2.基金,3.指数,4.期货,5.ETF
is_activeint当天是否交易:1.是,0.否
get_dailybars提取指定时间段的历史日周期Bar数据,支持单个代码提取或多个代码组合提取。DailyBar比Bar多了部分静态数据,如结算价,涨跌停等。策略类和行情服务类都提供该接口。get_dailybars(symbol_list, begin_time, end_time)symbol_liststring证券代码, 带交易所代码以确保唯一,如SHSE.600000,同时支持多只代码DailyBar列表
begin_timestring开始日期, 如2015-10-19
end_timestring结束日期, 如2015-10-30
bar各种周期的Bar数据class Bar(object):

  def __init__(self):
  self.exchange = '' ## 交易所代码
  self.sec_id = '' ## 证券ID

  self.bar_type = 0 ## bar类型,以秒为单位,比如1分钟bar, bar_type=60
  self.strtime = '' ## Bar开始时间
  self.utc_time = 0.0 ## Bar开始时间
  self.strendtime = '' ## Bar结束时间
  self.utc_endtime = 0.0 ## Bar结束时间
  self.open = 0.0 ## 开盘价
  self.high = 0.0 ## 最高价
  self.low = 0.0 ## 最低价
  self.close = 0.0 ## 收盘价
  self.volume = 0.0 ## 成交量
  self.amount = 0.0 ## 成交额
  self.pre_close ## 前收盘价
  self.position; ## 持仓量
  self.adj_factor ## 复权因子
  self.flag ## 除权出息标记



4. 金融术语:
动量选股策略:选取前期强势的股票,判断其将继续强势后买入持有。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 1 人评分经验 收起 理由
残阳_等待 + 100 精彩帖子

总评分: 经验 + 100   查看全部评分

好贴莫沉啊啊啊自己顶一把

使用道具

感谢分享

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-28 18:49