Git Product home page Git Product logo

chan.py's People

Contributors

vespa314 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chan.py's Issues

strategy_demo.py 里面的一买好像有点问题

main.py 画图是对的,但是这个demo里面打印出来的信息是错的,比如浪潮信息,demo里面2022/9/22出了个买点,但是实际并不是,main.py画的图应该是在10月11号。
祝大佬元旦快乐。

CBi.Cal_Rsi 运行错误

Traceback (most recent call last):
File "", line 1, in
File "/Users/masonchen/Repos/chan.py/Common/cache.py", line 32, in call
result = self.func(*args, **kwargs)
File "/Users/masonchen/Repos/chan.py/Bi/Bi.py", line 212, in Cal_Rsi
rsi_lst.extend(klu.rsi for klu in klc.lst)
File "/Users/masonchen/Repos/chan.py/Bi/Bi.py", line 212, in
rsi_lst.extend(klu.rsi for klu in klc.lst)
AttributeError: 'CKLine_Unit' object has no attribute 'rsi'

画图性能提升

draw_macd这个函数会把历史所有值都绘画一次,所以在回放时,会越来越卡
可否改进这个机制呢,只绘制近期的值

BI.parent_seg数据似乎有点问题,求解

现在总共有4 seg
image
最后一段的end bi是21
image
现在总共有24 bi
image
bi_list的21 bi还对应的上seg,是3,且seg.next is None
image
但是22 bi的seg_idx 是4,这个可以理解,但是parent_seg那里来的
image
而且4 seg pre -> 3 seg,但是3 seg next -> 竟然有了,是 4 seg,有点奇怪
image
而到了23 bi,seg_idx 也是4,但是parent_seg就为 None了,没有了
image

请问这是什么原因,因为left_seg_method配置吗,感觉悬空出来一个seg,对应不上号

trigger_load耗时问题请教

image
请问我这里是使用有问题还是怎么回事,刚开始执行一次是0.01s。后续这个执行时间一直在增长。频率5m和30m
当前Bar:2020-01-02 09:35:00,耗时: 0.00秒
当前Bar:2020-01-02 09:40:00,耗时: 0.00秒
...
当前Bar:2020-03-31 14:25:00,耗时: 0.77秒

futu数据源获取报错

git下来跑README.md的demo示例代码
chan = CChan(
code="HK.00700",
begin_time="2012-01-01",
end_time=None,
data_src=DATA_SRC.FUTU, # 数据来源,
lv_list=[KL_TYPE.K_DAY], # 多级别可以从大到小传入
config=config,
autype=AUTYPE.QFQ,
extra_kl=None,
)
里的DATA_SRC.FUTU在Chan.py里没有定义
def GetStockAPI(src):
_dict = {}
if src == DATA_SRC.BAO_STOCK:
from DataAPI.BaoStockAPI import CBaoStock
_dict[DATA_SRC.BAO_STOCK] = CBaoStock
if src == DATA_SRC.CCXT:
from DataAPI.ccxt import CCXT
_dict[DATA_SRC.CCXT] = CCXT
只有如上两个

逐帧动画问题

逐帧动画好像有问题,每帧都是新开一个窗口一闪而过,没有逐帧播放动画

ZS.ZS.out_bi_is_peak除零错误

该函数有一定几率可能触发该错误

File "/home/mjzs/.local/lib/python3.10/site-packages/cchan/ZS/ZS.py", line 211, in out_bi_is_peak
r = abs(bi.get_end_val()-self.bi_out.get_end_val())/self.bi_out.get_end_val()
ZeroDivisionError: float division by zero

删除

猛一看功能很全啊,仔细一看……

trigger load后bs_point_lst 未更新

问题:chan对象trigger load后bs_point_lst 未自动更新

过程:

代码

image

chan原始数据

7f4c5bc0df24ed19aa8c71e5ad99e33

trigger load后

90394e968234f4bb9552baa831e2b13

trigger load后调用.cal_seg_and_zs()计算

1641c3d89dd0977b8365dd399afb008

描述

trigger load后bi_list有更新,bs_point_lst未自动更新,需要手动调用计算函数

`Seg\EigenFX.py`中`can_be_end`函数存在一个逻辑错误

