提交 10bee8c2 编写于 作者: Z zengbin93

0.5.6 新增单因子分析

上级 9817a2e2
......@@ -5,13 +5,36 @@ from typing import List
def cal_nbar_percentile(k: dict, kn: List[dict], n: int) -> float:
"""计算 N 周期区间百分位
:param k: dict
信号出现时的 K 线
信号出现时的 K 线,如:
{'symbol': '000001.SH',
'dt': '2007-04-05 15:00:00',
'open': 3286.16,
'close': 3319.14,
'high': 3326.92,
'low': 3259.63,
'vol': 114528051.0}
:param kn: List[dict]
信号出现后的 N 根 K 线
信号出现后的 N 根 K 线,如:
[{'symbol': '000001.SH',
'dt': '2007-04-06 15:00:00',
'open': 3287.68,
'close': 3323.59,
'high': 3334.22,
'low': 3273.86,
'vol': 119644881.0},
{'symbol': '000001.SH',
'dt': '2007-04-09 15:00:00',
'open': 3333.42,
'close': 3398.95,
'high': 3399.51,
'low': 3333.26,
'vol': 137314104.0}]
:param n: int
周期数 N
:return: float
"""
assert len(kn) == n, "计算 {} 周期区间百分位时传入的 kn 数量为 {}".format(n, len(kn))
......@@ -28,13 +51,36 @@ def cal_nbar_percentile(k: dict, kn: List[dict], n: int) -> float:
def cal_nbar_income(k: dict, kn: List[dict], n: int) -> float:
"""计算 N 周期区间收益
:param k: dict
信号出现时的 K 线
信号出现时的 K 线,如:
{'symbol': '000001.SH',
'dt': '2007-04-05 15:00:00',
'open': 3286.16,
'close': 3319.14,
'high': 3326.92,
'low': 3259.63,
'vol': 114528051.0}
:param kn: List[dict]
信号出现后的 N 根 K 线
信号出现后的 N 根 K 线,如:
[{'symbol': '000001.SH',
'dt': '2007-04-06 15:00:00',
'open': 3287.68,
'close': 3323.59,
'high': 3334.22,
'low': 3273.86,
'vol': 119644881.0},
{'symbol': '000001.SH',
'dt': '2007-04-09 15:00:00',
'open': 3333.42,
'close': 3398.95,
'high': 3399.51,
'low': 3333.26,
'vol': 137314104.0}]
:param n: int
周期数 N
:return: float
"""
assert len(kn) == n, "计算 {} 周期区间收益时传入的 kn 数量为 {}".format(n, len(kn))
......
# coding: utf-8
import sys
import warnings
sys.path.insert(0, '.')
sys.path.insert(0, '..')
import os
import pandas as pd
import czsc
from czsc.cobra.factor_analyst import cal_nbar_income, cal_nbar_percentile
warnings.warn("czsc version is {}".format(czsc.__version__))
cur_path = os.path.split(os.path.realpath(__file__))[0]
# cur_path = "./test"
def test_nbar():
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")
i = 100
n = 10
k1 = bars[i]
kn = bars[i+1: i+n+1]
ni = cal_nbar_income(k1, kn, n)
assert ni == 3.91
np = cal_nbar_percentile(k1, kn, n)
assert np == 12.94
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册