From a5a34b5407cac9ba59bdad88bb3b9323ee0c8b56 Mon Sep 17 00:00:00 2001 From: sodfbosjd4 <83521959+sodfbosjd4@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:05:19 +0430 Subject: [PATCH 1/6] Update stream.py --- Analysis/stream.py | 98 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 17 deletions(-) diff --git a/Analysis/stream.py b/Analysis/stream.py index 758e739..e454bdb 100644 --- a/Analysis/stream.py +++ b/Analysis/stream.py @@ -24,8 +24,11 @@ from Analysis import ichimoku connection = db.con_db() - - +#ebrahimi +acc=None +accuracy= pd.DataFrame(columns=['timeframe_id','coin_id','price','timestamp','position','highest','lowest','true/false']) +global num,step_a +num,step_a=0,0 def init_statics(): # this method work with n parameters and return stored CSVs in Static with 4 timeframes data_collector.generate_data("BTCUSDT", "ETHUSDT") @@ -85,13 +88,24 @@ async def stream_30min_candle(*symbols: str, socket: BinanceSocketManager): c_30m_data1 = await candle1_30min.recv() if c_30m_data0['k']['x']: data0_30min = append(data0_30min, symbols[0], "30min", c_30m_data0) - ichimoku.signal(data=data0_30min, gain=0.003, cost=1, coin_id=1, timeframe_id=1) + #ebrahimi + acc=ichimoku.signal(data=data0_30min, gain=0.003, cost=1, coin_id=1, timeframe_id=1) + trick=True count += 1 + highest=float(c_30m_data0['k']['h']) + lowest=float(c_30m_data0['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False if c_30m_data1['k']['x']: data1_30min = append(data1_30min, symbols[1], "30min", c_30m_data1) - ichimoku.signal(data=data1_30min, gain=0.003, cost=1, coin_id=2, timeframe_id=1) + #ebrahimi + acc=ichimoku.signal(data=data1_30min, gain=0.003, cost=1, coin_id=2, timeframe_id=1) + trick=True count += 1 - + highest=float(c_30m_data1['k']['h']) + lowest=float(c_30m_data1['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False # 30min sleep for new data if count == 2: count = 0 @@ -110,20 +124,29 @@ async def stream_1hour_candle(*symbols: str, socket: BinanceSocketManager): c_1h_data1 = await candle1_1hour.recv() if c_1h_data0['k']['x']: data0_1hour = append(data0_1hour, symbols[0], "1hour", c_1h_data0) - ichimoku.signal(data=data0_1hour, gain=0.003, cost=1, coin_id=1, timeframe_id=2) + #ebrahimi + acc=ichimoku.signal(data=data0_1hour, gain=0.003, cost=1, coin_id=1, timeframe_id=2) + trick=True count += 1 - + highest=float(c_1h_data0['k']['h']) + lowest=float(c_1h_data0['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False if c_1h_data1['k']['x']: data1_1hour = append(data1_1hour, symbols[1], "1hour", c_1h_data1) - ichimoku.signal(data=data1_1hour, gain=0.003, cost=1, coin_id=2, timeframe_id=2) + #ebrahimi + acc=ichimoku.signal(data=data1_1hour, gain=0.003, cost=1, coin_id=2, timeframe_id=2) + trick=True count += 1 - + highest=float(c_1h_data1['k']['h']) + lowest=float(c_1h_data1['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False # 1hour sleep for new data if count == 2: count = 0 await asyncio.sleep(3000) - async def stream_4hour_candle(*symbols: str, socket: BinanceSocketManager): count = 0 data0_4hour = pd.read_csv(f'Static/{symbols[0]}-4hour.csv') @@ -136,14 +159,24 @@ async def stream_4hour_candle(*symbols: str, socket: BinanceSocketManager): c_4h_data1 = await candle1_4hour.recv() if c_4h_data0['k']['x']: data0_4hour = append(data0_4hour, symbols[0], "4hour", c_4h_data0) - ichimoku.signal(data=data0_4hour, gain=0.003, cost=1, coin_id=1, timeframe_id=3) + #ebrahimi + acc=ichimoku.signal(data=data0_4hour, gain=0.003, cost=1, coin_id=1, timeframe_id=3) + trick=True count += 1 - + highest=float(c_4h_data0['k']['h']) + lowest=float(c_4h_data0['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False if c_4h_data1['k']['x']: data1_4hour = append(data1_4hour, symbols[1], "15min", c_4h_data1) - ichimoku.signal(data=data1_4hour, gain=0.003, cost=1, coin_id=2, timeframe_id=3) + #ebrahimi + acc=ichimoku.signal(data=data1_4hour, gain=0.003, cost=1, coin_id=2, timeframe_id=3) + trick=True count += 1 - + highest=float(c_4h_data1['k']['h']) + lowest=float(c_4h_data1['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False # sleep 4hours for new data if count == 2: count = 0 @@ -162,17 +195,32 @@ async def stream_1day_candle(*symbols: str, socket: BinanceSocketManager): c_1d_data1 = await candle1_1day.recv() if c_1d_data0['k']['x']: data0_1day = append(data0_1day, symbols[0], "1day", c_1d_data0) - ichimoku.signal(data=data0_1day, gain=0.003, cost=1, coin_id=1, timeframe_id=4) + #ebrahimi + acc=ichimoku.signal(data=data0_1day, gain=0.003, cost=1, coin_id=1, timeframe_id=4) + trick=True count += 1 + highest=float(c_1d_data0['k']['h']) + lowest=float(c_1d_data0['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False + + if c_1d_data1['k']['x']: data1_1day = append(data1_1day, symbols[1], "1day", c_1d_data1) - ichimoku.signal(data=data1_1day, gain=0.003, cost=1, coin_id=2, timeframe_id=4) + #ebrahimi + acc=ichimoku.signal(data=data1_1day, gain=0.003, cost=1, coin_id=2, timeframe_id=4) + trick=True count += 1 + highest=float(c_1d_data1['k']['h']) + lowest=float(c_1d_data1['k']['l']) + function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) + trick=False # sleep 24hour for new data if count == 2: count = 0 await asyncio.sleep(85000) - + #ebrahimi + async def stream(): # init statics for clean date @@ -188,3 +236,19 @@ async def stream(): # use this in main def run(): asyncio.run(stream()) +def function(acc,dataframe,trick,highest,lowest): + if trick == True: + acc.extend(['nan','nan','nan']) + dataframe.loc[num]=acc + step_a = num + num+=1 + if step_a>=0 : + dataframe.loc[num-1][-3] = highest + dataframe.loc[num-1][-2] = lowest + for xi in range(2,4): + if step_a>=xi-1: + if dataframe.loc[num-xi][-3] <= highest: + dataframe.loc[num-xi][-3] = highest + if dataframe.loc[num-xi][-2] >= lowest: + dataframe.loc[num-xi][-2] = lowest + From 4b8fa2c18ad232013d665c1377298652eaca8f1c Mon Sep 17 00:00:00 2001 From: sodfbosjd4 <83521959+sodfbosjd4@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:06:05 +0430 Subject: [PATCH 2/6] Update ichimoku.py --- Analysis/ichimoku.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Analysis/ichimoku.py b/Analysis/ichimoku.py index c3a1d11..cf8ae65 100644 --- a/Analysis/ichimoku.py +++ b/Analysis/ichimoku.py @@ -19,7 +19,8 @@ import numpy as np from Inc import db, functions from Telegram.Client.message import broadcast_messages - +#ebrahimi +import time connection = db.con_db() @@ -96,6 +97,8 @@ def check(): coin_id=coin_id, current_price=close, target_price=target_price, risk=result[1], position=position, timeframe_id=timeframe_id) + #mojtaba + return [timeframe_id,coin_id,close,time.time,position] # for transaction in future # users = functions.get_user_recommendation(connection, coin_id=coin_id, analysis_id=1, timeframe_id=timeframe_id) # for user in users: From 8cff3d9c055236d35dce966e2587ec9da3009d37 Mon Sep 17 00:00:00 2001 From: sodfbosjd4 <83521959+sodfbosjd4@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:09:43 +0430 Subject: [PATCH 3/6] Update functions.py --- Inc/functions.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Inc/functions.py b/Inc/functions.py index 66e57ac..e53daac 100644 --- a/Inc/functions.py +++ b/Inc/functions.py @@ -601,4 +601,15 @@ def set_accuracy(db_connection: MySQLConnection, recom_id: int, validity: int): db_connection.commit() except mysql.connector.Error as err: return "Something went wrong: {}".format(err) +#ebrahimi +def realtime_accuracy(db_connection:MySQLConnection,timeframe_id: int,timestamp,coin_id:int,accuracy:float): + cursor = db_connection.cursor() + try: + sql = "INSERT INTO accuracy (coine_id, timeframe ,timestamp, accuracy) VALUES (%s, %s ,%s , %s)" + val = (coin_id, timeframe_id,timestamp,accuracy) + cursor.execute(sql, val) + db_connection.commit() + except mysql.connector.Error as err: + return "Something went wrong: {}".format(err) + From 3f9a2a986f88ea7b344ddcfa14e363ff7f450025 Mon Sep 17 00:00:00 2001 From: sodfbosjd4 <83521959+sodfbosjd4@users.noreply.github.com> Date: Mon, 6 Sep 2021 21:12:39 +0430 Subject: [PATCH 4/6] Update functions.py --- Inc/functions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Inc/functions.py b/Inc/functions.py index e53daac..0c5d0db 100644 --- a/Inc/functions.py +++ b/Inc/functions.py @@ -605,8 +605,8 @@ def set_accuracy(db_connection: MySQLConnection, recom_id: int, validity: int): def realtime_accuracy(db_connection:MySQLConnection,timeframe_id: int,timestamp,coin_id:int,accuracy:float): cursor = db_connection.cursor() try: - sql = "INSERT INTO accuracy (coine_id, timeframe ,timestamp, accuracy) VALUES (%s, %s ,%s , %s)" - val = (coin_id, timeframe_id,timestamp,accuracy) + sql = "INSERT INTO accuracy (recom_id, accuracy) VALUES (%s , %s)" + val = (recom_id,accuracy) cursor.execute(sql, val) db_connection.commit() except mysql.connector.Error as err: From f4d38274af354b76377cfa3e9f26cced41201992 Mon Sep 17 00:00:00 2001 From: sodfbosjd4 <83521959+sodfbosjd4@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:50:14 +0430 Subject: [PATCH 5/6] Update stream.py --- Analysis/stream.py | 97 ++++++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 33 deletions(-) diff --git a/Analysis/stream.py b/Analysis/stream.py index e454bdb..5453d39 100644 --- a/Analysis/stream.py +++ b/Analysis/stream.py @@ -22,13 +22,8 @@ from Libraries import data_collector from Inc import db from Analysis import ichimoku - connection = db.con_db() -#ebrahimi -acc=None -accuracy= pd.DataFrame(columns=['timeframe_id','coin_id','price','timestamp','position','highest','lowest','true/false']) -global num,step_a -num,step_a=0,0 + def init_statics(): # this method work with n parameters and return stored CSVs in Static with 4 timeframes data_collector.generate_data("BTCUSDT", "ETHUSDT") @@ -77,6 +72,13 @@ def append(data: pd.DataFrame, symbol: str, timeframe: str, candle): # for now we have 2 coins and 2 parameters in future need loop for all coins # there is 4 functions for 4 timeframes after all used in main async async def stream_30min_candle(*symbols: str, socket: BinanceSocketManager): + #ebrahimi + global acc,accuracy + acc=None + accuracy= pd.DataFrame(columns=['timeframe_id','coin_id','price','timestamp','position','highest','lowest','true/false']) + global num,step_a + num,step_a=0,0 + trick=False count = 0 data0_30min = pd.read_csv(f'Static/{symbols[0]}-30min.csv') data1_30min = pd.read_csv(f'Static/{symbols[1]}-30min.csv') @@ -113,6 +115,13 @@ async def stream_30min_candle(*symbols: str, socket: BinanceSocketManager): async def stream_1hour_candle(*symbols: str, socket: BinanceSocketManager): + #ebrahimi + global acc,accuracy + acc=None + accuracy= pd.DataFrame(columns=['timeframe_id','coin_id','price','timestamp','position','highest','lowest','true/false']) + global num,step_a + num,step_a=0,0 + trick=False count = 0 data0_1hour = pd.read_csv(f'Static/{symbols[0]}-1hour.csv') data1_1hour = pd.read_csv(f'Static/{symbols[1]}-1hour.csv') @@ -148,6 +157,13 @@ async def stream_1hour_candle(*symbols: str, socket: BinanceSocketManager): await asyncio.sleep(3000) async def stream_4hour_candle(*symbols: str, socket: BinanceSocketManager): + #ebrahimi + global acc,accuracy + acc=None + accuracy= pd.DataFrame(columns=['timeframe_id','coin_id','price','timestamp','position','highest','lowest','true/false']) + global num,step_a + num,step_a=0,0 + trick=False count = 0 data0_4hour = pd.read_csv(f'Static/{symbols[0]}-4hour.csv') data1_4hour = pd.read_csv(f'Static/{symbols[1]}-4hour.csv') @@ -184,11 +200,17 @@ async def stream_4hour_candle(*symbols: str, socket: BinanceSocketManager): async def stream_1day_candle(*symbols: str, socket: BinanceSocketManager): + #ebrahimi + accuracy_1day0= pd.DataFrame(columns=['timeframe_id','coin_id','price','timestamp','position','highest','lowest','true/false']) + accuracy_1day1= pd.DataFrame(columns=['timeframe_id','coin_id','price','timestamp','position','highest','lowest','true/false']) + trick0,trick1=False,False + acc0,acc1=None,None + num0,num1=-1,-1 count = 0 data0_1day = pd.read_csv(f'Static/{symbols[0]}-1day.csv') data1_1day = pd.read_csv(f'Static/{symbols[1]}-1day.csv') - candle0_1day = socket.kline_socket(symbol=symbols[0], interval=Client.KLINE_INTERVAL_1DAY) - candle1_1day = socket.kline_socket(symbol=symbols[1], interval=Client.KLINE_INTERVAL_1DAY) + candle0_1day = socket.kline_socket(symbol=symbols[0], interval=Client.KLINE_INTERVAL_1MINUTE) + candle1_1day = socket.kline_socket(symbol=symbols[1], interval=Client.KLINE_INTERVAL_1MINUTE) async with candle0_1day, candle1_1day: while True: c_1d_data0 = await candle0_1day.recv() @@ -196,59 +218,68 @@ async def stream_1day_candle(*symbols: str, socket: BinanceSocketManager): if c_1d_data0['k']['x']: data0_1day = append(data0_1day, symbols[0], "1day", c_1d_data0) #ebrahimi - acc=ichimoku.signal(data=data0_1day, gain=0.003, cost=1, coin_id=1, timeframe_id=4) - trick=True + acc0=ichimoku.signal(data=data0_1day, gain=0.003, cost=1, coin_id=1, timeframe_id=4) + if acc0: + trick0=True + num0+=1 count += 1 - highest=float(c_1d_data0['k']['h']) - lowest=float(c_1d_data0['k']['l']) - function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) - trick=False - - if c_1d_data1['k']['x']: data1_1day = append(data1_1day, symbols[1], "1day", c_1d_data1) #ebrahimi - acc=ichimoku.signal(data=data1_1day, gain=0.003, cost=1, coin_id=2, timeframe_id=4) - trick=True + acc1=ichimoku.signal(data=data1_1day, gain=0.003, cost=1, coin_id=2, timeframe_id=4) + if acc1: + trick1=True + num1+=1 count += 1 highest=float(c_1d_data1['k']['h']) lowest=float(c_1d_data1['k']['l']) - function(acc=acc,dataframe=accuracy,trick=trick,highest=highest,lowest=lowest) - trick=False # sleep 24hour for new data if count == 2: count = 0 - await asyncio.sleep(85000) + function(acc=acc0,dataframe=accuracy_1day0,trick=trick0,highest=highest,lowest=lowest,num=num0) + function(acc=acc1,dataframe=accuracy_1day1,trick=trick1,highest=highest,lowest=lowest,num=num1) + await asyncio.sleep(1) #ebrahimi - - + trick0=False + trick1=False async def stream(): # init statics for clean date init_statics() client = await AsyncClient.create() bm = BinanceSocketManager(client) - await asyncio.gather(stream_30min_candle("BTCUSDT", "ETHUSDT", socket=bm), + await asyncio.gather( + stream_1day_candle("BTCUSDT", "ETHUSDT", socket=bm)) +'''stream_30min_candle("BTCUSDT", "ETHUSDT", socket=bm), stream_1hour_candle("BTCUSDT", "ETHUSDT", socket=bm), stream_4hour_candle("BTCUSDT", "ETHUSDT", socket=bm), - stream_1day_candle("BTCUSDT", "ETHUSDT", socket=bm)) - + interval=Client.KLINE_INTERVAL_1DAY''' # use this in main def run(): asyncio.run(stream()) -def function(acc,dataframe,trick,highest,lowest): - if trick == True: +def function(acc,dataframe,trick,highest,lowest,num): + if trick: acc.extend(['nan','nan','nan']) - dataframe.loc[num]=acc - step_a = num + dataframe.loc[num]=acc num+=1 - if step_a>=0 : + if num>=1 : dataframe.loc[num-1][-3] = highest dataframe.loc[num-1][-2] = lowest for xi in range(2,4): - if step_a>=xi-1: + if num>=xi: if dataframe.loc[num-xi][-3] <= highest: dataframe.loc[num-xi][-3] = highest if dataframe.loc[num-xi][-2] >= lowest: dataframe.loc[num-xi][-2] = lowest - + if xi==3: + if dataframe.loc[num-xi][-4] == 'buy': + if dataframe.loc[num-xi][2] >= dataframe.loc[num-xi][-3]: + dataframe.loc[num-xi][-1]=1 + else: + dataframe.loc[num-xi][-1]=0 + elif dataframe.loc[num-xi][-4] =='sell': + if dataframe.loc[num-xi][2] <= dataframe.loc[num-xi][-2]: + dataframe.loc[num-xi][-1]=1 + else: + dataframe.loc[num-xi][-1]=0 + print(dataframe) From ccf6ff588eb5220a02cfa08595b93e77dd1a65e1 Mon Sep 17 00:00:00 2001 From: sodfbosjd4 <83521959+sodfbosjd4@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:50:43 +0430 Subject: [PATCH 6/6] Update ichimoku.py --- Analysis/ichimoku.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Analysis/ichimoku.py b/Analysis/ichimoku.py index cf8ae65..ef47b9e 100644 --- a/Analysis/ichimoku.py +++ b/Analysis/ichimoku.py @@ -98,7 +98,7 @@ def check(): target_price=target_price, risk=result[1], position=position, timeframe_id=timeframe_id) #mojtaba - return [timeframe_id,coin_id,close,time.time,position] + return [timeframe_id,coin_id,close,time.time,position] # for transaction in future # users = functions.get_user_recommendation(connection, coin_id=coin_id, analysis_id=1, timeframe_id=timeframe_id) # for user in users: