7/23 星期一
已办事项:
- Zabbix监控平台服务搭建成功。
- 了解量化交易概念,量化交易的价值。
从一个灵感开始 --> 把灵感细化成明确的可执行的交易策略 --> 把策略转成程序 -->
检验策略效果:回测和模拟交易 –> 进行实盘交易并不断维护修正
回测:根据一段时间的历史数据模拟执行该策略,根据结果改进策略程序。
模拟交易:根据实际行情模拟执行策略一段时间,根据结果评价并改进策略。 - K线图的看法以及影线的作用。
阳线:收盘价 > 开盘价
阴线:收盘价 < 开盘价
影线的作用:哪边影线长,越不容易向那个方向波动。 - 市价单和限价单的不同点。
市价单:以市场价格买进或卖出股票的委托单。成交价格通常等同或接近下单时报价,主要视成交速度和该股市场活跃度而定。
限价单:是一种以等于或低于指定价格买进特定数量股票的委托单,或一种以等同或高于指定价格(称为限定价格)卖出股票的委托单。 - JoinQuant平台的使用,基础环境的搭建。
- Content对象的基本使用。
当前时间 context.current_dt
当前时间的“年-月-日”的字符串格式 context.current_dt.strftime("%Y-%m-%d")
前一个交易日 context.previous_date
当前可用资金 context.portfolio.avaliable_cash
持仓价值 context.portfolio.positions_value
累计收益 context.portfolio.returns
当前持有股票 context.portfolio.positions.keys()
当前持有的某股票的开仓均价 context.portfolio.positions['xxxxxx.xxxx'].avg_cost
当前持有的某股票的可卖持仓量 context.portfolio.positions['xxxxxx.xxxx'].closeable_amount
待办事项:
- Python中列表生成式的应用。
- 研究量化交易案例,策略学习中。
- K线图的了解。
7/24 星期二
已办事项:
- 学习量化交易,并完成了基础案例。
- Python中列表生成式的学习应用。
- 学习JoinQuant平台中量化交易的数据取用方法。
- 了解策略评价及模拟指标:策略收益,基准收益,年化收益率,最大回撤率,交易次数,Alapha,Beta,夏普比率。
Python学习记录:
-
Python中的range()函数
Python列表生成式:通过列表生成式,可以非常简单的将代码生成list
简单表达式:[x * x for x in range(1 , 11)]
复杂表达式:[generate_tr(name, score) for name, score in d.items()]
条件过滤:[x * x for x in range(1, 11) if x % 2 == 0]
多层表达式:[m + n for m in 'ABC' for n in '123']
# 如下:构建一个100项平方数的列表,并求和。
list = [x**2 for x in range(1,101,1)]
print(list)
sum = 0
for num in list:
sum += num
print(sum)
isinstance(x, str) 可以判断变量 x 是否是字符串
待办事项:
- pandas数据分析库的继续学习。
- 量化策略的学习。
7/25 星期三
已办事项:
- pandas数据分析库的学习。重点理解了数据分组,数据合并,数据统计方面的操作。
- Python中特殊语法的学习。
- 练习科赛网上的pandas案例,练习整理后将上传SVN。
Python学习记录:
- lambda表达式:匿名函数,无函数名,快速定义单行的最小函数。
-
filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为ITrue的item组成一个list/string/tuple返回
map(function, sequence):对sequence中的item依次执行function(item),执行结果组成一个List返回
reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用
注:在Python3中,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里,如果想要使用它,则需要通过引入functools模块来调用reduce() 函数:from functools import reduce
遇到的问题:
-
数据连接合并问题
concat:可以将数据根据不同的轴作简单的融合
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False)
常用参数:
objs: series/dataframe或者是panel构成的序列list
axis:需要合并链接的轴,0是行,1是列
join:连接的方式 inner或者outer -
merge:常用参数
on:列名,join用来对齐的那一列的名字,用到这个参数的时候一定要保证左表和右表用来对齐的那一列都有相同的列名。
left_on:左表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays。
right_on:右表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays。
left_index/ right_index: 如果是True的haunted以index作为对齐的key。
how:数据融合的方法。
left:只保留左表的所有数据
right:只保留右表的所有数据
outer:保留两个表的所有信息
inner:只保留两个表公共部分的信息
sort:根据dataframe合并的keys按字典顺序排序,默认是,如果置false可以提高表现。 -
join:类比merge
-
apply函数用法
apply函数是pandas里面所有函数中自由度最高的函数,可以把dataframe的一列或几列遍历计算。
DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
参数func是一个函数,需要自己实现。函数参数可以在args=()中设置。 -
数据集中日期作为索引需要注意的问题
# 将日期设为索引,注意数据类型,应该是datetime64[ns]
wind['Yr_Mo_Dy'] = pd.to_datetime(wind['Yr_Mo_Dy'])
wind = wind.set_index('Yr_Mo_Dy')
# print(wind.head())
待办事项:
- 数据分析可视化方面学习。
- 继续进行pandas数据分析方面的练习,在练习中发现问题,解决问题。
- 了解下Python web开发。
7/26 星期四
已办事项:
- 学习Django框架,并成功搭建了一个投票Demo。
- 了解SQLite数据库。
- DiffMerge代码比较工具的使用,用于比对代码。
- 对Python web项目中开发环境搭建以及virtualenv虚拟环境的学习,不同于JVM。Python web项目共用同一套环境,当多个项目共同使用时候,会出现包导入异常等问题。
关于Django框架中的代码优化问题:类视图 – 抓图纪念下,还需要去了解学习
待办事项:
- Python中正则表达式的学习。
- 了解下互联网项目开发架构发展。
- 针对Django框架进行分层次学习,典型的MVC架构框架。
7/27 星期五
已办事项:
- 学习了Python中正则表达式的内容。
- 了解了当下互联网项目微服务架构。
- 开展Django + Xamin项目各种踩坑。
Python学习记录:
-
正则表达式: -- 类比编译原理中的分析策略
1. 何为正则表达式?
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
2. 正则表达式匹配过程
1.依次拿出表达式和文本中的字符比较,
2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
3.如果表达式中有量词或边界,这个过程会稍微有一些不同。
3. 正则表达式语法规则 图片来自CSDN
4. 原生字符串解决反斜杠问题:
匹配'\':正则表达式:'\\\\',采用原生字符串后的正则表达式:r'\\'
匹配'\d':正则表达式:'\\d',采用原生字符串后的正则表达式:r'\d'
5. Python 自带了re模块,它提供了对正则表达式的支持
#返回pattern对象
pattern = re.compile(string[,flag])
#以下为匹配所用函数
re.match(pattern, string[, flags])
re.search(pattern, string[, flags])
re.split(pattern, string[, maxsplit])
re.findall(pattern, string[, flags])
re.finditer(pattern, string[, flags])
re.sub(pattern, repl, string[, count])
re.subn(pattern, repl, string[, count]) - 踩坑记录:
1.Django1.0 和 2.0 版本在路由方面等配置上有较大不同。
2.Pycharm在进行虚拟环境加载和库导入时候存在问题,与Django当前版本有出入。
3.连接数据库模块上pymysql,Python2 和 3 用法不一致。
4.项目启动后,404错误不断,检查settings,urls,代码对比后还是404。
5.环境Python3 + pip3 + Django1.10 项目启动还是Django 2.0的欢迎页。
待办事项:
- 下周着手数据展示平台的开发。
- 技术选型,功能规划,接口文档的产出。
- 牢记约定优于配置,不要重复造轮子。