From b78d65fb537e03a7cb35aa712965f4d1eb41d1b5 Mon Sep 17 00:00:00 2001 From: dsyoon Date: Mon, 23 Jan 2023 17:27:01 +0900 Subject: [PATCH] init --- Bithumb_minute.py | 56 +++++++++++++++++++++------------------- bithumb/Bithumb_daily.py | 4 ++- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/Bithumb_minute.py b/Bithumb_minute.py index eebe104..2e69c3d 100644 --- a/Bithumb_minute.py +++ b/Bithumb_minute.py @@ -594,12 +594,14 @@ class Bithumb_minute(HTS): bsLine['buy'][i] = buy bsLine['buy_weight'][i] = 0.1 + """ + if data1['slow_k'][i] < 20 and data1['slow_k'][i - 1] < data1['slow_d'][i - 1] and data1['slow_d'][i] < data1['slow_k'][i]: buy = data1['low'][i] data1['buy'][i] = buy bsLine['buy'][i] = buy bsLine['buy_weight'][i] = 0.3 - """ + if data2['slow_k'][i] < 30: if data1['slow_k'][i] < 30 and data1['avg5'][i] < data1['close'][i]: @@ -631,29 +633,16 @@ class Bithumb_minute(HTS): df.set_index('datetime', inplace=True) return df - def cancel_order(self, log_filename, min=10): - tmp_transactions = [] - if os.path.exists(log_filename): - with open(log_filename, 'r', encoding='utf-8') as log_file: - rd = csv.reader(log_file) - for line in rd: - tmp_transactions.append(line) + def cancel_order(self, log_df, min=10): + df = log_df[pd.DatetimeIndex(log_df.index).minute >= min] + df.reset_index() - transactions = [] - for tmp_transaction in tmp_transactions: - if tmp_transaction[0] == 'buy': - diff = datetime.now() - datetime.strptime(tmp_transaction[1], '%Y-%m-%d %H:%M:%S') - if 60*min < diff.seconds: - order = (tmp_transaction[2], tmp_transaction[3], tmp_transaction[4], tmp_transaction[5]) - cancel = self.bithumb.cancel_order(order) - continue - transactions.append(tmp_transaction) - - with open(log_filename, 'w', newline='', encoding='utf-8') as log_file: - wr = csv.writer(log_file) - for transaction in transactions: - wr.writerow(transaction) + if df is not None: + for i in range(len(df)): + order = (df['order0'][i], df['order1'][i], df['order2'][i], df['order3'][i]) + cancel = self.bithumb.cancel_order(order) + log_df = log_df[pd.DatetimeIndex(log_df.index).minute < min] return def getStock(self, ticker, analyzed_day, minute=5): @@ -703,9 +692,16 @@ class Bithumb_minute(HTS): if len(stock1.index) > 10: today = datetime.today().strftime('%Y%m%d') log_filename = os.path.join(RESOURCE_PATH, 'order', "bithumb"+"_"+today + '.log') + if os.path.exists(log_filename): + log_df = pd.read_csv(log_filename) + log_df.columns = ["type", "datetime", "order0", "order1", "order2", "order3", "slow_k", "price", "count"] + else: + log_df = pd.DataFrame(columns=["type", "datetime", "order0", "order1", "order2", "order3", "slow_k", "price", "count"]) + log_df['datetime'] = pd.to_datetime(log_df['datetime'], unit='s') + log_df.set_index('datetime', inplace=True) # 10분이 지난 미체결은 취소한다. - self.cancel_order(log_filename, 10) + self.cancel_order(log_df, 10) if isRealTime: if max(bsLine['buy'][len(bsLine['buy']) - 2:]) > 100: tmp = self.bithumb.get_balance(ticker) @@ -715,9 +711,10 @@ class Bithumb_minute(HTS): # order: ('bid', 'BTC', 'C0101000000322993432', 'KRW') print(ticker, "/", datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "/", stock1['close'][len(stock1['close']) - 1], "/ BUY / ", stock1['slow_k'][len(stock1['slow_k']) - 1], "/", bsLine['buy'][len(bsLine['buy']) - 1], "/", count) - with open(log_filename, 'a', newline='', encoding='utf-8') as log_file: - wr = csv.writer(log_file) - wr.writerow(["buy", datetime.now().strftime('%Y-%m-%d %H:%M:%S'), order[0], order[1], order[2], order[3]]) + log_df.append({"type": "buy", "datetime": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "order0": order[0], "order1": order[1], "order2": order[2], "order3": order[3], "slow_k": stock1['slow_k'][len(stock1['slow_k']) - 1], "price": bsLine['buy'][len(bsLine['buy']) - 1], "count": count}, ignore_index=True) + log_df['datetime'] = pd.to_datetime(log_df['datetime'], unit='s') + log_df.set_index('datetime', inplace=True) + log_df.to_csv(log_filename, index=False) dirName = os.path.join(RESOURCE_PATH, 'analysis', 'bithumb') self.writeFile(dirName, ticker, stock1, bsLine, datetime.now().strftime('%Y%m%d %H%M%S'), 'buy') @@ -728,7 +725,12 @@ class Bithumb_minute(HTS): return count = tmp[0] order = self.bithumb.sell_limit_order(ticker, bsLine['sell'][len(bsLine['sell'])-1], count) - print(ticker, "/", datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "/", stock1['close'][len(stock1['close']) - 1], "/ BUY / ", stock1['slow_k'][len(stock1['slow_k']) - 1], "/", bsLine['sell'][len(bsLine['sell']) - 1], "/", count) + print(ticker, "/", datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "/", stock1['close'][len(stock1['close']) - 1], "/ SELL / ", stock1['slow_k'][len(stock1['slow_k']) - 1], "/", bsLine['sell'][len(bsLine['sell']) - 1], "/", count) + + log_df.append({"type": "buy", "datetime": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "order0": order[0], "order1": order[1], "order2": order[2], "order3": order[3], "slow_k": stock1['slow_k'][len(stock1['slow_k']) - 1], "price": bsLine['buy'][len(bsLine['buy']) - 1], "count": count}, ignore_index=True) + log_df['datetime'] = pd.to_datetime(log_df['datetime'], unit='s') + log_df.set_index('datetime', inplace=True) + log_df.to_csv(log_filename, index=False) dirName = os.path.join(RESOURCE_PATH, 'analysis', 'bithumb') self.writeFile(dirName, ticker, stock1, bsLine, datetime.now().strftime('%Y%m%d %H%M%S'), 'sell') diff --git a/bithumb/Bithumb_daily.py b/bithumb/Bithumb_daily.py index f0981e3..55eea2a 100644 --- a/bithumb/Bithumb_daily.py +++ b/bithumb/Bithumb_daily.py @@ -629,6 +629,8 @@ class Bithumb_daily(HTS): if len(data.index) > 10: today = datetime.today().strftime('%Y%m%d') log_filename = os.path.join(RESOURCE_PATH, 'analysis', '', today + '.log') + + # realtime이고, 5분이내 매수 기록이 없다면 if isRealTime and not self.exist_buy(ticker, log_filename): if max(bsLine['buy'][len(bsLine['buy']) - 2:]) > 100: balance = self.getBalance(ticker) @@ -672,7 +674,7 @@ if __name__ == "__main__": except: time.sleep(30) continue - time.sleep(300) + time.sleep(10) else: for ticker in tickers: bithumb.buyRealTime(ticker, analyzed_day, isRealTime)