通知设置 新通知
pandas dataframe 切片与python列表切片的区别
李魔佛 发表了文章 • 0 个评论 • 391 次浏览 • 2020-10-29 23:34
有一个Dataframedf = pd.DataFrame(np.arange(16).reshape((8,2)),index=list('abcdefgh'),columns=['COL1','COL2'])COL1 COL2
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
f 10 11
g 12 13
h 14 15那么如果我用df['a':'e'] 返回的结果是:
COL1 COL2
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9是包含e尾部的,
而python的切片
a = [0,1,2,3,4,5]
a[1:5] 是不包含最后一个元素的。
原文链接:
http://30daydo.com/article/630
查看全部
有一个Dataframe
df = pd.DataFrame(np.arange(16).reshape((8,2)),index=list('abcdefgh'),columns=['COL1','COL2'])
COL1 COL2那么如果我用df['a':'e'] 返回的结果是:
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
f 10 11
g 12 13
h 14 15
COL1 COL2是包含e尾部的,
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
而python的切片
a = [0,1,2,3,4,5]
a[1:5] 是不包含最后一个元素的。
原文链接:
http://30daydo.com/article/630
华宝油气自动化申购脚本 AutoJS
李魔佛 发表了文章 • 0 个评论 • 847 次浏览 • 2020-09-24 23:40
因为最近两周的华宝油气都呈现很大的折价,但是限购,所以拖拉机申购非常的麻烦,需要一路点击,非常的耗时间,而且容易出错,容易点重复了,导致另外一个股东号没有申购。
所以自己用appium写了个手机自动化申购的脚本,只是它的部署相当不方便,对于一般小白几乎很难独立实现。在上一篇文章中埋了个伏笔 转债水位在降低 当时还准备基于appium写个教程来着。
最近发现有一个叫auto.js的app,基于JS代码的自动化工具,可以很方便的操控手机,只需要在手机上安装一个app,然后写一段JS脚本,然后运行就可以了,部署简化了不少。
后台回复:autojs 会提供相应的app下载与源码打包。
先看运行效果图:
运行的视频文件下面:
https://v.qq.com/x/page/u3155gvuxvt.html
脚本代码入口函数:main("162411", "6", "100");其中第二个参数是申购的次数,场内的最多6个股东号,所以设置为6。
完整代码://可转债量化分析
function main(code, count, money) {
log(code, count, money);
if (!code) {
toast("请输入基金代码");
return;
}
if (!count) {
toast("股东账户数量");
return;
}
if (!money) {
toast("申购金额");
return;
}
app.launchApp("中国银河证券");
waitForPackage("com.galaxy.stock");
log("成功打开银河证券");
sleep(1000);
// 切换到【交易】tab
const tradeBtn = text("交易")
.findOne()
.parent()
.parent();
log(tradeBtn);
tradeBtn.click();
//点击【场内基金】
sleep(1000);
const internalFund = text("场内基金")
.findOnce()
.parent();
internalFund.click();
//点击【基金申购】
waitForActivity("cn.com.chinastock.trade.activity.LofActivity");
const fundPurchase = text("基金申购")
.findOnce()
.parent();
fundPurchase.click();
// 自动填信息
sleep(1000);
purchaseFund(code, count, money);
}
function purchaseFund(code, count, money) {
for (let i = 0; i < count; i++) {
log(code, count, money);
const codeInput = id("stockCode").findOne();
codeInput.click();
codeInput.setText(code);
sleep(1000);
const accountSelect = id("secuidList").findOne();
accountSelect.click();
sleep(1000);
const options = className("CheckedTextView").find();
click(options[i].bounds().left + 2, options[i].bounds().top + 2);
sleep(300);
const orderAmount = id("orderAmount")
.findOnce()
.children()[0];
log(orderAmount);
orderAmount.setText(money);
sleep(300);
id("order")
.findOnce()
.click();
sleep(6000);
id("acceptedCb")
.findOnce()
.click();
id("okBtn")
.findOnce()
.click();
sleep(6000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(200);
click("本人已认真阅读并理解上述内容");
sleep(200)
click("我接受");
sleep(7000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(500);
text('确认申购').findOnce().click();
sleep(1000);
text("确定")
.findOnce()
.click();
sleep(1000);
}
}
main("162411", "6", "100");[/i][/i]
[i]安装使用步骤:
安装autojs app
[/i]
[i]手机设置无障碍模式,把autojs添加进去,一般按住app的时候会提示引导你这么操作[/i][list][*][i]打开autojs app,把上面的JS代码复制进去[/i][list][*][i]登录你的X河牌拖拉机[/i][list][*][i]在autojs app里面点击执行[/i]
[/*]
[/list]
[/*]
[/list]
[/*]
[/list]
[i]
然后就静静的等待脚本执行完成,你的6个股东号就全部打完啦。如果你有多个证券账户,需要你退出当前的账户,然后登陆下一个账号,然后继续运行这个脚本即可。
后台回复:autojs 就可以获取autojs的app与上面的源码打包。
PS:如果你有有趣的想法要验证或者苦于没有数据无从下手,可以后台留言,一起交流,笔者会尝试帮你们验证分析。
关注公众号:
[/i] 查看全部
因为最近两周的华宝油气都呈现很大的折价,但是限购,所以拖拉机申购非常的麻烦,需要一路点击,非常的耗时间,而且容易出错,容易点重复了,导致另外一个股东号没有申购。
所以自己用appium写了个手机自动化申购的脚本,只是它的部署相当不方便,对于一般小白几乎很难独立实现。在上一篇文章中埋了个伏笔 转债水位在降低 当时还准备基于appium写个教程来着。
最近发现有一个叫auto.js的app,基于JS代码的自动化工具,可以很方便的操控手机,只需要在手机上安装一个app,然后写一段JS脚本,然后运行就可以了,部署简化了不少。
后台回复:autojs 会提供相应的app下载与源码打包。
先看运行效果图:
运行的视频文件下面:
https://v.qq.com/x/page/u3155gvuxvt.html
脚本代码入口函数:
main("162411", "6", "100");其中第二个参数是申购的次数,场内的最多6个股东号,所以设置为6。
完整代码:
//可转债量化分析
function main(code, count, money) {
log(code, count, money);
if (!code) {
toast("请输入基金代码");
return;
}
if (!count) {
toast("股东账户数量");
return;
}
if (!money) {
toast("申购金额");
return;
}
app.launchApp("中国银河证券");
waitForPackage("com.galaxy.stock");
log("成功打开银河证券");
sleep(1000);
// 切换到【交易】tab
const tradeBtn = text("交易")
.findOne()
.parent()
.parent();
log(tradeBtn);
tradeBtn.click();
//点击【场内基金】
sleep(1000);
const internalFund = text("场内基金")
.findOnce()
.parent();
internalFund.click();
//点击【基金申购】
waitForActivity("cn.com.chinastock.trade.activity.LofActivity");
const fundPurchase = text("基金申购")
.findOnce()
.parent();
fundPurchase.click();
// 自动填信息
sleep(1000);
purchaseFund(code, count, money);
}
function purchaseFund(code, count, money) {
for (let i = 0; i < count; i++) {
log(code, count, money);
const codeInput = id("stockCode").findOne();
codeInput.click();
codeInput.setText(code);
sleep(1000);
const accountSelect = id("secuidList").findOne();
accountSelect.click();
sleep(1000);
const options = className("CheckedTextView").find();
click(options[i].bounds().left + 2, options[i].bounds().top + 2);
sleep(300);
const orderAmount = id("orderAmount")
.findOnce()
.children()[0];
log(orderAmount);
orderAmount.setText(money);
sleep(300);
id("order")
.findOnce()
.click();
sleep(6000);
id("acceptedCb")
.findOnce()
.click();
id("okBtn")
.findOnce()
.click();
sleep(6000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(200);
click("本人已认真阅读并理解上述内容");
sleep(200)
click("我接受");
sleep(7000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(500);
text('确认申购').findOnce().click();
sleep(1000);
text("确定")
.findOnce()
.click();
sleep(1000);
}
}
main("162411", "6", "100");[/i][/i]
[i]安装使用步骤:
安装autojs app
[/i]
- [i]手机设置无障碍模式,把autojs添加进去,一般按住app的时候会提示引导你这么操作[/i][list][*][i]打开autojs app,把上面的JS代码复制进去[/i][list][*][i]登录你的X河牌拖拉机[/i][list][*][i]在autojs app里面点击执行[/i]
[/*]
[/list]
[/*]
[/list]
[/*]
[/list]
[i]
然后就静静的等待脚本执行完成,你的6个股东号就全部打完啦。如果你有多个证券账户,需要你退出当前的账户,然后登陆下一个账号,然后继续运行这个脚本即可。
后台回复:autojs 就可以获取autojs的app与上面的源码打包。
PS:如果你有有趣的想法要验证或者苦于没有数据无从下手,可以后台留言,一起交流,笔者会尝试帮你们验证分析。
关注公众号:
[/i]
个人的知识星球
李魔佛 发表了文章 • 0 个评论 • 1108 次浏览 • 2020-02-23 11:10
微信扫一扫加入我的知识星球
星球的第一篇文章
python获取全市场LOF基金折溢价数据并进行套利
市场是总共的LOF基金有301只(上图右下角的圈圈是所有基金的条数),而集思录上只有120只左右,所以有些溢价厉害(大于10%)的LOF基金并没有在集思录的网站上显示,这对于专注于套利的投资者来说,会损失很多潜在的套利机会。
点击查看大图
我回复了该贴后,有大量的人私信我,问我能否提供一份这个数据,或者教对方如何获取这些数据。 因为人数众多,也没有那么多精力来一一回答。毕竟不同人的水平背景不一样,逐个回答起来也很累,所以就回答了几个朋友的问题后就一一婉拒了。
然后在几个投资群里,居然也有人提到这个数据,在咨询如何才能获取到这个完整的数据,并且可以实时更新显示。 因为我的微信群昵称和集思录是一样的,所以不少人@我,我也都简单的回复了下,是使用python抓取的数据,数据保存到Mysql和MongoDB。 代码行数不多,100行都不到。
具体实现在星球会有完整代码。 查看全部
微信扫一扫加入我的知识星球
星球的第一篇文章
python获取全市场LOF基金折溢价数据并进行套利
市场是总共的LOF基金有301只(上图右下角的圈圈是所有基金的条数),而集思录上只有120只左右,所以有些溢价厉害(大于10%)的LOF基金并没有在集思录的网站上显示,这对于专注于套利的投资者来说,会损失很多潜在的套利机会。
点击查看大图
我回复了该贴后,有大量的人私信我,问我能否提供一份这个数据,或者教对方如何获取这些数据。 因为人数众多,也没有那么多精力来一一回答。毕竟不同人的水平背景不一样,逐个回答起来也很累,所以就回答了几个朋友的问题后就一一婉拒了。
然后在几个投资群里,居然也有人提到这个数据,在咨询如何才能获取到这个完整的数据,并且可以实时更新显示。 因为我的微信群昵称和集思录是一样的,所以不少人@我,我也都简单的回复了下,是使用python抓取的数据,数据保存到Mysql和MongoDB。 代码行数不多,100行都不到。
具体实现在星球会有完整代码。
dataframe 根据日期重采样 计算个数
李魔佛 发表了文章 • 0 个评论 • 1033 次浏览 • 2019-12-19 09:07
python分析目前为止科创板企业省份分布
李魔佛 发表了文章 • 0 个评论 • 1883 次浏览 • 2019-08-26 00:45
首先获取行情数据,借助tushare这个框架:
在python3环境下,pip install tushare --upgrade ,记得要更新,因为用的旧版本会获取不到科创板的数据。
安装成功后试试import tushare as ts,看看有没有报错。没有就是安装成功了。
接下来抓取全市场的行情.
(点击查看大图)
查看前5条数据
现在行情数据存储在df中,然后分析数据。
因为提取的是全市场的数据,然后获取科创板的企业:
(点击查看大图)
使用的是正则表达式,匹配688开头的代码。
接下来就是分析企业归属地:
(点击查看大图)
使用value_counts函数,统计该列每个值出现的次数。
搞定了! 是不是很简单?
而且企业地区分布和自己的构想也差不多,江浙沪一带占了一半,加上北京地区,占了80%以上的科创板企业了。
每周会定期更新一篇python数据分析股票的文章。
原创文章,欢迎转载
请注明出处:
http://30daydo.com/article/528
查看全部
首先获取行情数据,借助tushare这个框架:
在python3环境下,pip install tushare --upgrade ,记得要更新,因为用的旧版本会获取不到科创板的数据。
安装成功后试试import tushare as ts,看看有没有报错。没有就是安装成功了。
接下来抓取全市场的行情.
(点击查看大图)
查看前5条数据
现在行情数据存储在df中,然后分析数据。
因为提取的是全市场的数据,然后获取科创板的企业:
(点击查看大图)
使用的是正则表达式,匹配688开头的代码。
接下来就是分析企业归属地:
(点击查看大图)
使用value_counts函数,统计该列每个值出现的次数。
搞定了! 是不是很简单?
而且企业地区分布和自己的构想也差不多,江浙沪一带占了一半,加上北京地区,占了80%以上的科创板企业了。
每周会定期更新一篇python数据分析股票的文章。
原创文章,欢迎转载
请注明出处:
http://30daydo.com/article/528
numpy indices的用法
李魔佛 发表了文章 • 0 个评论 • 5356 次浏览 • 2019-07-08 17:58
M_ij = 2*i + 3*j
One way to define this matrix would be
i, j = np.indices((2,3))
M = 2*i + 3*j
which yields
array([[0, 3, 6],
[2, 5, 8]])
In other words, np.indices returns arrays which can be used as indices. The elements in i indicate the row index:
In [12]: i
Out[12]:
array([[0, 0, 0],
[1, 1, 1]])
The elements in j indicate the column index:
In [13]: j
Out[13]:
array([[0, 1, 2],
[0, 1, 2]])
上面是Stack Overflow的解释。 翻译一下:
np.indices((2,3))
返回的是一个行列的索引,然后可以用这个索引快速的创建二维数据。
比如我要画一个圆:
img = np.zeros((400,400))
ir,ic = np.indices(img.shape)
circle = (ir-135)**2+(ic-150)**2 < 30**2 # 半径30,圆心在135,150
img[circle]=1
img现在就是一个圆啦
查看全部
Suppose you have a matrix M whose (i,j)-th element equals
M_ij = 2*i + 3*j
One way to define this matrix would be
i, j = np.indices((2,3))
M = 2*i + 3*j
which yields
array([[0, 3, 6],
[2, 5, 8]])
In other words, np.indices returns arrays which can be used as indices. The elements in i indicate the row index:
In [12]: i
Out[12]:
array([[0, 0, 0],
[1, 1, 1]])
The elements in j indicate the column index:
In [13]: j
Out[13]:
array([[0, 1, 2],
[0, 1, 2]])
上面是Stack Overflow的解释。 翻译一下:
np.indices((2,3))
返回的是一个行列的索引,然后可以用这个索引快速的创建二维数据。
比如我要画一个圆:
img = np.zeros((400,400))
ir,ic = np.indices(img.shape)
circle = (ir-135)**2+(ic-150)**2 < 30**2 # 半径30,圆心在135,150
img[circle]=1
img现在就是一个圆啦
nunpy中的std标准差是样本差吗
李魔佛 发表了文章 • 0 个评论 • 1345 次浏览 • 2019-07-01 10:08
# 测试一下那个方差
x=[1,2,3,4,5,6,7,8,9,10]
X = np.array(x)
X.mean()
5.5
X.std() # 标准差
2.8722813232690143
手工计算一下:
def my_fangca(X):
l=len(X)
mean=X.mean()
sum_ = 0
sum_std=0
for i in X:
sum_+=(i-mean)**2
var_=sum_/l
std_=(sum_/(l))**0.5
return var_,std_
result = my_fangca(X)
得到的result
(8.25, 2.8722813232690143)
说明numpy的std是标准差,不是样本差 查看全部
# 测试一下那个方差X.mean()
x=[1,2,3,4,5,6,7,8,9,10]
X = np.array(x)
5.5
X.std() # 标准差
2.8722813232690143
手工计算一下:
def my_fangca(X):
l=len(X)
mean=X.mean()
sum_ = 0
sum_std=0
for i in X:
sum_+=(i-mean)**2
var_=sum_/l
std_=(sum_/(l))**0.5
return var_,std_
result = my_fangca(X)
得到的result
(8.25, 2.8722813232690143)
说明numpy的std是标准差,不是样本差
修改easytrader国金证券的默认启动路径
李魔佛 发表了文章 • 0 个评论 • 1685 次浏览 • 2019-06-17 10:23
pywinauto.application.AppStartError: Could not create the process "C:\全能行证券交易终端\xiadan.exe"
Error returned by CreateProcess: (2, 'CreateProcess', '系统找不到指定的文件。')
看了配置文件,也是没有具体的参数可以修改,只好修改源代码。
别听到改源代码就害怕,只是需要改一行就可以了。
找到文件:
site-package\easytrader\config\client.py
找过这一行:
class GJ(CommonConfig):
DEFAULT_EXE_PATH = "C:\\Tool\\xiadan.exe"只要修改上面的路径就可以了。注意用双斜杠。
查看全部
pywinauto.application.AppStartError: Could not create the process "C:\全能行证券交易终端\xiadan.exe"
Error returned by CreateProcess: (2, 'CreateProcess', '系统找不到指定的文件。')
看了配置文件,也是没有具体的参数可以修改,只好修改源代码。
别听到改源代码就害怕,只是需要改一行就可以了。
找到文件:
site-package\easytrader\config\client.py
找过这一行:
class GJ(CommonConfig):只要修改上面的路径就可以了。注意用双斜杠。
DEFAULT_EXE_PATH = "C:\\Tool\\xiadan.exe"
numpy flatten函数的用法
李魔佛 发表了文章 • 0 个评论 • 2022 次浏览 • 2019-04-30 10:01
例子:
x=np.array([[1,2,3,4],[5,6,7,8]])x
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
然后对x进行flatten操作
x.flatten()
得到的数据:
array([1, 2, 3, 4, 5, 6, 7, 8])
你也可以指定展平的轴,设定axis就可以了. 查看全部
把数据展平,无论多少维的数据,变为1维
例子:
x=np.array([[1,2,3,4],[5,6,7,8]])x
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
然后对x进行flatten操作
x.flatten()
得到的数据:
array([1, 2, 3, 4, 5, 6, 7, 8])
你也可以指定展平的轴,设定axis就可以了.
发现numpy一个很坑的问题,要一定级别的高手才能发现问题
李魔佛 发表了文章 • 0 个评论 • 1925 次浏览 • 2019-04-30 00:04
y=X0**2+X1**2 # **2 是平方def function_2(x):
return x[0]**2+x[1]**2
下面是计算y的偏导数,分布计算X0和X1的偏导def numerical_gradient(f,x):
grad = np.zeros_like(x)
h=1e-4
for idx in range(x.size):
temp_v = x[idx]
x[idx]=temp_v+h
f1=f(x)
print(x,f1)
x[idx]=temp_v-h
f2=f(x)
print(x,f2)
ret = (f1-f2)/(2*h)
print(ret)
x[idx]=temp_v
grad[idx]=ret
return grad
然后调用numerical_gradient(function_2,np.array([3,4]))
计算的是二元一次方程 y=X0**2+X1**2 在点(3,4)的偏导的值
得到的是什么结果?
为什么会得到这样的结果?
小白一般要花点时间才能找到原因。
查看全部
y=X0**2+X1**2 # **2 是平方
def function_2(x):
return x[0]**2+x[1]**2
下面是计算y的偏导数,分布计算X0和X1的偏导
def numerical_gradient(f,x):
grad = np.zeros_like(x)
h=1e-4
for idx in range(x.size):
temp_v = x[idx]
x[idx]=temp_v+h
f1=f(x)
print(x,f1)
x[idx]=temp_v-h
f2=f(x)
print(x,f2)
ret = (f1-f2)/(2*h)
print(ret)
x[idx]=temp_v
grad[idx]=ret
return grad
然后调用
numerical_gradient(function_2,np.array([3,4]))
计算的是二元一次方程 y=X0**2+X1**2 在点(3,4)的偏导的值
得到的是什么结果?
为什么会得到这样的结果?
小白一般要花点时间才能找到原因。
numpy和dataframe轴的含义,axis为负数的含义
李魔佛 发表了文章 • 0 个评论 • 2057 次浏览 • 2019-04-28 14:22
a=np.array([[[1,2],[3,4]],[[11,12],[13,14]]])
a
array([[[ 1, 2],
[ 3, 4]],
[[11, 12],
[13, 14]]])
a有3个中括号,那么就有3条轴,从0开始到2,分别是axis=0,1,2
那么我要对a进行求和,分别用axis=0,1,2进行运行。
a.sum(axis=0)得到:
array([[12, 14],
[16, 18]])意思是去掉一个中括号,然后运行。
同理:
a.sum(axis=1)对a去掉2个中括号,然后运行。
得到:
array([[ 4, 6],
[24, 26]])那么对a.sum(axis=2)的结果呢?读者可以自己上机去尝试吧。
而轴的负数,axis=-3和axis=0的意思是一样的,对于有3层轴的数组来说的话。
a.sum(axis=-3)
array([[12, 14],
[16, 18]])
查看全部
a=np.array([[[1,2],[3,4]],[[11,12],[13,14]]])
a
array([[[ 1, 2],
[ 3, 4]],
[[11, 12],
[13, 14]]])
a有3个中括号,那么就有3条轴,从0开始到2,分别是axis=0,1,2
那么我要对a进行求和,分别用axis=0,1,2进行运行。
a.sum(axis=0)得到:
array([[12, 14],意思是去掉一个中括号,然后运行。
[16, 18]])
同理:
a.sum(axis=1)对a去掉2个中括号,然后运行。
得到:
array([[ 4, 6],那么对a.sum(axis=2)的结果呢?读者可以自己上机去尝试吧。
[24, 26]])
而轴的负数,axis=-3和axis=0的意思是一样的,对于有3层轴的数组来说的话。
a.sum(axis=-3)
array([[12, 14],
[16, 18]])
np.nonzero()的用法【numpy小白】
李魔佛 发表了文章 • 0 个评论 • 2752 次浏览 • 2019-04-28 10:16
返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值。
比如:
n1=np.array([0,1,0,0,0,0,1,0,0,0,0,0,0,1])
n1.nonzero()
返回的是:
(array([ 1, 6, 13], dtype=int64),)注意上面是一个yu元组
要获取里面的值,需要用 n1.nonzero()[0] 来获取。
原创文章
转载请注明出处:
http://30daydo.com/article/466
查看全部
返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值。
比如:
n1=np.array([0,1,0,0,0,0,1,0,0,0,0,0,0,1])
n1.nonzero()
返回的是:
(array([ 1, 6, 13], dtype=int64),)
注意上面是一个yu元组要获取里面的值,需要用 n1.nonzero()[0] 来获取。
原创文章
转载请注明出处:
http://30daydo.com/article/466
ndarray和array的区别【numpy小白】
李魔佛 发表了文章 • 0 个评论 • 7269 次浏览 • 2019-04-28 10:11
原创文章
转载请注明出处:
http://30daydo.com/article/465
查看全部
np.array([1,2,3,4])
上面代码创建了一个对象,这个对象就是ndarray。 所以ndarray是一个类对象象,而array是一个方法。原创文章
转载请注明出处:
http://30daydo.com/article/465
【手把手教你】量价关系分析与Python实现
Python金融量化 发表了文章 • 3 个评论 • 3065 次浏览 • 2019-04-01 17:15
引言
成交量是股票市场的温度计,许多股票的疯狂上涨并非基本面发生了实质性的变化,而是短期筹码和资金供求关系造成的。量价关系分析法是一种将价格走势与成交量变化相结合的研究方法,正所谓,大军未动,粮草先行。成交量一直被看为是股票市场的“粮草”,成交量的变化是股价变化的前兆。因此,成交量是分析判断市场行情,并作出投资决策时的重要依据,也是各种技术分析指标应用时不可或缺的参照。
本文延续“手把手教你使用Python的TA-Lib”系列,着重介绍交易量指标(Volume Indicators)及其运用。【手把手教你】股市技术分析利器之TA-Lib(一)主要探讨了重叠指标的相关原理与Python实现,【手把手教你】股市技术分析利器之TA-Lib(二)则着重介绍了TA-Lib中强大的数学运算、数学变换、统计函数、价格变换、周期指标和波动率指标函数及其应用实例。TA-Lib的安装使用可查看以前推文。
01
A/D Line 累积派发线
Chaikin Accumulation/Distribution Line (AD),是Marc Chaikin提出的用来平衡交易量的指标,以当日收盘价、最高价和最低价来估算一段时间内该股票累积的资金流量, 用来确定潜在的趋势以及预测趋势反转。
函数名:AD
调用格式:ta.AD(high,low,close,volume)
计算方法: AD=前日AD值+(多空对比*成交量)
多空对比=((收盘价-最低价)-(最高价-收盘价))/(最高价-最低价);注意:当最高价等于最低价时,多空对比 = (收盘价 / 昨收盘) - 1
运用要点:
AD测量资金流向,AD向上表明多方占优势,反之表明空方占优势;
AD与价格的背离可视为买卖信号:底背离考虑买入,顶背离考虑卖出;
AD指标无需设置参数,但在应用时,可结合均线、MACD、KDJ等指标进行分析;
AD指标忽略了缺口的影响,有时无法真实反映价格与成交量的关系。
02
A/D Oscillator 震荡指标
震荡指标是计算长短周期的AD差,将资金流动情况与价格行为相对比,用来研判市场中资金流入和流出的情况。
函数名:ADOSC
调用格式:ta. ADOSC(high,low,close,volume,
fastperiod=3,slowperiod=10)
计算方法:fastperiod AD - slowperiod AD,AD的计算同上。
运用要点:
交易信号是背离:看涨背离做多,看跌背离做空;
股价与90天移动平均结合,与其他指标结合;
由正变负卖出,由负变正买进。
03
OBV - 能量潮
全称为 On Balance Volume, 由 Joe Granville 提出,通过统计成交量变动的趋势推测股价趋势。
函数名:OBV
调用格式:ta.OBV(close, volume)
计算公式:以某日为基期,逐日累计每日股票总成交量,若隔日指数或股票上涨,则基期OBV加上本日成交量为本日OBV。隔日指数或股票下跌, 则基期OBV减去本日成交量为本日OBV。
研判:
以“N”字型为波动单位,一浪高于一浪称“上升潮”,下跌称“跌潮”;
上升潮买进,跌潮卖出;
须配合K线图、股价走势和其他指标。
04
应用实例代码
#先引入后面可能用到的包(package)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
#引入TA-Lib库
import talib as ta
#获取交易数据函数,这里使用tushare的老接口,比较方便
import tushare as ts
def get_data(code,start='2018-11-01',end='2019-03-26'):
df=ts.get_k_data(code,start,end)
df.index=pd.to_datetime(df.date)
df=df.sort_index()
return df[['open','close','high','low','volume']]
#获取当前交易是所有股票代码和名字
basics=ts.get_stock_basics()
print(len(basics))
#basics.head()
3602
index={'上证综指': 'sh','深证成指': 'sz','沪深300': 'hs300',
'创业板指': 'cyb', '上证50': 'sz50','中小板指': 'zxb'}
#将当前交易的股票和常用指数代码和名称写入字典,方便调用
stock=dict(zip(basics.name,basics.index))
stocks=dict(stock,**index)
计算交易量指标并可视化
#使用matplotlib画k线图以及
import matplotlib.patches as patches
def plot_line(name):
code=stocks[name]
data=get_data(code)
fig = plt.figure(figsize=(12,5))
ax1 = fig.add_axes([0, 1, 1, 1])
ax1.set_title(name+"K线图与交易量指标", fontsize=15)
ax1.set_xlim(-1, len(data)+1)
for i in range(len(data)):
close_price,open_price = data.iloc[i, 1], data.iloc[i, 0]
high_price, low_price = data.iloc[i,2], data.iloc[i, 3]
trade_date = data.index[i]
if close_price > open_price:#画阳线
ax1.add_patch(patches.Rectangle((i-0.2, open_price), 0.4, close_price-open_price, fill=False, color='r'))
ax1.plot([i, i], [low_price, open_price], 'r')
ax1.plot([i, i], [close_price, high_price], 'r')
else:#画阴线
ax1.add_patch(patches.Rectangle((i-0.2, open_price), 0.4, close_price-open_price, color='g'))
ax1.plot([i, i], [low_price, high_price], color='g')
ax1.set_title("Price", fontsize=15, loc='left', color='r')
#设置x轴标签
ax1.set_xticks(range(0,len(data),5))#位置
ax1.set_xticklabels([(data.index[i]).strftime('%Y-%m-%d') for i in ax1.get_xticks()] , rotation=20)
high, low, close, volume = np.array(data['high']),np.array(data['low']),np.array(data['close']),np.array(data['volume'])
#计算AD线
AD = ta.AD(high, low, close, volume)
#计算ADOSC线
ADOSC = ta.ADOSC(high,low, close, volume, fastperiod=3, slowperiod=10)
#计算OBC线
OBV = ta.OBV(close, volume)
ax2 = ax1.twinx()
ax2.plot(AD, color='r', linewidth=2, label='AD')
ax2.plot(ADOSC, color='b', linewidth=2, label='ADOSC')
ax2.plot(OBV, color='y', linewidth=2, label='OBV')
ax2.legend(loc=0)
plot_line('东方通信')plot_line('上证综指')plot_line('创业板指')plot_line('中国平安')最后,在万矿上使用AD线进行了历史回测,作为演示例子,这里只对东方通信和中国平安股票进行了回测,期间为2018年1月1日至2019年3月25日。从AD线单一指标回测来看,在市场反弹或形成向上趋势时跑赢市场,但是最大回撤也比较大,如东方通信达到43.2%,当然这与回测期间和标的选择有很大的关系。这里只是作为演示例子,深入研究还得待结合其他指标。
东方通信AD线回测结果:
中国平安AD线回测结果:
结语
价量分析系统属于技术分析,而技术分析是股票分析的温度计。温度计无法预测未来的准确温度,更不可能决定温度。因此,技术分析只是告诉你发生了什么,但不能预测未来会发生什么。不要过于依赖技术指标提供的信号,市场总是充满突发性的事件,交易者情绪波动较大,因此股价并不是总是沿着规律运行。在使用量价关系时,不仅要分析量价关系中量的变化对价的影响,还应该分析量变化的原因,更应该知道这些变化之后交易者的情绪或行为,只有这样才能真正体会量价关系的精髓,提高自己预判的准确率。 查看全部
引言
成交量是股票市场的温度计,许多股票的疯狂上涨并非基本面发生了实质性的变化,而是短期筹码和资金供求关系造成的。量价关系分析法是一种将价格走势与成交量变化相结合的研究方法,正所谓,大军未动,粮草先行。成交量一直被看为是股票市场的“粮草”,成交量的变化是股价变化的前兆。因此,成交量是分析判断市场行情,并作出投资决策时的重要依据,也是各种技术分析指标应用时不可或缺的参照。
本文延续“手把手教你使用Python的TA-Lib”系列,着重介绍交易量指标(Volume Indicators)及其运用。【手把手教你】股市技术分析利器之TA-Lib(一)主要探讨了重叠指标的相关原理与Python实现,【手把手教你】股市技术分析利器之TA-Lib(二)则着重介绍了TA-Lib中强大的数学运算、数学变换、统计函数、价格变换、周期指标和波动率指标函数及其应用实例。TA-Lib的安装使用可查看以前推文。
01
A/D Line 累积派发线
Chaikin Accumulation/Distribution Line (AD),是Marc Chaikin提出的用来平衡交易量的指标,以当日收盘价、最高价和最低价来估算一段时间内该股票累积的资金流量, 用来确定潜在的趋势以及预测趋势反转。
函数名:AD
调用格式:ta.AD(high,low,close,volume)
计算方法: AD=前日AD值+(多空对比*成交量)
多空对比=((收盘价-最低价)-(最高价-收盘价))/(最高价-最低价);注意:当最高价等于最低价时,多空对比 = (收盘价 / 昨收盘) - 1
运用要点:
AD测量资金流向,AD向上表明多方占优势,反之表明空方占优势;
AD与价格的背离可视为买卖信号:底背离考虑买入,顶背离考虑卖出;
AD指标无需设置参数,但在应用时,可结合均线、MACD、KDJ等指标进行分析;
AD指标忽略了缺口的影响,有时无法真实反映价格与成交量的关系。
02
A/D Oscillator 震荡指标
震荡指标是计算长短周期的AD差,将资金流动情况与价格行为相对比,用来研判市场中资金流入和流出的情况。
函数名:ADOSC
调用格式:ta. ADOSC(high,low,close,volume,
fastperiod=3,slowperiod=10)
计算方法:fastperiod AD - slowperiod AD,AD的计算同上。
运用要点:
交易信号是背离:看涨背离做多,看跌背离做空;
股价与90天移动平均结合,与其他指标结合;
由正变负卖出,由负变正买进。
03
OBV - 能量潮
全称为 On Balance Volume, 由 Joe Granville 提出,通过统计成交量变动的趋势推测股价趋势。
函数名:OBV
调用格式:ta.OBV(close, volume)
计算公式:以某日为基期,逐日累计每日股票总成交量,若隔日指数或股票上涨,则基期OBV加上本日成交量为本日OBV。隔日指数或股票下跌, 则基期OBV减去本日成交量为本日OBV。
研判:
以“N”字型为波动单位,一浪高于一浪称“上升潮”,下跌称“跌潮”;
上升潮买进,跌潮卖出;
须配合K线图、股价走势和其他指标。
04
应用实例代码
#先引入后面可能用到的包(package)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
#引入TA-Lib库
import talib as ta
#获取交易数据函数,这里使用tushare的老接口,比较方便
import tushare as ts
def get_data(code,start='2018-11-01',end='2019-03-26'):
df=ts.get_k_data(code,start,end)
df.index=pd.to_datetime(df.date)
df=df.sort_index()
return df[['open','close','high','low','volume']]
#获取当前交易是所有股票代码和名字
basics=ts.get_stock_basics()
print(len(basics))
#basics.head()
3602
index={'上证综指': 'sh','深证成指': 'sz','沪深300': 'hs300',
'创业板指': 'cyb', '上证50': 'sz50','中小板指': 'zxb'}
#将当前交易的股票和常用指数代码和名称写入字典,方便调用
stock=dict(zip(basics.name,basics.index))
stocks=dict(stock,**index)
计算交易量指标并可视化
#使用matplotlib画k线图以及
import matplotlib.patches as patches
def plot_line(name):
code=stocks[name]
data=get_data(code)
fig = plt.figure(figsize=(12,5))
ax1 = fig.add_axes([0, 1, 1, 1])
ax1.set_title(name+"K线图与交易量指标", fontsize=15)
ax1.set_xlim(-1, len(data)+1)
for i in range(len(data)):
close_price,open_price = data.iloc[i, 1], data.iloc[i, 0]
high_price, low_price = data.iloc[i,2], data.iloc[i, 3]
trade_date = data.index[i]
if close_price > open_price:#画阳线
ax1.add_patch(patches.Rectangle((i-0.2, open_price), 0.4, close_price-open_price, fill=False, color='r'))
ax1.plot([i, i], [low_price, open_price], 'r')
ax1.plot([i, i], [close_price, high_price], 'r')
else:#画阴线
ax1.add_patch(patches.Rectangle((i-0.2, open_price), 0.4, close_price-open_price, color='g'))
ax1.plot([i, i], [low_price, high_price], color='g')
ax1.set_title("Price", fontsize=15, loc='left', color='r')
#设置x轴标签
ax1.set_xticks(range(0,len(data),5))#位置
ax1.set_xticklabels([(data.index[i]).strftime('%Y-%m-%d') for i in ax1.get_xticks()] , rotation=20)
high, low, close, volume = np.array(data['high']),np.array(data['low']),np.array(data['close']),np.array(data['volume'])
#计算AD线
AD = ta.AD(high, low, close, volume)
#计算ADOSC线
ADOSC = ta.ADOSC(high,low, close, volume, fastperiod=3, slowperiod=10)
#计算OBC线
OBV = ta.OBV(close, volume)
ax2 = ax1.twinx()
ax2.plot(AD, color='r', linewidth=2, label='AD')
ax2.plot(ADOSC, color='b', linewidth=2, label='ADOSC')
ax2.plot(OBV, color='y', linewidth=2, label='OBV')
ax2.legend(loc=0)
plot_line('东方通信')plot_line('上证综指')plot_line('创业板指')plot_line('中国平安')最后,在万矿上使用AD线进行了历史回测,作为演示例子,这里只对东方通信和中国平安股票进行了回测,期间为2018年1月1日至2019年3月25日。从AD线单一指标回测来看,在市场反弹或形成向上趋势时跑赢市场,但是最大回撤也比较大,如东方通信达到43.2%,当然这与回测期间和标的选择有很大的关系。这里只是作为演示例子,深入研究还得待结合其他指标。
东方通信AD线回测结果:
中国平安AD线回测结果:
结语
价量分析系统属于技术分析,而技术分析是股票分析的温度计。温度计无法预测未来的准确温度,更不可能决定温度。因此,技术分析只是告诉你发生了什么,但不能预测未来会发生什么。不要过于依赖技术指标提供的信号,市场总是充满突发性的事件,交易者情绪波动较大,因此股价并不是总是沿着规律运行。在使用量价关系时,不仅要分析量价关系中量的变化对价的影响,还应该分析量变化的原因,更应该知道这些变化之后交易者的情绪或行为,只有这样才能真正体会量价关系的精髓,提高自己预判的准确率。
【2019-03-16】市场热度预测 - 通过检测某个论坛(集思录)的热度衡量
李魔佛 发表了文章 • 4 个评论 • 1625 次浏览 • 2019-03-16 18:03
首先得有数据,有了数据就可以慢慢分析了。
首先是集思录,把数据进行重新采用,按照周采样,然后绘图:
看到这张图后,瞬间也是震惊了,我觉得应该要逃离了。当然不是马上撤离,但是应该时间不会太久,1-2周就应该空仓了。
感觉这个是不错逃顶抄底指标呀。
文章中的数据每周更新,敬请留意。
原创文章
转载请注明出处:
http://30daydo.com/article/428
查看全部
首先得有数据,有了数据就可以慢慢分析了。
首先是集思录,把数据进行重新采用,按照周采样,然后绘图:
看到这张图后,瞬间也是震惊了,我觉得应该要逃离了。当然不是马上撤离,但是应该时间不会太久,1-2周就应该空仓了。
感觉这个是不错逃顶抄底指标呀。
文章中的数据每周更新,敬请留意。
原创文章
转载请注明出处:
http://30daydo.com/article/428