add changes
This commit is contained in:
+80
-33
@@ -1,6 +1,6 @@
|
||||
from datetime import timedelta
|
||||
from pandas import DataFrame
|
||||
from ChanEnum import Chan_FX_TYPE, Chan_KLINE_DIR, Chan_BI_DIR, Chan_SEG_DIR, Chan_ZS_DIR, Chan_BSP_DIR, Chan_BSP_TYPE
|
||||
from ChanEnum import Chan_FX_TYPE, Chan_KLINE_DIR, Chan_BI_DIR, Chan_SEG_DIR, Chan_ZS_DIR, Chan_BSP_DIR, Chan_BSP_TYPE, Chan_KLC_FX
|
||||
from ChanKLU import ChanKLU
|
||||
from ChanKLC import ChanKLC
|
||||
from ChanBI import ChanBI
|
||||
@@ -88,6 +88,7 @@ class ChanLun():
|
||||
df['macdhist'] = macd['macdhist']
|
||||
return df
|
||||
def plot_dataframe(self, dataframe):
|
||||
return self.get_klu_list(dataframe)
|
||||
klc_list = self.get_klc_list(dataframe)
|
||||
bi_list= self.cal_bi_list(klc_list)
|
||||
seg_list = self.get_seg_list(bi_list)
|
||||
@@ -529,7 +530,7 @@ class ChanLun():
|
||||
fx = self.check_fx(klc)
|
||||
# Do nothing
|
||||
if fx == Chan_FX_TYPE.UNKNOWN:
|
||||
klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
klc.set_fx(fx)
|
||||
if len(bi_list) > 0:
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
@@ -541,16 +542,19 @@ class ChanLun():
|
||||
if last_bottom.index < last_top.index:
|
||||
# Second top lower to be second sell point
|
||||
if last_top.high > klc.high:
|
||||
klc.set_fx(Chan_FX_TYPE.TT)
|
||||
#klc.set_fx(Chan_FX_TYPE.TT)
|
||||
klc.set_state("20")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "二类买卖点Sell 1")
|
||||
#print(klc.start_time, klc.fx, "二类卖点Sell 1")
|
||||
else:
|
||||
# A new top found
|
||||
#last_top.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
last_top = klc
|
||||
#print(klc.start_time, klc.fx, "一类买卖点Sell 1")
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Top Change 1")
|
||||
klc.set_klc_fx_type(Chan_KLC_FX.TOP1)
|
||||
#print(klc.start_time, klc.fx, "一类卖点Sell 1")
|
||||
#klc.set_fx(fx)
|
||||
klc.set_state("10")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
@@ -558,8 +562,8 @@ class ChanLun():
|
||||
# 不满足结合律的分型
|
||||
if last_bottom.index + 4 > klc.index:
|
||||
if last_top.high > klc.high:
|
||||
#print(klc.start_time, last_bottom.start_time, klc.fx, "中枢买卖点Sell 1")
|
||||
klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
#print(klc.start_time, klc.fx, "二类卖点Sell 1")
|
||||
#klc.set_fx(Chan_FX_TYPE.PTOP)
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
# New TOP Found replace last top
|
||||
@@ -571,18 +575,21 @@ class ChanLun():
|
||||
pre_last_bi.update_bi(klc)
|
||||
bi_list.remove(last_bi)
|
||||
pre_last_bi.set_next(None)
|
||||
last_top.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
#last_top.set_fx(Chan_FX_TYPE.PTOP)
|
||||
last_top = klc
|
||||
last_bottom = pre_last_bi.start_klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Top Bottom Change 1")
|
||||
klc.set_klc_fx_type(Chan_KLC_FX.TOP2)
|
||||
#print(klc.start_time, last_bi.start_klc.start_time, "New TOP Found reset last bi")
|
||||
klc.set_state("10")
|
||||
#print(klc.start_time, klc.fx, "笔卖点Sell 1")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
else:
|
||||
klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
klc.set_fx(Chan_FX_TYPE.PTOP)
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, last_bottom.start_time, klc.fx, "中枢买卖点Sell 2")
|
||||
#print(klc.start_time, klc.fx, "无效分型")
|
||||
# 满足结合律
|
||||
else:
|
||||
# New Temp TOP and last bottom confirmed ***** confirm last down bi(last bottom and last top)
|
||||
@@ -595,10 +602,13 @@ class ChanLun():
|
||||
bi.add_klc(klc)
|
||||
bi_list.append(bi)
|
||||
last_top = klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Top Change 2")
|
||||
klc.set_klc_fx_type(Chan_KLC_FX.TOP2)
|
||||
klc.set_state('30')
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, last_bottom.start_time, "Normal TOP Found, Confirm down bi 4")
|
||||
#print(klc.start_time, klc.fx, "笔卖点Sell 2")
|
||||
# last bottom = None
|
||||
else:
|
||||
if last_top.high < klc.high:
|
||||
@@ -606,29 +616,42 @@ class ChanLun():
|
||||
last_bi.set_start_klc(klc, Chan_BI_DIR.DOWN)
|
||||
#last_top.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
last_top = klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Top Change 3")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "笔卖点Sell 3")
|
||||
else:
|
||||
klc.set_fx(Chan_FX_TYPE.TT)
|
||||
klc.set_state('20')
|
||||
#print(klc.start_time, klc.fx, "二类买卖点Sell 2")
|
||||
#print(klc.start_time, klc.fx, "二类卖点Sell 2")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
else:
|
||||
if last_bottom:
|
||||
# 不满足结合律的分型
|
||||
if last_bottom.index + 4 > klc.index:
|
||||
klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
#klc.set_fx(Chan_FX_TYPE.PTOP)
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "中枢卖点Sell 1")
|
||||
else:
|
||||
# First temp top and last bottom confirmed
|
||||
last_top = klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Top Change 4")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "一类卖点Sell 1")
|
||||
# Last top = None, last bottom = None, create first down bi
|
||||
else:
|
||||
# First temp top
|
||||
last_top = klc
|
||||
bi = ChanBI(klc, len(bi_list), Chan_BI_DIR.DOWN)
|
||||
bi_list.append(bi)
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Top Change 5")
|
||||
#print(klc.start_time, 'Create first top')
|
||||
#print(klc.start_time, klc.fx, "笔卖点Sell 1")
|
||||
#klc.fx = Bottom ========================
|
||||
else:
|
||||
if last_bottom:
|
||||
@@ -637,16 +660,18 @@ class ChanLun():
|
||||
if last_top.index < last_bottom.index:
|
||||
# Second bottom uppper to be second buy point and confirm last bi
|
||||
if last_bottom.low < klc.low:
|
||||
klc.set_fx(Chan_FX_TYPE.BB)
|
||||
#klc.set_fx(Chan_FX_TYPE.BB)
|
||||
klc.set_state("-20")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "二类买卖点Buy 1")
|
||||
#print(klc.start_time, klc.fx, "二类买点Buy 1")
|
||||
else:
|
||||
# A new bottom found
|
||||
#last_bottom.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
last_bottom = klc
|
||||
#print(klc.start_time, klc.fx, "一类买卖点Buy 1")
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Bottom Change 1")
|
||||
klc.set_klc_fx_type(Chan_KLC_FX.BOTTOM1)
|
||||
#print(klc.start_time, klc.fx, "一类买点Buy 1")
|
||||
klc.set_state("-10")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
@@ -654,10 +679,10 @@ class ChanLun():
|
||||
# 不满足结合律的分型
|
||||
if last_top.index + 4 > klc.index:
|
||||
if last_bottom.low < klc.low:
|
||||
klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
#klc.set_fx(Chan_FX_TYPE.PBOTTOM)
|
||||
#klc.set_fx(Chan_FX_TYPE.BB)
|
||||
#klc.set_state("-100")
|
||||
#print(klc.start_time, klc.fx, "中枢买卖点Buy 1")
|
||||
#print(klc.start_time, klc.fx, "中枢买点Buy 1")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
# Found new bottom
|
||||
@@ -669,18 +694,21 @@ class ChanLun():
|
||||
pre_last_bi.update_bi(klc)
|
||||
bi_list.remove(last_bi)
|
||||
pre_last_bi.set_next(None)
|
||||
last_bottom.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
#last_bottom.set_fx(Chan_FX_TYPE.PBOTTOM)
|
||||
last_bottom = klc
|
||||
last_top = pre_last_bi.start_klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Top Bottom Change 2")
|
||||
klc.set_klc_fx_type(Chan_KLC_FX.BOTTOM2)
|
||||
#print(klc.start_time, last_bi.start_klc.start_time, "New BOTTOM Found reset last bi")
|
||||
klc.set_state("-10")
|
||||
#print(klc.start_time, klc.fx, "笔买点Buy 1")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
else:
|
||||
klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
#klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "中枢买卖点Buy 2")
|
||||
#print(klc.start_time, klc.fx, "无效分型")
|
||||
# 满足结合律的分型
|
||||
else:
|
||||
# New Temp Bottom and last top confirmed ***** confirm last up bi(last bottom and last top)
|
||||
@@ -693,9 +721,12 @@ class ChanLun():
|
||||
bi.add_klc(klc)
|
||||
bi_list.append(bi)
|
||||
last_bottom = klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Bottom Change 2")
|
||||
klc.set_klc_fx_type(Chan_KLC_FX.BOTTOM2)
|
||||
klc.set_state('-30')
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "笔买点Buy 2")
|
||||
#print(klc.start_time, last_top.start_time, "Normal Bottom Found, Confirm up bi 6")
|
||||
# last_top = None
|
||||
else:
|
||||
@@ -704,12 +735,14 @@ class ChanLun():
|
||||
last_bi.set_start_klc(klc, Chan_BI_DIR.UP)
|
||||
#last_bottom.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
last_bottom = klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Bottom Change 3")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "笔买点Buy 3")
|
||||
else:
|
||||
klc.set_fx(Chan_FX_TYPE.BB)
|
||||
klc.set_state('-20')
|
||||
#print(klc.start_time, klc.fx, "二类买卖点Buy 2")
|
||||
#print(klc.start_time, klc.fx, "二类买点Buy 2")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
# last_bottom = None
|
||||
@@ -717,14 +750,17 @@ class ChanLun():
|
||||
if last_top:
|
||||
# 不满足结合律的分型
|
||||
if last_top.index + 4 > klc.index:
|
||||
klc.set_fx(Chan_FX_TYPE.UNKNOWN)
|
||||
#klc.set_fx(Chan_FX_TYPE.PBOTTOM)
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "中枢买点Buy 1")
|
||||
else:
|
||||
# First temp bottom and last top confirmed
|
||||
last_bottom = klc
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Bottom Change 4")
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, klc.fx, "一类买点Buy 1")
|
||||
# Last top = None, last bottom = None, create first up bi
|
||||
else:
|
||||
# First temp bottom and no top yet
|
||||
@@ -733,8 +769,11 @@ class ChanLun():
|
||||
bi_list.append(bi)
|
||||
bi_list[-1].add_klc(klc)
|
||||
klc.set_bi(bi_list[-1])
|
||||
#print(klc.start_time, 'Create first bottom')
|
||||
#print(klc.time, klc.fx, klc.state)
|
||||
print(klc.start_time, klc.fx, bi_list[-1].dir, "Last Bottom Change 5")
|
||||
#print(klc.start_time, klc.fx, "笔买点Buy 4")
|
||||
#if klc.fx != Chan_FX_TYPE.UNKNOWN:
|
||||
#print(klc.start_time, klc.fx, klc.index)
|
||||
"""
|
||||
for klc in klc_list:
|
||||
if klc.fx == Chan_FX_TYPE.TOP:
|
||||
klc.state = "10"
|
||||
@@ -742,6 +781,7 @@ class ChanLun():
|
||||
if klc.fx == Chan_FX_TYPE.BOTTOM:
|
||||
klc.state = "-10"
|
||||
#print(klc.time, klc.state)
|
||||
"""
|
||||
return bi_list
|
||||
|
||||
def get_zs_list(self, bi_list, seg_list):
|
||||
@@ -997,7 +1037,20 @@ class ChanLun():
|
||||
|
||||
def get_decimal(self, value):
|
||||
return Decimal("{:.2f}".format(value))
|
||||
|
||||
def add_indicators(self, df):
|
||||
fast = 8
|
||||
slow = 16
|
||||
period = 6
|
||||
macd = ta.MACD(df, fastperiod=fast, slowperiod=slow, signalperiod=period)
|
||||
df['macd'] = macd['macd']
|
||||
df['macdsignal'] = macd['macdsignal']
|
||||
df['macdhist'] = macd['macdhist']
|
||||
df['ma5'] = ta.MA(df, timeperiod=5)
|
||||
df['ma10'] = ta.MA(df, timeperiod=10)
|
||||
df['ma30'] = ta.EMA(df, timeperiod=30)
|
||||
df['ma250'] = ta.MA(df, timeperiod=250)
|
||||
df['rsi'] = ta.RSI(df, timeperiod=14)
|
||||
return df
|
||||
def get_klc_list(self, dataframe):
|
||||
klu_list = self.get_klu_list(dataframe)
|
||||
klc_list = []
|
||||
@@ -1075,14 +1128,8 @@ class ChanLun():
|
||||
klu = ChanKLU(time_str, o, h, l, c, v)
|
||||
klu.set_idx(i)
|
||||
klu_list.append(klu)
|
||||
klu.macd = item['macd']
|
||||
klu.signal = item['macdsignal']
|
||||
klu.macdhist = item['macdhist']
|
||||
klu.ma5 = item['ma5']
|
||||
klu.ma10 = item['ma10']
|
||||
klu.ma30 = item['ma30']
|
||||
klu.ma250 = item['ma250']
|
||||
klu.rsi = item['rsi']
|
||||
if True:
|
||||
klu.set_indicators(item)
|
||||
return klu_list
|
||||
|
||||
def get_bsp_list1(self, big_df):
|
||||
|
||||
Reference in New Issue
Block a user