Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zengbin93
czsc
提交
ebffc9fe
C
czsc
项目概览
zengbin93
/
czsc
通知
23
Star
2
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
czsc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ebffc9fe
编写于
2月 02, 2020
作者:
Z
zengbin93
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增 examples
上级
49e7952a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
211 addition
and
1 deletion
+211
-1
chan/__init__.py
chan/__init__.py
+1
-1
examples/combine_with_goldminer.py
examples/combine_with_goldminer.py
+89
-0
examples/combine_with_tushare.py
examples/combine_with_tushare.py
+121
-0
未找到文件。
chan/__init__.py
浏览文件 @
ebffc9fe
...
...
@@ -3,7 +3,7 @@
from
.analyze
import
KlineAnalyze
,
SolidAnalyze
__version__
=
"0.1.
1
"
__version__
=
"0.1.
2
"
__author__
=
"zengbin93"
__email__
=
"zeng_bin8888@163.com"
...
...
examples/combine_with_goldminer.py
0 → 100644
浏览文件 @
ebffc9fe
# coding: utf-8
"""
结合掘金的数据使用 chan 进行缠论技术分析
author: zengbin93
email: zeng_bin8888@163.com
date: 2020-02-02
========================================================================================================================
"""
from
gm.api
import
*
from
datetime
import
datetime
from
chan
import
KlineAnalyze
,
SolidAnalyze
# 在这里设置你的掘金token,用于获取数据
set_token
(
"your gm token"
)
def
get_kline
(
symbol
,
end_date
=
None
,
freq
=
'1d'
,
k_count
=
5000
):
"""从掘金获取历史K线数据
参考: https://www.myquant.cn/docs/python/python_select_api#6fb030ec42984aff
:param symbol:
:param end_date: str
交易日期,如 2019-12-31
:param freq: str
K线级别,如 1d
:param k_count: int
:return: pd.DataFrame
"""
if
not
end_date
:
end_date
=
datetime
.
now
()
df
=
history_n
(
symbol
=
symbol
,
frequency
=
freq
,
end_time
=
end_date
,
fields
=
'symbol,eob,open,close,high,low,volume'
,
count
=
k_count
,
df
=
True
)
if
freq
==
'1d'
:
df
=
df
.
iloc
[:
-
1
]
df
[
'dt'
]
=
df
[
'eob'
]
df
[
'vol'
]
=
df
[
'volume'
]
df
=
df
[[
'symbol'
,
'dt'
,
'open'
,
'close'
,
'high'
,
'low'
,
'vol'
]]
df
.
sort_values
(
'dt'
,
inplace
=
True
,
ascending
=
True
)
df
[
'dt'
]
=
df
.
dt
.
apply
(
lambda
x
:
x
.
strftime
(
r
"%Y-%m-%d %H:%M:%S"
))
df
.
reset_index
(
drop
=
True
,
inplace
=
True
)
for
col
in
[
'open'
,
'close'
,
'high'
,
'low'
]:
df
[
col
]
=
df
[
col
].
apply
(
round
,
args
=
(
2
,))
return
df
def
get_klines
(
symbol
,
end_date
=
None
,
freqs
=
'60s,300s,1800s,1d'
,
k_count
=
5000
):
"""获取不同级别K线"""
klines
=
dict
()
freqs
=
freqs
.
split
(
","
)
for
freq
in
freqs
:
df
=
get_kline
(
symbol
,
end_date
,
freq
,
k_count
)
klines
[
freq
]
=
df
return
klines
def
use_kline_analyze
():
print
(
'='
*
100
,
'
\n
'
)
print
(
"KlineAnalyze 的使用方法:
\n
"
)
kline
=
get_kline
(
symbol
=
'SHSE.000300'
,
end_date
=
"2020-02-02"
)
ka
=
KlineAnalyze
(
kline
)
print
(
"线段:"
,
ka
.
xd
,
"
\n
"
)
print
(
"中枢:"
,
ka
.
zs
,
"
\n
"
)
def
use_solid_analyze
():
print
(
'='
*
100
,
'
\n
'
)
print
(
"SolidAnalyze 的使用方法:
\n
"
)
klines
=
get_klines
(
symbol
=
'SZSE.300455'
,
end_date
=
"2020-02-02"
)
sa
=
SolidAnalyze
(
klines
)
# 查看指定级别的三买
tb
=
sa
.
is_third_buy
(
'1800s'
)
print
(
"指定级别三买:"
,
tb
,
"
\n
"
)
# 查看多个级别的三买
tb
=
sa
.
check_third_buy
([
'60s'
,
'300s'
,
'1800s'
])
print
(
"多级别三买:"
,
tb
,
"
\n
"
)
if
__name__
==
'__main__'
:
use_kline_analyze
()
use_solid_analyze
()
examples/combine_with_tushare.py
0 → 100644
浏览文件 @
ebffc9fe
# coding: utf-8
"""
结合掘金的数据使用 chan 进行缠论技术分析
author: zengbin93
email: zeng_bin8888@163.com
date: 2020-02-02
========================================================================================================================
"""
import
tushare
as
ts
from
datetime
import
datetime
,
timedelta
from
chan
import
KlineAnalyze
,
SolidAnalyze
# 首次使用,需要在这里设置你的 tushare token,用于获取数据;在同一台机器上,tushare token 只需要设置一次
# ts.set_token("your tushare token")
def
_get_start_date
(
end_date
,
freq
):
end_date
=
datetime
.
strptime
(
end_date
,
'%Y%m%d'
)
if
freq
==
'1min'
:
start_date
=
end_date
-
timedelta
(
days
=
30
)
elif
freq
==
'5min'
:
start_date
=
end_date
-
timedelta
(
days
=
70
)
elif
freq
==
'30min'
:
start_date
=
end_date
-
timedelta
(
days
=
500
)
elif
freq
==
'D'
:
start_date
=
end_date
-
timedelta
(
weeks
=
500
)
elif
freq
==
'W'
:
start_date
=
end_date
-
timedelta
(
weeks
=
1000
)
else
:
raise
ValueError
(
"'freq' value error, current value is %s, "
"optional valid values are ['1min', '5min', '30min', "
"'D', 'W']"
%
freq
)
return
start_date
def
get_kline
(
ts_code
,
end_date
,
freq
=
'30min'
,
asset
=
'E'
):
"""获取指定级别的前复权K线
:param ts_code: str
股票代码,如 600122.SH
:param freq: str
K线级别,可选值 [1min, 5min, 15min, 30min, 60min, D, M, Y]
:param end_date: str
日期,如 20190610
:param asset: str
交易资产类型,可选值 E股票 I沪深指数 C数字货币 FT期货 FD基金 O期权 CB可转债(v1.2.39),默认E
:return: pd.DataFrame
columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
"""
start_date
=
_get_start_date
(
end_date
,
freq
)
start_date
=
start_date
.
date
().
__str__
().
replace
(
"-"
,
""
)
end_date
=
datetime
.
strptime
(
end_date
,
'%Y%m%d'
)
end_date
=
end_date
+
timedelta
(
days
=
1
)
end_date
=
end_date
.
date
().
__str__
().
replace
(
"-"
,
""
)
df
=
ts
.
pro_bar
(
ts_code
=
ts_code
,
freq
=
freq
,
start_date
=
start_date
,
end_date
=
end_date
,
adj
=
'qfq'
,
asset
=
asset
)
# 统一 k 线数据格式为 6 列,分别是 ["symbol", "dt", "open", "close", "high", "low", "vr"]
if
"min"
in
freq
:
df
.
rename
(
columns
=
{
'ts_code'
:
"symbol"
,
"trade_time"
:
"dt"
},
inplace
=
True
)
else
:
df
.
rename
(
columns
=
{
'ts_code'
:
"symbol"
,
"trade_date"
:
"dt"
},
inplace
=
True
)
df
.
drop_duplicates
(
subset
=
'dt'
,
keep
=
'first'
,
inplace
=
True
)
df
.
sort_values
(
'dt'
,
inplace
=
True
)
df
[
'dt'
]
=
df
.
dt
.
apply
(
str
)
if
freq
.
endswith
(
"min"
):
# 清理 9:30 的空数据
df
[
'not_start'
]
=
df
.
dt
.
apply
(
lambda
x
:
not
x
.
endswith
(
"09:30:00"
))
df
=
df
[
df
[
'not_start'
]]
df
.
reset_index
(
drop
=
True
,
inplace
=
True
)
k
=
df
[[
'symbol'
,
'dt'
,
'open'
,
'close'
,
'high'
,
'low'
,
'vol'
]]
for
col
in
[
'open'
,
'close'
,
'high'
,
'low'
]:
k
[
col
]
=
k
[
col
].
apply
(
round
,
args
=
(
2
,))
return
k
def
get_klines
(
ts_code
,
end_date
,
freqs
=
'1min,5min,30min,D'
,
asset
=
'E'
):
"""获取不同级别K线"""
klines
=
dict
()
freqs
=
freqs
.
split
(
","
)
for
freq
in
freqs
:
df
=
get_kline
(
ts_code
,
end_date
,
freq
=
freq
,
asset
=
asset
)
klines
[
freq
]
=
df
return
klines
def
use_kline_analyze
():
print
(
'='
*
100
,
'
\n
'
)
print
(
"KlineAnalyze 的使用方法:
\n
"
)
kline
=
get_kline
(
ts_code
=
"000300.SH"
,
end_date
=
"20200202"
,
freq
=
'D'
,
asset
=
"I"
)
ka
=
KlineAnalyze
(
kline
)
print
(
"线段:"
,
ka
.
xd
,
"
\n
"
)
print
(
"中枢:"
,
ka
.
zs
,
"
\n
"
)
def
use_solid_analyze
():
print
(
'='
*
100
,
'
\n
'
)
print
(
"SolidAnalyze 的使用方法:
\n
"
)
klines
=
get_klines
(
ts_code
=
"300455.SZ"
,
end_date
=
"20200202"
,
freqs
=
'1min,5min,30min,D'
,
asset
=
'E'
)
sa
=
SolidAnalyze
(
klines
)
# 查看指定级别的三买
tb
=
sa
.
is_third_buy
(
'30min'
)
print
(
"指定级别三买:"
,
tb
,
"
\n
"
)
# 查看多个级别的三买
tb
=
sa
.
check_third_buy
([
'1min'
,
'5min'
,
'30min'
,
"D"
])
print
(
"多级别三买:"
,
tb
,
"
\n
"
)
if
__name__
==
'__main__'
:
use_kline_analyze
()
use_solid_analyze
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录