Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zengbin93
czsc
提交
0978e173
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,发现更多精彩内容 >>
提交
0978e173
编写于
8月 07, 2019
作者:
Z
zengbin93
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
unify status
上级
1d3f11e4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
92 addition
and
40 deletion
+92
-40
chan/a/__init__.py
chan/a/__init__.py
+1
-1
chan/a/status.py
chan/a/status.py
+35
-33
chan/a/utils.py
chan/a/utils.py
+3
-0
chan/utils.py
chan/utils.py
+53
-6
未找到文件。
chan/a/__init__.py
浏览文件 @
0978e173
...
...
@@ -7,5 +7,5 @@
from
.daily_classfier
import
daily_classifier
from
.utils
import
get_kline
,
get_realtime_kline
from
.status
import
kline_status
,
share_status
,
index_status
from
.status
import
share_status
,
index_status
chan/a/status.py
浏览文件 @
0978e173
...
...
@@ -2,38 +2,39 @@
from
collections
import
OrderedDict
from
chan
import
a
from
chan.utils
import
preprocess
def
kline_status
(
ts_code
,
trade_date
,
freq
=
'D'
,
asset
=
"I"
):
kline
=
a
.
get_kline
(
ts_code
,
freq
=
freq
,
end_date
=
trade_date
,
asset
=
asset
,
indicators
=
(
'ma'
,
'macd'
))
# MACD 多空状态
last_raw
=
kline
.
iloc
[
-
1
]
if
last_raw
[
'diff'
]
<
0
and
last_raw
[
'dea'
]
<
0
:
macd_status
=
'空头行情'
elif
last_raw
[
'diff'
]
>
0
and
last_raw
[
'dea'
]
>
0
:
macd_status
=
'多头行情'
else
:
macd_status
=
'转折行情'
# 最近三根K线状态
pred
=
preprocess
(
kline
)
last_three
=
pred
.
iloc
[
-
3
:]
# 笔状态:最近三根 K 线的走势状态
if
min
(
last_three
[
'low'
])
==
last_three
.
iloc
[
-
1
][
'low'
]:
bi_status
=
"向下笔延伸中"
elif
min
(
last_three
[
'low'
])
==
last_three
.
iloc
[
-
2
][
'low'
]:
bi_status
=
"底分型构造中"
elif
max
(
last_three
[
'high'
])
==
last_three
.
iloc
[
-
1
][
'high'
]:
bi_status
=
"向上笔延伸中"
elif
max
(
last_three
[
'high'
])
==
last_three
.
iloc
[
-
2
][
'high'
]:
bi_status
=
"顶分型构造中"
else
:
raise
ValueError
(
"kline 数据出错"
)
return
OrderedDict
(
macd_status
=
macd_status
,
bi_status
=
bi_status
)
from
chan.utils
import
kline_status
#
# def kline_status(ts_code, trade_date, freq='D', asset="I"):
# kline = a.get_kline(ts_code, freq=freq, end_date=trade_date, asset=asset, indicators=('ma', 'macd'))
#
# # MACD 多空状态
# last_raw = kline.iloc[-1]
# if last_raw['diff'] < 0 and last_raw['dea'] < 0:
# macd_status = '空头行情'
# elif last_raw['diff'] > 0 and last_raw['dea'] > 0:
# macd_status = '多头行情'
# else:
# macd_status = '转折行情'
#
# # 最近三根K线状态
# pred = preprocess(kline)
# last_three = pred.iloc[-3:]
#
# # 笔状态:最近三根 K 线的走势状态
# if min(last_three['low']) == last_three.iloc[-1]['low']:
# bi_status = "向下笔延伸中"
# elif min(last_three['low']) == last_three.iloc[-2]['low']:
# bi_status = "底分型构造中"
# elif max(last_three['high']) == last_three.iloc[-1]['high']:
# bi_status = "向上笔延伸中"
# elif max(last_three['high']) == last_three.iloc[-2]['high']:
# bi_status = "顶分型构造中"
# else:
# raise ValueError("kline 数据出错")
#
# return OrderedDict(macd_status=macd_status, bi_status=bi_status)
#
def
_status
(
ts_code
,
trade_date
,
asset
=
"I"
):
...
...
@@ -41,7 +42,8 @@ def _status(ts_code, trade_date, asset="I"):
status
[
'上一交易日状态'
]
=
a
.
daily_classifier
(
ts_code
,
trade_date
,
asset
=
asset
)
for
freq
in
[
'30min'
,
'D'
,
'W'
]:
status
[
freq
]
=
kline_status
(
ts_code
,
trade_date
,
freq
=
freq
,
asset
=
asset
)
kline
=
a
.
get_kline
(
ts_code
,
freq
=
freq
,
end_date
=
trade_date
,
asset
=
asset
,
indicators
=
None
)
status
[
freq
]
=
kline_status
(
kline
)
status_msg
=
'%s(%s) :%s;'
%
(
ts_code
,
trade_date
,
status
[
'上一交易日状态'
])
status_msg
+=
"30分钟线%s,MACD呈现%s;"
%
(
status
[
'30min'
][
'bi_status'
],
status
[
'30min'
][
'macd_status'
])
...
...
chan/a/utils.py
浏览文件 @
0978e173
...
...
@@ -41,6 +41,9 @@ def get_kline(ts_code, end_date, start_date=None, freq='30min', asset='E', indic
>>> from chan.a.utils import get_kline
>>> get_kline(ts_code='600122.SH', start_date='20190601', end_date='20190610', freq='30min')
"""
if
indicators
is
None
:
indicators
=
[]
if
start_date
is
None
:
end_date
=
datetime
.
strptime
(
end_date
,
'%Y%m%d'
)
if
freq
==
'1min'
:
...
...
chan/utils.py
浏览文件 @
0978e173
...
...
@@ -12,7 +12,12 @@ class OrderedAttrDict(OrderedDict):
def
preprocess
(
kline
):
"""去除包含关系"""
"""去除包含关系
:param kline: pd.DataFrame
K线,columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
:return: pd.DataFrame
"""
kline
[
'high_m'
]
=
None
kline
[
'low_m'
]
=
None
...
...
@@ -75,7 +80,8 @@ def find_bi(kline):
2 - 无效分型
:param kline: pd.DataFrame
经过预处理,去除了包含关系的 K 线
经过预处理,去除了包含关系的 K 线,
columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
:return: kline: pd.DataFrame
"""
kline
[
'bi_fx'
]
=
None
...
...
@@ -127,8 +133,12 @@ def find_bi(kline):
def
find_xd
(
kline
):
"""线段查找。输入:确定了分型的 K 线;输出:加入线段查找结果的 K 线
"""
"""线段查找。输入:确定了分型的 K 线;输出:加入线段查找结果的 K 线
:param kline: pd.DataFrame
K线,columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
:return:
"""
# 找出所有可能的线段终点
gd1
=
kline
[
kline
[
'bi_mark'
]
==
0
].
iloc
[
0
]
gd2
=
kline
[
kline
[
'bi_mark'
]
==
2
].
iloc
[
0
]
...
...
@@ -172,7 +182,7 @@ def ma(kline, params=(5, 10, 20, 60, 120, 250)):
"""计算指定周期的若干 MA 均线
:param kline: pd.DataFrame
K线,
确保含有 close 列
K线,
columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
:param params: tuple
:return: pd.DataFrame
在原始数据中新增若干 MA 均线
...
...
@@ -188,7 +198,7 @@ def macd(kline):
"""计算 MACD 指标
:param kline: pd.DataFrame
K线,
确保含有 close 列
K线,
columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
:return: pd.DataFrame
在原始数据中新增 diff,dea,macd 三列
"""
...
...
@@ -209,7 +219,7 @@ def boll(kline):
"""计算 BOLL 指标
:param kline: pd.DataFrame
K线,
确保含有 close 列
K线,
columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
:return: pd.DataFrame
在原始数据中新增 BOLL 指标结果
"""
...
...
@@ -224,3 +234,40 @@ def boll(kline):
kline
[
'boll-bottom'
]
=
kline
[
'boll-bottom'
].
apply
(
round
,
args
=
(
4
,))
return
kline
def
kline_status
(
kline
):
"""计算 kline 的当下状态
:param kline: pd.DataFrame
K线,columns = ["symbol", "dt", "open", "close", "high", "low", "vol"]
:return: OrderedDict
"""
kline
=
ma
(
kline
)
kline
=
macd
(
kline
)
# MACD 多空状态
last_raw
=
kline
.
iloc
[
-
1
]
if
last_raw
[
'diff'
]
<
0
and
last_raw
[
'dea'
]
<
0
:
macd_status
=
'空头行情'
elif
last_raw
[
'diff'
]
>
0
and
last_raw
[
'dea'
]
>
0
:
macd_status
=
'多头行情'
else
:
macd_status
=
'转折行情'
# 最近三根K线状态
pred
=
preprocess
(
kline
)
last_three
=
pred
.
iloc
[
-
3
:]
# 笔状态:最近三根 K 线的走势状态
if
min
(
last_three
[
'low'
])
==
last_three
.
iloc
[
-
1
][
'low'
]:
bi_status
=
"向下笔延伸中"
elif
min
(
last_three
[
'low'
])
==
last_three
.
iloc
[
-
2
][
'low'
]:
bi_status
=
"底分型构造中"
elif
max
(
last_three
[
'high'
])
==
last_three
.
iloc
[
-
1
][
'high'
]:
bi_status
=
"向上笔延伸中"
elif
max
(
last_three
[
'high'
])
==
last_three
.
iloc
[
-
2
][
'high'
]:
bi_status
=
"顶分型构造中"
else
:
raise
ValueError
(
"kline 数据出错"
)
return
OrderedDict
(
macd_status
=
macd_status
,
bi_status
=
bi_status
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录