Source code for czsc.signals.coo

# -*- coding: utf-8 -*-
"""
author: zengbin93
email: zeng_bin8888@163.com
create_dt: 2022/11/10 23:14
describe: coo 是 cooperation 的缩写,作为前缀代表信号开源协作成员贡献的信号
"""
import numpy as np
from collections import OrderedDict
from czsc import CZSC, Signal


# 在这里可以定义自己的信号函数
# ----------------------------------------------------------------------------------------------------------------------

def __cal_td_seq(close: np.array):
    """TDSEQ计算辅助函数

    正值表示上涨,负值表示下跌

    :param close: np.array
        收盘价序列
    :return: np.array
    """
    up = np.zeros(len(close))
    dn = np.zeros(len(close))
    u = 0
    d = 0
    if len(close) < 5:
        return up

    for i in range(4, len(close)):
        if close[i] > close[i-4]:
            u += 1
            d = 0
        elif close[i] < close[i-4]:
            u = 0
            d -= 1
        else:
            u = 0
            d = 0
        up[i] = u
        dn[i] = d

    res = up+dn
    return np.array(res, dtype=np.int32)


[docs]def coo_td_V221110(c: CZSC, di: int = 1) -> OrderedDict: """获取倒数第i根K线的TD信号 **信号列表:** - Signal('60分钟_D2K_TD_延续_非底_任意_0') - Signal('60分钟_D2K_TD_延续_非顶_任意_0') - Signal('60分钟_D2K_TD_延续_TD顶_任意_0') - Signal('60分钟_D2K_TD_看空_非底_任意_0') - Signal('60分钟_D2K_TD_延续_TD底_任意_0') - Signal('60分钟_D2K_TD_看多_非顶_任意_0') :param c: CZSC对象 :param di: 倒数第di根K线 :return: s """ k1, k2, k3 = f"{c.freq.value}_D{di}K_TD".split("_") if di == 1: close = np.array([x.close for x in c.bars_raw[-50:]]) else: close = np.array([x.close for x in c.bars_raw[-50 - di + 1:-di + 1]]) td = __cal_td_seq(close) if td[-1] > 0: v1 = '看多' if len(td) > 1 and td[-2] < -8 else '延续' v2 = 'TD顶' if td[-1] > 8 else '非顶' elif td[-1] < 0: v1 = '看空' if len(td) > 1 and td[-2] > 8 else '延续' v2 = 'TD底' if td[-1] < -8 else '非底' else: v1 = '其他' v2 = '其他' s = OrderedDict() sig = Signal(k1=k1, k2=k2, k3=k3, v1=v1, v2=v2) s[sig.key] = sig.value return s