diff --git a/ChanKLC.py b/ChanKLC.py index 530c4bd..70c8553 100644 --- a/ChanKLC.py +++ b/ChanKLC.py @@ -1,7 +1,7 @@ import copy from typing import Dict, Optional -from ChanEnum import Chan_FX_TYPE, Chan_KLINE_DIR, Chan_BI_DIR, Chan_KLC_FX, Chan_K_DIR +from ChanEnum import Chan_FX_TYPE, Chan_KLINE_DIR, Chan_BI_DIR, Chan_KLC_FX, Chan_K_DIR, Chan_MACD_STATE import ChanKLU import ChanCTime @@ -78,17 +78,15 @@ class ChanKLC(): self.klc_fx_type = Chan_KLC_FX.BOTTOM4 if self.fx == Chan_FX_TYPE.TOP: #print(self.end_time, self.fx, self.macd, self.macdhist, len(self.klus)) - if self.macd > 0: - self.bb_out = True - if self.macdhist < 0: + if self.macdhist < 0 and self.macd > 0 and self.macd > self.pre.macd and self.macd > self.next.macd: self.klc_fx_type = Chan_KLC_FX.TOP5 + self.bb_out = True else: if self.fx == Chan_FX_TYPE.BOTTOM: - if self.macd < 0: - self.bb_out = True - if self.macdhist > 0: + if self.macdhist > 0 and self.macd < 0 and self.macd < self.pre.macd and self.macd < self.next.macd: self.klc_fx_type = Chan_KLC_FX.BOTTOM5 - #self.bb_out = True + self.bb_out = True + def cal_macd_state(self, dir): macd_state = 0 return macd_state diff --git a/ChanLun.py b/ChanLun.py index c32b657..9f0437b 100644 --- a/ChanLun.py +++ b/ChanLun.py @@ -17,6 +17,7 @@ from technical.util import resample_to_interval from decimal import Decimal import xgboost as xgb import numpy as np +from ChanMACD import ChanMACD class ChanLun(): timeframes = ["5m", "15m", "30m", "60m", "4h"] @@ -1155,6 +1156,8 @@ class ChanLun(): klu_list = self.get_klu_list(dataframe) klc_list = [] last_klu = None + macd = ChanMACD(klu_list) + klu_list = macd.cal_macd() for klu in klu_list: if len(klc_list) > 0: last_klc = klc_list[-1] diff --git a/ChanMACD.py b/ChanMACD.py index da1cdee..22cadb5 100644 --- a/ChanMACD.py +++ b/ChanMACD.py @@ -16,6 +16,7 @@ class ChanMACD(): self.return_zero_list = [] # 归零轴列表 self.cross0_up_list = [] # 向上穿越零轴列表 self.cross0_down_list = [] # 向下穿越零轴列表 + # 计算段 / UnitTF / HistSet 及状态标记 self.cal_macd() def cal_macd(self): last_seg = None @@ -139,4 +140,5 @@ class ChanMACD(): last_seg.add_histset(histset) if last_unittf: last_unittf.add_histset(histset) - last_klu = klu \ No newline at end of file + last_klu = klu + return self.klu_list \ No newline at end of file diff --git a/ChanMACDHistSet.py b/ChanMACDHistSet.py index 67d6a98..a7c04be 100644 --- a/ChanMACDHistSet.py +++ b/ChanMACDHistSet.py @@ -1,4 +1,4 @@ - +from ChanEnum import Chan_MACDHISTSET_DIR class ChanMACDHistSet(): def __init__(self, start_time, start_klu, pre_histset, dir): @@ -10,11 +10,26 @@ class ChanMACDHistSet(): self.histset_dir = dir self.next = None self.pre = pre_histset + self.high_klu = start_klu + self.low_klu = start_klu def set_next(self, next_histset): self.next = next_histset def add_klu(self, klu): self.klu_list.append(klu) klu.set_histset(self) + if self.histset_dir == Chan_MACDHISTSET_DIR.ABOVE: + if klu.macdhist > self.high_klu.macdhist: + self.high_klu = klu + else: + if klu.macdhist < self.low_klu.macdhist: + self.low_klu = klu + else: + if klu.macdhist < self.high_klu.macdhist: + self.high_klu = klu + else: + if klu.macdhist > self.low_klu.macdhist: + self.low_klu = klu def set_end_klu(self, end_klu): + self.add_klu(end_klu) self.end_klu = end_klu self.end_time = end_klu.time \ No newline at end of file diff --git a/ChanMACDSeg.py b/ChanMACDSeg.py index 8ad5072..c35a6e4 100644 --- a/ChanMACDSeg.py +++ b/ChanMACDSeg.py @@ -14,7 +14,9 @@ class ChanMACDSeg(): self.seg_dir = seg_dir self.pre = pre_seg self.next = None - self.peak_klu = start_klu + self.high_klu = start_klu + self.low_klu = start_klu + self.ref_klu = None def set_next(self, next_seg): self.next = next_seg def add_klu(self, klu): @@ -22,11 +24,19 @@ class ChanMACDSeg(): self.klu_list.append(klu) klu.set_seg(self) if self.seg_dir == Chan_MACDSEG_DIR.ABOVE: - if klu.high > self.peak_klu.high: - self.peak_klu = klu + if klu.macdhist > self.high_klu.macdhist: + self.high_klu = klu + else: + if klu.macdhist < self.low_klu.macdhist: + self.low_klu = klu else: - if klu.low < self.peak_klu.low: - self.peak_klu = klu + if klu.macdhist < self.high_klu.macdhist: + self.high_klu = klu + else: + if klu.macdhist > self.low_klu.macdhist: + self.low_klu = klu + if self.high_klu.index != self.start_klu.index: + self.ref_klu = self.high_klu def add_unittf(self, unittf): self.unittf_list.append(unittf) unittf.set_next(self) diff --git a/ChanMACDUnitTF.py b/ChanMACDUnitTF.py index 0e18236..8e5da82 100644 --- a/ChanMACDUnitTF.py +++ b/ChanMACDUnitTF.py @@ -1,4 +1,4 @@ -from ChanEnum import Chan_MACD_STATE +from ChanEnum import Chan_MACD_STATE, Chan_MACDUNITTF_DIR class ChanMACDUnitTF(): @@ -15,8 +15,9 @@ class ChanMACDUnitTF(): self.unittf_dir = dir self.start_type = start_type self.end_type = None - self.peak_hist = start_klu.macdhist self.near0_count = 1 + self.high_klu = start_klu + self.low_klu = start_klu def set_next(self, next_unittf): self.next = next_unittf def add_histset(self, histset): @@ -26,8 +27,18 @@ class ChanMACDUnitTF(): if klu: self.klu_list.append(klu) klu.set_unittf(self) - if klu.macdhist > self.peak_hist: - self.peak_hist = klu.macdhist + if self.unittf_dir == Chan_MACDUNITTF_DIR.ABOVE: + if klu.macdhist > self.high_klu.macdhist: + self.high_klu = klu + else: + if klu.macdhist < self.low_klu.macdhist: + self.low_klu = klu + else: + if klu.macdhist < self.high_klu.macdhist: + self.high_klu = klu + else: + if klu.macdhist > self.low_klu.macdhist: + self.low_klu = klu if klu.macd_state == Chan_MACD_STATE.NEAR0 and len(self.histset_list) > 1: #print(self.start_time, klu.time, self.near0_count) self.near0_count += 1 diff --git a/K线动能理论.txt b/K线动能理论.txt index b69a256..f82608f 100644 --- a/K线动能理论.txt +++ b/K线动能理论.txt @@ -138,7 +138,7 @@ MACD黄白线在零轴之下第一个单位调整周期 + 分立跳空背离( 如果在单位调整周期内发生了跳空的形态,当跳空能量堆的高度高于前一个能量堆的高度,此时的跳空则为非背离跳空。非背离跳空可以理解为单位周期的单边行情,前一个能量堆失效,以新的最高的能量堆作为后续行情的1号参考点。不管是连续跳空还是分立跳空都遵守这个法则。 单位调整周期之间的背离 -单位调整周期之间的背离,是指两个或者两个以上的单位调整周期相比较而建立的关系,相比较的周期必须在同一个线段周期内,不可跨线段比较。当K线在某个时间级别的线段中,MACD经过了一个单位调整周期的运行,黄白线在此回零轴后,由于零轴的支撑反弹或压力反抽的作用,因此出现第二个单位调整周期,当第二个单位调整周期的黄白线这里特指白线离开零轴的距离小于第一个单位调整周期黄白线离开零轴的距离时,单位调整周期之间就产生了相悖的关系,即价格穿新高或新低,而白线能量去出现了减弱或增强,这种背离称为单位调整周期之间的背离,单位调整周期之间的背离也叫区间背离。 +单位调整周期之间的背离,是指两个或者两个以上的单位调整周期相比较而建立的关系,相比较的周期必须在同一个线段周期内,不可跨线段比较。当K线在某个时间级别的线段中,MACD经过了一个单位调整周期的运行,黄白线在此回零轴后,由于零轴的支撑反弹或压力反抽的作用,因此出现第二个单位调整周期,当第二个单位调整周期的黄白线这里特指白线离开零轴的距离小于第一个单位调整周期黄白线离开零轴的距离时,单位调整周期之间就产生了相悖的关系,即价格穿新高或新低,而白线能量区出现了减弱或增强,这种背离称为单位调整周期之间的背离,单位调整周期之间的背离也叫区间背离。 上涨线段单位调整周期之间的顶背离为卖点(前提:长级别MACD在高位) 下跌线段单位调整周期之间的底背离为买点(前提:长级别MACD在高位) diff --git a/web/templates/index.html b/web/templates/index.html index cc67112..d95d97c 100644 --- a/web/templates/index.html +++ b/web/templates/index.html @@ -919,7 +919,7 @@