can_be_end函数的作用是判断特征序列分型是否结束,并考虑线段的两种情况:特征序列中第一和第二元素间存在特征序列的缺口。其中如果存在缺口时调用find_revert_fx函数寻找反向分型。
break_thred参数的含义是为了判断判断特征序列缺口是否笔合,那么当线段是向上时,break_thred应该是self.ele[0].high,反向特征序列的第二个元素的低点低于此值即表明闭合,这个逻辑可以从find_revert_fx函数逻辑得到佐证。
因此break_thred = self.ele[0].low if self.is_up() else self.ele[0].high应改为
break_thred = self.ele[0].high if self.is_up() else self.ele[0].low

def can_be_end(self, bi_lst: CBiList):
    """判断特征序列分型是否结束,并考虑线段的两种情况:特征序列中第一和第二元素间存在特征序列的缺口"""
    assert self.ele[1] is not None
    if self.ele[1].gap: # 第二特征序列相对第一个特征序列有缺口,线段的第二种情况
        assert self.ele[0] is not None
        end_bi_idx = self.GetPeakBiIdx()
        thred_value = bi_lst[end_bi_idx].get_end_val() #线段的端点
        break_thred = self.ele[0].low if self.is_up() else self.ele[0].high #TODO:此处写错了,break_thred值是为了判断特征序列缺口是否笔合,那么当线段是向上时,break_thred应该是self.ele[0].high
        return self.find_revert_fx(bi_lst, end_bi_idx+2, thred_value, break_thred)
    else:
        return True

是否需要讨论群?

tg?Discord?slack?不太清楚可以用科学上网的人的比例;

还是用我自建私用的mattermost?暂时不太想用微信或QQ。。

或者就用github的discussions吧?

Seg添加@make_cache

能否让Seg也具有@make_cache缓存计算结果的能力呢?因为我在Seg内部写了一些特征计算。我这边加了,但是不确定什么时候clean_cache,只能怀疑是内部元素变动时候,不确定加的是否正确,应该是这些方法结束时需要clean:add_zs、update_bi_list,不确定set_seg_idx后是否需要clean
def clean_cache(self): self._memoize_cache = {}

x_tick_num 没生效

1.x_tick_num 没生效
建议:
only_top_lv 改为需要展示的层级,比如我日线,60分钟,30分钟,我只想看30分钟.但是其实60分钟的特殊笔需要根据上一级别或者下一级别来判断.这样我list里面就有数据了.

跨区间获取笔和线段的逻辑如何改写

我学习的缠论需要同时获取上一级别和下一级别的笔和线段线.应该如何改写更加合理
1.本级别和次级别同笔的处理方式 本级别 当笔,次级别 当段
2.本级别不够笔,次级别够线段 本级别 当笔

将strategydemo中改为1分钟级别,即“lv_list = [KL_TYPE.K_1M]”,就会报错,而5分钟及以上级别不会报错

login success!
logout success!
Traceback (most recent call last):
File "D:\stock-chan\chan.py-main\Debug\strategy_demo.py", line 34, in
for chan_snapshot in chan.step_load(): # 每增加一根K线,返回当前静态精算结果
File "D:\stock-chan\chan.py-main\Chan.py", line 122, in step_load
for idx, snapshot in enumerate(self.load(self.conf.trigger_step)):
File "D:\stock-chan\chan.py-main\Chan.py", line 198, in load
yield from self.load_iterator(lv_idx=0, parent_klu=None, step=step) # 计算入口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\stock-chan\chan.py-main\Chan.py", line 242, in load_iterator
kline_unit = self.get_next_lv_klu(lv_idx)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\stock-chan\chan.py-main\Chan.py", line 110, in get_next_lv_klu
return self.g_kl_iter[lv_idx][0].next()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\stock-chan\chan.py-main\Chan.py", line 89, in load_stock_data
for KLU_IDX, klu in enumerate(stockapi_instance.get_kl_data()):
File "D:\stock-chan\chan.py-main\DataAPI\BaoStockAPI.py", line 81, in get_kl_data
raise Exception(rs.error_msg)
Exception: 请求数据类型不正确
190a601b1c65e2762e06c8ca7f02a1c
357c32d73de65910afa84d986170946

Bi.next未重置的问题

如图所示,bi_list总共有67笔
image
但是第最后一笔的next竟然还有值,是不是哪里没有重置的问题
image

对于24小时交易,天级别以下k线,会报错

