123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- from base_class import BaseVariableFunction
- from base_class import *
- baseclass = BaseVariableFunction(__file__)
- old_print = print
-
- def timestamped_print(*args, **kwargs):
- old_print(datetime.datetime.utcnow().replace(
- microsecond=0), *args, **kwargs)
- print = timestamped_print
- print('\n'*5)
- print(f"{'{:<6}'.format('enter')} ----------------NOTE-----------NOTE---------------")
- baseclass.makedirpath( baseclass.dalao_pnl_gmgn_path)
- baseclass.makedirpath(baseclass.dalao_total_ana_gmgn_path)
-
- def get_ana_data_lastdays( df, intervaldays=30):
- if len(df) == 0:
- return 0, 0, 0, 0, 0, 0, 0, 0, 0
-
- lastdf = df[df["last_active"] <= intervaldays]
- # 去除那些 只有卖没有买的
- lastdf = lastdf[lastdf['buy_sol'] != 0]
-
- # lastdf=lastdf[lastdf["profit_sol"] !=0]
-
- # 去除 buy_sol 过小的 < 0.2 sol
- lastdf = lastdf[lastdf['buy_sol'] >= 0.2]
- lastdf = lastdf.reset_index(drop=True)
-
-
- if len(lastdf) == 0:
- return 0, 0, 0, 0, 0, 0, 0, 0, 0
-
- _cost_sum = lastdf['buy_sol'].sum()
- _earn_sum = lastdf['profit_sol'].sum()
- _cost_median = lastdf['buy_sol'].median()
- _cost_mean = lastdf['buy_sol'].mean()
- _earnper = _earn_sum / _cost_sum if _cost_sum != 0 else -10
- _trans_amount = len(lastdf)
- lastdf['earn_percent'] = np.where(
- lastdf['buy_sol'] != 0,
- lastdf['profit_sol'] / lastdf['buy_sol'],
- -10,
- )
- earn_per_neg100_neg30 = len( lastdf[ (lastdf["earn_percent"] >=-1) & (lastdf["earn_percent"] <=-0.3 )] )
- earn_per_neg30_pos0 = len( lastdf[ (lastdf["earn_percent"] >-0.3 )& (lastdf["earn_percent"] <=0) ] )
- earn_per_pos0_pos100 = len( lastdf[( lastdf["earn_percent"] >0) & (lastdf["earn_percent"] <=1 ) ] )
- earn_per_pos100_posmax = len( lastdf[ lastdf["earn_percent"] >1 ] )
-
- earn_per_pos400_posmax = len( lastdf[ lastdf["earn_percent"] > 3 ] )
-
-
- earnmain_max = lastdf['profit_sol'].max()
- _earn_difmax_sum = _earn_sum - earnmain_max
- _cost_difmax_sum = _cost_sum - \
- lastdf[lastdf['profit_sol'] == earnmain_max]['buy_sol'].to_list()[0]
- _dif_earnper = (
- _earn_difmax_sum / _cost_difmax_sum if _cost_difmax_sum != 0 else -10
- )
-
-
- return (
- _cost_sum,
- _earn_sum,
- _earnper,
- _cost_difmax_sum,
- _earn_difmax_sum,
- _dif_earnper,
- _cost_median,
- _cost_mean,
- _trans_amount,
- earn_per_neg100_neg30,
- earn_per_neg30_pos0,
- earn_per_pos0_pos100,
- earn_per_pos100_posmax,
- earn_per_pos400_posmax,
-
- )
- def main():
- global arr_totalAnalysis
- for str_dalaoaddress_idx in range(0, len(arr_str_dalaoaddress)):
-
- str_dalaoaddress= arr_str_dalaoaddress[str_dalaoaddress_idx]
- print(f"enter str_dalaoaddress={str_dalaoaddress}")
- if not (baseclass.dalao_ori_pnl_gmgn_path / f"ori_gmgn_pnl_{str_dalaoaddress}.csv").exists():
- continue
-
- cur_df = pd.read_csv( baseclass.dalao_ori_pnl_gmgn_path / f"ori_gmgn_pnl_{str_dalaoaddress}.csv",dtype=object)
- arr_last_active = cur_df["last_active"].tolist()
- for idx , str_last_active in enumerate(arr_last_active ):
- if "min" in str_last_active or "h" in str_last_active or "s" in str_last_active:
- arr_last_active[idx] = "0"
- elif "d" in str_last_active:
- arr_last_active[idx] = str_last_active.replace("d","")
- cur_df["last_active"] = arr_last_active
- cur_df['30d_txns_buy'] = cur_df['30d_txns_buy'].str.replace(',', '')
- cur_df['30d_txns_sell'] = cur_df['30d_txns_sell'].str.replace(',', '')
- cur_df['profit_percent'] = cur_df['profit_percent'].str.replace('>', '')
-
- cur_df['30d_txns_buy'] = cur_df['30d_txns_buy'].str.replace("K", '000', regex=True)
- cur_df['30d_txns_sell'] = cur_df['30d_txns_sell'].str.replace("K", '000', regex=True)
-
- cur_df['30d_txns_buy'] = cur_df['30d_txns_buy'].str.replace(r'[,\.]', '', regex=True)
-
- cur_df['30d_txns_sell'] = cur_df['30d_txns_sell'].str.replace(r'[,\.]', '', regex=True)
-
-
-
-
-
- cur_df = cur_df.astype({
- "last_active" : int ,
- "profit_sol" : float ,
- "profit_percent" : float ,
- "buy_sol" : float ,
- "sell_sol" : float ,
- "30d_txns_buy" : int ,
- "30d_txns_sell": int ,
-
- })
- cur_df = cur_df[ cur_df["last_active"]<=30].reset_index(drop=True)
- cur_df=cur_df[cur_df["profit_sol"] !=0].reset_index(drop=True)
- cur_df=cur_df[cur_df["30d_txns_buy"] !=0].reset_index(drop=True)
-
- cur_df.to_csv( baseclass.dalao_pnl_gmgn_path / f"gmgn_pnl_{str_dalaoaddress}.csv",index = False )
-
- (_07d_cost, _07d_earn, _07d_earnper, _07d_difcost, _07d_difearn, _07d_difper,
- _07d_costmedian, _07d_costmean, _07d_trans , _07d_earn_per_neg100_neg30,
- _07d_earn_per_neg30_pos0, _07d_earn_per_pos0_pos100,
- _07d_earn_per_pos100_posmax, _07d_earn_per_pos400_posmax , ) = get_ana_data_lastdays( df=cur_df, intervaldays=7)
-
- # (_15d_cost, _15d_earn, _15d_earnper, _15d_difcost, _15d_difearn, _15d_difper,
- # _15d_costmedian, _15d_costmean, _15d_trans , ) = get_ana_data_lastdays( df=cur_df, intervaldays=15)
-
- (_30d_cost, _30d_earn, _30d_earnper, _30d_difcost, _30d_difearn, _30d_difper,
- _30d_costmedian, _30d_costmean, _30d_trans , _30d_earn_per_neg100_neg30,
- _30d_earn_per_neg30_pos0, _30d_earn_per_pos0_pos100,
- _30d_earn_per_pos100_posmax, _30d_earn_per_pos400_posmax , ) = get_ana_data_lastdays( df=cur_df, intervaldays=30)
-
- arr_one_ana_data = [
- str_dalaoaddress,
- f"https://gmgn.ai/sol/address/{str_dalaoaddress}",
- "",
-
- _07d_cost,
- _07d_earn,
- _07d_earnper,
- _07d_difcost,
- _07d_difearn,
- _07d_difper,
- _07d_costmedian,
- _07d_costmean,
- _07d_trans,
- _07d_earn_per_neg100_neg30,
- _07d_earn_per_neg30_pos0,
- _07d_earn_per_pos0_pos100,
- _07d_earn_per_pos100_posmax,
- (_07d_earn_per_pos100_posmax -_07d_earn_per_neg100_neg30 ) / _07d_trans,
- (_07d_earn_per_pos400_posmax *2 + _07d_earn_per_pos100_posmax - _07d_earn_per_pos400_posmax -_07d_earn_per_neg100_neg30 ) / _07d_trans,
-
- _30d_cost,
- _30d_earn,
- _30d_earnper,
- _30d_difcost,
- _30d_difearn,
- _30d_difper,
- _30d_costmedian,
- _30d_costmean,
- _30d_trans,
- _30d_earn_per_neg100_neg30,
- _30d_earn_per_neg30_pos0,
- _30d_earn_per_pos0_pos100,
- _30d_earn_per_pos100_posmax,
- (_30d_earn_per_pos100_posmax -_30d_earn_per_neg100_neg30 )/ _30d_trans,
- (_30d_earn_per_pos400_posmax *2 + _30d_earn_per_pos100_posmax - _30d_earn_per_pos400_posmax -_30d_earn_per_neg100_neg30 ) / _30d_trans,
-
-
- ]
- arr_totalAnalysis.append(arr_one_ana_data)
- if len(arr_totalAnalysis )%50==0:
- save_total_ana_df()
-
- TotalAnalysis_columns = [
- "add",
- "url",
- "beizhu",
-
- "07d_cost",
- "07d_earn",
- "07d_earnper",
- "07d_difcost",
- "07d_difearn",
- "07d_difper",
- "07d_costmedian",
- "07d_costmean",
- "07d_trans",
- "07d_earn_per_neg100_neg30",
- "07d_earn_per_neg30_pos0",
- "07d_earn_per_pos0_pos100",
- "07d_earn_per_pos100_posmax",
- "07d_earn_pos_dif",
- "07d_earn_pos_dif_4x",
-
-
- "30d_cost",
- "30d_earn",
- "30d_earnper",
- "30d_difcost",
- "30d_difearn",
- "30d_difper",
- "30d_costmedian",
- "30d_costmean",
- "30d_trans",
- "30d_earn_per_neg100_neg30",
- "30d_earn_per_neg30_pos0",
- "30d_earn_per_pos0_pos100",
- "30d_earn_per_pos100_posmax",
- "30d_earn_pos_dif",
- "30d_earn_pos_dif_4x",
-
- ]
- def save_total_ana_df():
- cur_time = int(time.time())
- # cur_time=cur_time/1000
-
- TotalAnalysis_df = pd.DataFrame(
- data=arr_totalAnalysis, columns=TotalAnalysis_columns
- )
- TotalAnalysis_df = TotalAnalysis_df.round(4)
- TotalAnalysis_df = TotalAnalysis_df.sort_values(by=["add"], ascending=[
- True]).reset_index(drop=True)
-
-
- TotalAnalysis_df.to_excel(
- baseclass.dalao_total_ana_gmgn_path/f"totalana.xlsx", index=False)
-
- df = pd.read_excel( baseclass.dalao_merge_defined_path / f"merge_defined.xlsx", dtype=object)
- arr_str_dalaoaddress = df['dalaoaddress'].drop_duplicates().tolist()
- # arr_str_dalaoaddress= [ "21fPp88HFomebzssP3qLriHHQDw7NQxJ1SoHpgvGENLd"]
- arr_totalAnalysis = []
-
- main()
- save_total_ana_df()
-
-
- print(f"{'{:<6}'.format('END')} ----------------NOTE-----------NOTE---------------")
|