Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zengbin93
czsc
提交
53f438b7
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,体验更适合开发者的 AI 搜索 >>
提交
53f438b7
编写于
9月 27, 2020
作者:
Z
zengbin93
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
0.5.6 新增cobra.utils
上级
10bee8c2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
134 addition
and
0 deletion
+134
-0
czsc/cobra/utils.py
czsc/cobra/utils.py
+93
-0
test/test_cobra_utils.py
test/test_cobra_utils.py
+41
-0
未找到文件。
czsc/cobra/utils.py
0 → 100644
浏览文件 @
53f438b7
# coding: utf-8
import
numpy
as
np
import
pandas
as
pd
from
czsc.ta
import
KDJ
import
traceback
from
typing
import
List
,
Union
def
down_cross_count
(
x1
:
Union
[
List
,
np
.
array
],
x2
:
Union
[
List
,
np
.
array
]):
"""输入两个序列,计算 x1 下穿 x2 的次数
:param x1: list
:param x2: list
:return: int
example:
========
>>> x1 = [1, 1, 3, 4, 5, 12, 9, 8]
>>> x2 = [2, 2, 1, 5, 8, 9, 10, 10]
>>> print("x1 下穿 x2 的次数:{}".format(down_cross_count(x1, x2)))
>>> print("x1 上穿 x2 的次数:{}".format(down_cross_count(x2, x1)))
"""
x
=
np
.
array
(
x1
)
<
np
.
array
(
x2
)
num
=
0
for
i
in
range
(
len
(
x
)
-
1
):
b1
,
b2
=
x
[
i
],
x
[
i
+
1
]
if
b2
and
b1
!=
b2
:
num
+=
1
return
num
def
kdj_gold_cross
(
kline
:
Union
[
List
[
dict
],
pd
.
DataFrame
],
just
:
bool
=
True
):
"""输入K线,判断KDJ是否金叉
:param kline: pd.DataFrame
:param just: bool
是否是刚刚形成
:return: bool
"""
try
:
if
isinstance
(
kline
,
list
):
close
=
[
x
[
'close'
]
for
x
in
kline
]
high
=
[
x
[
'high'
]
for
x
in
kline
]
low
=
[
x
[
'low'
]
for
x
in
kline
]
else
:
close
=
kline
.
close
.
values
high
=
kline
.
high
.
values
low
=
kline
.
low
.
values
k
,
d
,
j
=
KDJ
(
close
=
close
,
high
=
high
,
low
=
low
)
if
not
just
and
j
[
-
1
]
>
k
[
-
1
]
>
d
[
-
1
]:
return
True
elif
just
and
j
[
-
1
]
>
k
[
-
1
]
>
d
[
-
1
]
and
not
(
j
[
-
2
]
>
k
[
-
2
]
>
d
[
-
2
]):
return
True
else
:
return
False
except
:
print
(
"{}: run error kdj_gold_cross"
.
format
(
kline
.
iloc
[
0
][
'symbol'
]))
traceback
.
print_exc
()
return
False
def
kdj_dead_cross
(
kline
:
Union
[
List
[
dict
],
pd
.
DataFrame
],
just
:
bool
=
True
):
"""输入K线,判断KDJ是否死叉
:param kline: pd.DataFrame
:param just: bool
是否是刚刚形成
:return: bool
"""
try
:
if
isinstance
(
kline
,
list
):
close
=
[
x
[
'close'
]
for
x
in
kline
]
high
=
[
x
[
'high'
]
for
x
in
kline
]
low
=
[
x
[
'low'
]
for
x
in
kline
]
else
:
close
=
kline
.
close
.
values
high
=
kline
.
high
.
values
low
=
kline
.
low
.
values
k
,
d
,
j
=
KDJ
(
close
=
close
,
high
=
high
,
low
=
low
)
if
not
just
and
j
[
-
1
]
<
k
[
-
1
]
<
d
[
-
1
]:
return
True
elif
just
and
j
[
-
1
]
<
k
[
-
1
]
<
d
[
-
1
]
and
not
(
j
[
-
2
]
<
k
[
-
2
]
<
d
[
-
2
]):
return
True
else
:
return
False
except
:
print
(
"{}: run error kdj_dead_cross"
.
format
(
kline
.
iloc
[
0
][
'symbol'
]))
traceback
.
print_exc
()
return
False
test/test_cobra_utils.py
0 → 100644
浏览文件 @
53f438b7
# coding: utf-8
import
sys
import
warnings
sys
.
path
.
insert
(
0
,
'.'
)
sys
.
path
.
insert
(
0
,
'..'
)
import
os
import
numpy
as
np
import
pandas
as
pd
import
czsc
from
czsc.cobra.utils
import
down_cross_count
,
kdj_gold_cross
,
kdj_dead_cross
warnings
.
warn
(
"czsc version is {}"
.
format
(
czsc
.
__version__
))
# cur_path = os.path.split(os.path.realpath(__file__))[0]
cur_path
=
"./test"
def
test_kdj_cross
():
file_kline
=
os
.
path
.
join
(
cur_path
,
"data/000001.SH_D.csv"
)
kline
=
pd
.
read_csv
(
file_kline
,
encoding
=
"utf-8"
)
bars
=
kline
.
to_dict
(
"records"
)
assert
not
kdj_gold_cross
(
kline
,
just
=
False
)
assert
not
kdj_gold_cross
(
bars
,
just
=
False
)
assert
kdj_dead_cross
(
kline
,
just
=
False
)
assert
kdj_dead_cross
(
bars
,
just
=
False
)
assert
not
kdj_dead_cross
(
kline
,
just
=
True
)
def
test_cross_count
():
x1
=
[
1
,
1
,
3
,
4
,
5
,
12
,
9
,
8
]
x2
=
[
2
,
2
,
1
,
5
,
8
,
9
,
10
,
10
]
assert
down_cross_count
(
x1
,
x2
)
==
2
assert
down_cross_count
(
np
.
array
(
x1
),
np
.
array
(
x2
))
==
2
assert
down_cross_count
(
x2
,
x1
)
==
2
assert
down_cross_count
(
np
.
array
(
x2
),
np
.
array
(
x1
))
==
2
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录