|
@@ -0,0 +1,473 @@
|
|
|
+from time import sleep
|
|
|
+
|
|
|
+import os
|
|
|
+
|
|
|
+import pandas as pd
|
|
|
+import talib as ta
|
|
|
+import numpy as np
|
|
|
+from datetime import datetime as dt
|
|
|
+
|
|
|
+
|
|
|
+class myind:
|
|
|
+ def __init__(self, name, value):
|
|
|
+ self.name = name
|
|
|
+ self.value = value
|
|
|
+
|
|
|
+ def __repr__(self):
|
|
|
+ return self.name
|
|
|
+
|
|
|
+ def __call__(self, x):
|
|
|
+ return self.value(x)
|
|
|
+
|
|
|
+ def myself_kdj(df):
|
|
|
+ low_list = df['low_back'].rolling(9, min_periods=9).min()
|
|
|
+ low_list.fillna(value=df['low_back'].expanding().min(), inplace=True)
|
|
|
+ high_list = df['high_back'].rolling(9, min_periods=9).max()
|
|
|
+ high_list.fillna(value=df['high_back'].expanding().max(), inplace=True)
|
|
|
+ rsv = (df['close_back'] - low_list) / (high_list - low_list) * 100
|
|
|
+ df['k'] = pd.DataFrame(rsv).ewm(com=2).mean()
|
|
|
+ df['d'] = df['k'].ewm(com=2).mean()
|
|
|
+ df['j'] = 3 * df['k'] - 2 * df['d']
|
|
|
+ return df
|
|
|
+
|
|
|
+
|
|
|
+ def get_macd_data(data, short=0, long1=0, mid=0):
|
|
|
+ if short == 0:
|
|
|
+ short = 12
|
|
|
+ if long1 == 0:
|
|
|
+ long1 = 26
|
|
|
+ if mid == 0:
|
|
|
+ mid = 9
|
|
|
+ data['sema'] = pd.Series(data['close_back']).ewm(span=short).mean()
|
|
|
+ data['lema'] = pd.Series(data['close_back']).ewm(span=long1).mean()
|
|
|
+ data.fillna(0, inplace=True)
|
|
|
+ data['dif'] = data['sema'] - data['lema']
|
|
|
+ data['dea'] = pd.Series(data['dif']).ewm(span=mid).mean()
|
|
|
+ data['macd'] = 2 * (data['dif'] - data['dea'])
|
|
|
+ data.fillna(0, inplace=True)
|
|
|
+ return data[['dif', 'dea', 'macd']]
|
|
|
+
|
|
|
+
|
|
|
+ def get_ris(data):
|
|
|
+ data["rsi_6"] = ta.RSI(data['close_back'], timeperiod=6)
|
|
|
+ data["rsi_12"] = ta.RSI(data['close_back'], timeperiod=12)
|
|
|
+ data["rsi_24"] = ta.RSI(data['close_back'], timeperiod=24)
|
|
|
+
|
|
|
+
|
|
|
+ def get_bias(data):
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ data['bias_6'] = (data['close_back'] - data['close_back'].rolling(6, min_periods=1).mean()) / \
|
|
|
+ data['close_back'].rolling(6, min_periods=1).mean() * 100
|
|
|
+ data['bias_12'] = (data['close_back'] - data['close_back'].rolling(12, min_periods=1).mean()) / \
|
|
|
+ data['close_back'].rolling(12, min_periods=1).mean() * 100
|
|
|
+ data['bias_24'] = (data['close_back'] - data['close_back'].rolling(24, min_periods=1).mean()) / \
|
|
|
+ data['close_back'].rolling(24, min_periods=1).mean() * 100
|
|
|
+ data['bias_6'] = round(data['bias_6'], 2)
|
|
|
+ data['bias_12'] = round(data['bias_12'], 2)
|
|
|
+ data['bias_24'] = round(data['bias_24'], 2)
|
|
|
+
|
|
|
+ def get_wilr(data):
|
|
|
+
|
|
|
+
|
|
|
+ data['willr'] = ta.WILLR(data['high_back'], data['low_back'], data['close_back'], timeperiod=14)
|
|
|
+
|
|
|
+ def get_hlfx(data):
|
|
|
+ import pandas as pd
|
|
|
+ trading_signals = 0
|
|
|
+ data_temp = data[['time', 'open_back', 'close_back', 'high_back', 'low_back', 'dif', 'dea', 'macd']]
|
|
|
+ data_temp.columns = ['time', 'open', 'close', 'high', 'low', 'dif', 'dea', 'macd']
|
|
|
+ df_day = pd.DataFrame(columns=['time', 'open', 'close', 'high', 'low'])
|
|
|
+
|
|
|
+
|
|
|
+ for i in data_temp.index:
|
|
|
+ if i == 0 or i == 1:
|
|
|
+ df_day = pd.concat([df_day.copy(), data_temp.loc[i].to_frame().T], ignore_index=True)
|
|
|
+
|
|
|
+ elif (df_day.iloc[-1, 3] > data_temp.loc[i, 'high']
|
|
|
+ and df_day.iloc[-1, 4] > data_temp.loc[i, 'low']) \
|
|
|
+ or (df_day.iloc[-1, 3] < data_temp.loc[i, 'high']
|
|
|
+ and df_day.iloc[-1, 4] < data_temp.loc[i, 'low']):
|
|
|
+ df_day = pd.concat([df_day.copy(), data_temp.loc[i].to_frame().T], ignore_index=True)
|
|
|
+
|
|
|
+
|
|
|
+ else:
|
|
|
+
|
|
|
+ if df_day.iloc[-2, 3] > df_day.iloc[-1, 3]:
|
|
|
+ df_day.iloc[-1, 3] = min(df_day.iloc[-1, 3], data_temp.loc[i, 'high'])
|
|
|
+ df_day.iloc[-1, 4] = min(df_day.iloc[-1, 4], data_temp.loc[i, 'low'])
|
|
|
+
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.iloc[-1, 3] = max(df_day.iloc[-1, 3], data_temp.loc[i, 'high'])
|
|
|
+ df_day.iloc[-1, 4] = max(df_day.iloc[-1, 4], data_temp.loc[i, 'low'])
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ df_day['HL'] = np.nan
|
|
|
+ if len(df_day.index) > 2:
|
|
|
+
|
|
|
+ for x in range(2, len(df_day.index)):
|
|
|
+ m = x - 1
|
|
|
+
|
|
|
+
|
|
|
+ if ((df_day.loc[x, 'high'] > df_day.loc[x - 1, 'high']) and
|
|
|
+ (df_day.loc[x - 2, 'high'] > df_day.loc[x - 1, 'high'])):
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L*'
|
|
|
+
|
|
|
+ while m:
|
|
|
+ if df_day.loc[m, 'HL'] in ['H', 'HH', 'H*']:
|
|
|
+ if (x - m) > 3:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 1
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[m, 'HL'] = 'H*'
|
|
|
+ break
|
|
|
+
|
|
|
+ elif df_day.loc[m, 'HL'] in ['L', 'LL', 'L*']:
|
|
|
+ if df_day.loc[m - 1, 'low'] > df_day.loc[x - 1, 'low']:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+ df_day.loc[m, 'HL'] = '-'
|
|
|
+
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 1
|
|
|
+
|
|
|
+
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
+
|
|
|
+
|
|
|
+ if m_macd_dif < x_macd_dif:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'LL'
|
|
|
+ break
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ break
|
|
|
+ m = m - 1
|
|
|
+ if m == 0:
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+
|
|
|
+
|
|
|
+ elif ((df_day.loc[x, 'high'] < df_day.loc[x - 1, 'high']) and (
|
|
|
+ df_day.loc[x - 2, 'high'] < df_day.loc[x - 1, 'high'])):
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H*'
|
|
|
+ while m:
|
|
|
+ if df_day.loc[m, 'HL'] in ['L', 'LL', 'L*']:
|
|
|
+ if x - m > 3:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 2
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[m, 'HL'] = 'L*'
|
|
|
+ break
|
|
|
+
|
|
|
+ elif df_day.loc[m, 'HL'] in ['H', 'HH', 'H*']:
|
|
|
+ if df_day.loc[x - 1, 'high'] > df_day.loc[m - 1, 'high']:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+ df_day.loc[m, 'HL'] = '-'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 2
|
|
|
+
|
|
|
+
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
+
|
|
|
+
|
|
|
+ if x_macd_dif < m_macd_dif:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'HH'
|
|
|
+ break
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ break
|
|
|
+ m = m - 1
|
|
|
+ if m == 0:
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+
|
|
|
+ else:
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ df_temp = df_day[['time', 'HL']]
|
|
|
+
|
|
|
+ return df_temp, trading_signals
|
|
|
+
|
|
|
+
|
|
|
+ def get_hlfx_optimization(data):
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ trading_signals = 0
|
|
|
+ data_temp = data[['time', 'open_back', 'close_back', 'high_back', 'low_back', 'dif', 'dea', 'macd']]
|
|
|
+ data_temp.columns = ['time', 'open', 'close', 'high', 'low', 'dif', 'dea', 'macd']
|
|
|
+
|
|
|
+ merged_data = []
|
|
|
+ prev_kline = data_temp.iloc[0].copy()
|
|
|
+ merged_data.append(prev_kline)
|
|
|
+
|
|
|
+
|
|
|
+ df_day = pd.DataFrame()
|
|
|
+ for i in range(1, len(data_temp)):
|
|
|
+ current_kline = data_temp.iloc[i].copy()
|
|
|
+
|
|
|
+
|
|
|
+ last_merged_kline = merged_data[-1]
|
|
|
+
|
|
|
+ if i == 0 or i == 1 or \
|
|
|
+ (last_merged_kline['high'] >= current_kline['high'] and last_merged_kline['low'] <= current_kline['low']) or \
|
|
|
+ (last_merged_kline['high'] <= current_kline['high'] and last_merged_kline['low'] >= current_kline['low']):
|
|
|
+
|
|
|
+ if last_merged_kline['close'] > last_merged_kline['open']:
|
|
|
+ last_merged_kline['high'] = max(last_merged_kline['high'], current_kline['high'])
|
|
|
+ last_merged_kline['low'] = max(last_merged_kline['low'], current_kline['low'])
|
|
|
+ else:
|
|
|
+ last_merged_kline['high'] = min(last_merged_kline['high'], current_kline['high'])
|
|
|
+ last_merged_kline['low'] = min(last_merged_kline['low'], current_kline['low'])
|
|
|
+ else:
|
|
|
+
|
|
|
+ merged_data.append(current_kline)
|
|
|
+ df_day = pd.DataFrame(merged_data).reset_index(drop=True)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ df_day['HL'] = np.nan
|
|
|
+ try:
|
|
|
+ if len(df_day.index) > 2:
|
|
|
+
|
|
|
+ for x in range(2, len(df_day.index)):
|
|
|
+ m = x - 1
|
|
|
+
|
|
|
+
|
|
|
+ if ((df_day.loc[x, 'high'] > df_day.loc[x - 1, 'high']) and
|
|
|
+ (df_day.loc[x - 2, 'high'] > df_day.loc[x - 1, 'high'])):
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L*'
|
|
|
+
|
|
|
+ while m:
|
|
|
+ if df_day.loc[m, 'HL'] in ['H', 'HH', 'H*']:
|
|
|
+ if (x - m) > 3:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 1
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[m, 'HL'] = 'H*'
|
|
|
+ break
|
|
|
+
|
|
|
+ elif df_day.loc[m, 'HL'] in ['L', 'LL', 'L*']:
|
|
|
+ if df_day.loc[m - 1, 'low'] > df_day.loc[x - 1, 'low']:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+ df_day.loc[m, 'HL'] = '-'
|
|
|
+
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 1
|
|
|
+
|
|
|
+
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
+
|
|
|
+
|
|
|
+ if m_macd_dif < x_macd_dif:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'LL'
|
|
|
+ break
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ break
|
|
|
+ m = m - 1
|
|
|
+ if m == 0:
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+
|
|
|
+
|
|
|
+ elif ((df_day.loc[x, 'high'] < df_day.loc[x - 1, 'high']) and (
|
|
|
+ df_day.loc[x - 2, 'high'] < df_day.loc[x - 1, 'high'])):
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H*'
|
|
|
+ while m:
|
|
|
+ if df_day.loc[m, 'HL'] in ['L', 'LL', 'L*']:
|
|
|
+ if x - m > 3:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 2
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[m, 'HL'] = 'L*'
|
|
|
+ break
|
|
|
+
|
|
|
+ elif df_day.loc[m, 'HL'] in ['H', 'HH', 'H*']:
|
|
|
+ if df_day.loc[x - 1, 'high'] > df_day.loc[m - 1, 'high']:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+ df_day.loc[m, 'HL'] = '-'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 2
|
|
|
+
|
|
|
+
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
+
|
|
|
+
|
|
|
+ if x_macd_dif < m_macd_dif:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'HH'
|
|
|
+ break
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ break
|
|
|
+ m = m - 1
|
|
|
+ if m == 0:
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+
|
|
|
+ else:
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ except BaseException as e:
|
|
|
+ print('errrrr', e)
|
|
|
+
|
|
|
+ df_temp = df_day[['time', 'HL']]
|
|
|
+ return df_temp, trading_signals
|
|
|
+
|
|
|
+
|
|
|
+ def get_ddfx(data, data_temp, u):
|
|
|
+ df_day = data
|
|
|
+ if len(df_day.index) > 2:
|
|
|
+
|
|
|
+ for x in range(2, len(df_day.index)):
|
|
|
+ m = x - 1
|
|
|
+
|
|
|
+
|
|
|
+ if ((df_day.loc[x, 'high'] > df_day.loc[x - 1, 'high']) and
|
|
|
+ (df_day.loc[x - 2, 'high'] > df_day.loc[x - 1, 'high'])):
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L*'
|
|
|
+
|
|
|
+ while m:
|
|
|
+ if df_day.loc[m, 'HL'] in ['H', 'HH', 'H*']:
|
|
|
+ if (x - m) > 3:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 1
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[m, 'HL'] = 'H*'
|
|
|
+ break
|
|
|
+
|
|
|
+ elif df_day.loc[m, 'HL'] in ['L', 'LL', 'L*']:
|
|
|
+ if df_day.loc[m - 1, 'low'] > df_day.loc[x - 1, 'low']:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+ df_day.loc[m, 'HL'] = '-'
|
|
|
+
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 1
|
|
|
+
|
|
|
+
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
+
|
|
|
+
|
|
|
+ if m_macd_dif < x_macd_dif:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'LL'
|
|
|
+ break
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ break
|
|
|
+ m = m - 1
|
|
|
+ if m == 0:
|
|
|
+ df_day.loc[x, 'HL'] = 'L'
|
|
|
+
|
|
|
+
|
|
|
+ elif ((df_day.loc[x, 'high'] < df_day.loc[x - 1, 'high']) and (
|
|
|
+ df_day.loc[x - 2, 'high'] < df_day.loc[x - 1, 'high'])):
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H*'
|
|
|
+ while m:
|
|
|
+ if df_day.loc[m, 'HL'] in ['L', 'LL', 'L*']:
|
|
|
+ if x - m > 3:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 2
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[m, 'HL'] = 'L*'
|
|
|
+ break
|
|
|
+
|
|
|
+ elif df_day.loc[m, 'HL'] in ['H', 'HH', 'H*']:
|
|
|
+ if df_day.loc[x - 1, 'high'] > df_day.loc[m - 1, 'high']:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+ df_day.loc[m, 'HL'] = '-'
|
|
|
+
|
|
|
+ if x == len(df_day.index) - 1:
|
|
|
+ trading_signals = 2
|
|
|
+
|
|
|
+
|
|
|
+ x_macd_dif, x_macd_dea, x_macd_macd = data_temp.loc[x, 'dif'], data_temp.loc[x, 'dea'], \
|
|
|
+ data_temp.loc[x, 'macd']
|
|
|
+ m_macd_dif, m_macd_dea, m_macd_macd = data_temp.loc[m, 'dif'], data_temp.loc[m, 'dea'], \
|
|
|
+ data_temp.loc[m, 'macd']
|
|
|
+
|
|
|
+
|
|
|
+ if x_macd_dif < m_macd_dif:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = 'HH'
|
|
|
+ break
|
|
|
+ else:
|
|
|
+
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ break
|
|
|
+ m = m - 1
|
|
|
+ if m == 0:
|
|
|
+ df_day.loc[x, 'HL'] = 'H'
|
|
|
+
|
|
|
+ else:
|
|
|
+ df_day.loc[x, 'HL'] = '-'
|
|
|
+ data = df_day
|
|
|
+ print('44444444444444444', u)
|
|
|
+ print(data)
|