CChanException: kline time err, cur=2024/07/02 00:30, last=2024/07/02
Traceback:
File "C:\Users\apple.conda\envs\py311\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 589, in _run_script
exec(code, module.dict)
File "C:\Users\apple\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Experts\Vespa314\App.py", line 192, in
run_chanlun(code=code, begin_time=begin_time, end_time=end_time, market_type=market_type,
File "C:\Users\apple\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Experts\Vespa314\App.py", line 93, in run_chanlun
chan = CChan(
^^^^^^
File "C:\Users\apple\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Experts\Vespa314\Chan.py", line 50, in init
for _ in self.load():
"C:\Users\apple\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Experts\Vespa314\Chan.py", line 205, in load
yield from self.load_iterator(lv_idx=0, parent_klu=None, step=step) # 计算入口
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\apple\AppData\Roaming\MetaQuotes\Terminal\BD115B570DAF19795DD0BA0C4463675D\MQL5\Experts\Vespa314\Chan.py", line 252, in load_iterator
raise CChanException(f"kline time err, cur={kline_unit.time}, last={self.klu_last_t[lv_idx]}",

M30.csv

CBi.Cal_MACD_slope的计算似乎有问题

计算这个指标的时候,似乎没有必要除以 end_klu.high 或 begin_klu.high。而且这么做了之后该指标的值会可能变得非常小(可能小于0.0001)
def Cal_MACD_slope(self):
begin_klu = self.get_begin_klu()
end_klu = self.get_end_klu()
if self.is_up():
return (end_klu.high - begin_klu.low)/end_klu.high/(end_klu.idx - begin_klu.idx + 1)
else:
return (begin_klu.high - end_klu.low)/begin_klu.high/(end_klu.idx - begin_klu.idx + 1)

交易引擎与策略类

大佬,v3开发进度如何了,交易引擎与策略类这两个剥离出来了吗,有打算在v3版本开放交易引擎与策略类这两个模块吗

strategy_demo5.py中可能存在的问题

该Demo脚本中保存策略特征的方式是根据买卖点的idx进行键值对存储。但是,对于同一个idx,可能被不同时间多次出现。这种方式只能存储同idx一最后一次出现的BSP特征。是否应该使用time作为key保存?

# 跑策略,保存买卖点的特征
for chan_snapshot in chan.step_load():
    last_klu = chan_snapshot[0][-1][-1]
    bsp_list = chan_snapshot.get_bsp()
    if not bsp_list:
        continue
    last_bsp = bsp_list[-1]

    cur_lv_chan = chan_snapshot[0]
    if last_bsp.klu.idx not in bsp_dict and cur_lv_chan[-2].idx == last_bsp.klu.klc.idx:
        # 假如策略是:买卖点分形第三元素出现时交易
        bsp_dict[last_bsp.klu.idx] = {
            "feature": last_bsp.features,
            "is_buy": last_bsp.is_buy,
            "open_time": last_klu.time,
        }
        bsp_dict[last_bsp.klu.idx]['feature'].add_feat(stragety_feature(last_klu))  # 开仓K线特征
        print(last_bsp.klu.time, last_bsp.is_buy)

web端页面

为了方便体验和调试,不知道有没有前端大佬想一起来开发个页面工具?

后端功能基本是具备的。

你好.trigger_load 喂给cchan的新增k线数据如果有多区间应该怎么写

我看回测案例中 stragety_demo2.py 的模板只有一个区间.如果是多区间
lv_list = [KL_TYPE.K_60M, KL_TYPE.K_15M, KL_TYPE.K_3M]
data_src = stockapi_cls(code, k_type = lv_list, begin_date=begin_time, end_date=end_time, autype=AUTYPE.QFQ)

如果这样写 在进行循环是会报错的 data_src.get_kl_data()
能帮写个例子吗

新特征:画图引擎改成plotly

根据反馈,当前画图是基于matplotlib的静态图,其实查看和调试都不方便;

调用后看起来可行的是再支持一个基于plotly的画图引擎,画可交互的图。

想联系你

老板,看了你发布的东西,很感兴趣,怎么联系你呢

语法错误

`Traceback (most recent call last):

File "D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)

File "", line 1, in
from Chan import CChan

File "D:\chan.py\Chan.py", line 12, in
from KLine.KLine_List import CKLine_List

File "D:\chan.py\KLine\KLine_List.py", line 5, in
from BuySellPoint.BSPointList import CBSPointList

File "D:\chan.py\BuySellPoint\BSPointList.py", line 8, in
from Seg.SegListComm import CSegListComm

File "D:\chan.py\Seg\SegListComm.py", line 92
if peak_bi := FindPeakBi(bi_lst[last_seg_end_bi.idx+3:], is_high=True):
^
SyntaxError: invalid syntax`
^_^语法错误是我没想到的,哈哈哈哈

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.