2004_gmgn_handle_ori_pnl.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. from base_class import BaseVariableFunction
  2. from base_class import *
  3. baseclass = BaseVariableFunction(__file__)
  4. old_print = print
  5. def timestamped_print(*args, **kwargs):
  6. old_print(datetime.datetime.utcnow().replace(
  7. microsecond=0), *args, **kwargs)
  8. print = timestamped_print
  9. print('\n'*5)
  10. print(f"{'{:<6}'.format('enter')} ----------------NOTE-----------NOTE---------------")
  11. baseclass.makedirpath( baseclass.dalao_pnl_gmgn_path)
  12. baseclass.makedirpath(baseclass.dalao_total_ana_gmgn_path)
  13. def get_ana_data_lastdays( df, intervaldays=30):
  14. if len(df) == 0:
  15. return 0, 0, 0, 0, 0, 0, 0, 0, 0
  16. lastdf = df[df["last_active"] <= intervaldays]
  17. # 去除那些 只有卖没有买的
  18. lastdf = lastdf[lastdf['buy_sol'] != 0]
  19. # lastdf=lastdf[lastdf["profit_sol"] !=0]
  20. # 去除 buy_sol 过小的 < 0.2 sol
  21. lastdf = lastdf[lastdf['buy_sol'] >= 0.2]
  22. lastdf = lastdf.reset_index(drop=True)
  23. if len(lastdf) == 0:
  24. return 0, 0, 0, 0, 0, 0, 0, 0, 0
  25. _cost_sum = lastdf['buy_sol'].sum()
  26. _earn_sum = lastdf['profit_sol'].sum()
  27. _cost_median = lastdf['buy_sol'].median()
  28. _cost_mean = lastdf['buy_sol'].mean()
  29. _earnper = _earn_sum / _cost_sum if _cost_sum != 0 else -10
  30. _trans_amount = len(lastdf)
  31. lastdf['earn_percent'] = np.where(
  32. lastdf['buy_sol'] != 0,
  33. lastdf['profit_sol'] / lastdf['buy_sol'],
  34. -10,
  35. )
  36. earn_per_neg100_neg30 = len( lastdf[ (lastdf["earn_percent"] >=-1) & (lastdf["earn_percent"] <=-0.3 )] )
  37. earn_per_neg30_pos0 = len( lastdf[ (lastdf["earn_percent"] >-0.3 )& (lastdf["earn_percent"] <=0) ] )
  38. earn_per_pos0_pos100 = len( lastdf[( lastdf["earn_percent"] >0) & (lastdf["earn_percent"] <=1 ) ] )
  39. earn_per_pos100_posmax = len( lastdf[ lastdf["earn_percent"] >1 ] )
  40. earn_per_pos400_posmax = len( lastdf[ lastdf["earn_percent"] > 3 ] )
  41. earnmain_max = lastdf['profit_sol'].max()
  42. _earn_difmax_sum = _earn_sum - earnmain_max
  43. _cost_difmax_sum = _cost_sum - \
  44. lastdf[lastdf['profit_sol'] == earnmain_max]['buy_sol'].to_list()[0]
  45. _dif_earnper = (
  46. _earn_difmax_sum / _cost_difmax_sum if _cost_difmax_sum != 0 else -10
  47. )
  48. return (
  49. _cost_sum,
  50. _earn_sum,
  51. _earnper,
  52. _cost_difmax_sum,
  53. _earn_difmax_sum,
  54. _dif_earnper,
  55. _cost_median,
  56. _cost_mean,
  57. _trans_amount,
  58. earn_per_neg100_neg30,
  59. earn_per_neg30_pos0,
  60. earn_per_pos0_pos100,
  61. earn_per_pos100_posmax,
  62. earn_per_pos400_posmax,
  63. )
  64. def main():
  65. global arr_totalAnalysis
  66. for str_dalaoaddress_idx in range(0, len(arr_str_dalaoaddress)):
  67. str_dalaoaddress= arr_str_dalaoaddress[str_dalaoaddress_idx]
  68. print(f"enter str_dalaoaddress={str_dalaoaddress}")
  69. if not (baseclass.dalao_ori_pnl_gmgn_path / f"ori_gmgn_pnl_{str_dalaoaddress}.csv").exists():
  70. continue
  71. cur_df = pd.read_csv( baseclass.dalao_ori_pnl_gmgn_path / f"ori_gmgn_pnl_{str_dalaoaddress}.csv",dtype=object)
  72. arr_last_active = cur_df["last_active"].tolist()
  73. for idx , str_last_active in enumerate(arr_last_active ):
  74. if "min" in str_last_active or "h" in str_last_active or "s" in str_last_active:
  75. arr_last_active[idx] = "0"
  76. elif "d" in str_last_active:
  77. arr_last_active[idx] = str_last_active.replace("d","")
  78. cur_df["last_active"] = arr_last_active
  79. cur_df['30d_txns_buy'] = cur_df['30d_txns_buy'].str.replace(',', '')
  80. cur_df['30d_txns_sell'] = cur_df['30d_txns_sell'].str.replace(',', '')
  81. cur_df['profit_percent'] = cur_df['profit_percent'].str.replace('>', '')
  82. cur_df['30d_txns_buy'] = cur_df['30d_txns_buy'].str.replace("K", '000', regex=True)
  83. cur_df['30d_txns_sell'] = cur_df['30d_txns_sell'].str.replace("K", '000', regex=True)
  84. cur_df['30d_txns_buy'] = cur_df['30d_txns_buy'].str.replace(r'[,\.]', '', regex=True)
  85. cur_df['30d_txns_sell'] = cur_df['30d_txns_sell'].str.replace(r'[,\.]', '', regex=True)
  86. cur_df = cur_df.astype({
  87. "last_active" : int ,
  88. "profit_sol" : float ,
  89. "profit_percent" : float ,
  90. "buy_sol" : float ,
  91. "sell_sol" : float ,
  92. "30d_txns_buy" : int ,
  93. "30d_txns_sell": int ,
  94. })
  95. cur_df = cur_df[ cur_df["last_active"]<=30].reset_index(drop=True)
  96. cur_df=cur_df[cur_df["profit_sol"] !=0].reset_index(drop=True)
  97. cur_df=cur_df[cur_df["30d_txns_buy"] !=0].reset_index(drop=True)
  98. cur_df.to_csv( baseclass.dalao_pnl_gmgn_path / f"gmgn_pnl_{str_dalaoaddress}.csv",index = False )
  99. (_07d_cost, _07d_earn, _07d_earnper, _07d_difcost, _07d_difearn, _07d_difper,
  100. _07d_costmedian, _07d_costmean, _07d_trans , _07d_earn_per_neg100_neg30,
  101. _07d_earn_per_neg30_pos0, _07d_earn_per_pos0_pos100,
  102. _07d_earn_per_pos100_posmax, _07d_earn_per_pos400_posmax , ) = get_ana_data_lastdays( df=cur_df, intervaldays=7)
  103. # (_15d_cost, _15d_earn, _15d_earnper, _15d_difcost, _15d_difearn, _15d_difper,
  104. # _15d_costmedian, _15d_costmean, _15d_trans , ) = get_ana_data_lastdays( df=cur_df, intervaldays=15)
  105. (_30d_cost, _30d_earn, _30d_earnper, _30d_difcost, _30d_difearn, _30d_difper,
  106. _30d_costmedian, _30d_costmean, _30d_trans , _30d_earn_per_neg100_neg30,
  107. _30d_earn_per_neg30_pos0, _30d_earn_per_pos0_pos100,
  108. _30d_earn_per_pos100_posmax, _30d_earn_per_pos400_posmax , ) = get_ana_data_lastdays( df=cur_df, intervaldays=30)
  109. arr_one_ana_data = [
  110. str_dalaoaddress,
  111. f"https://gmgn.ai/sol/address/{str_dalaoaddress}",
  112. "",
  113. _07d_cost,
  114. _07d_earn,
  115. _07d_earnper,
  116. _07d_difcost,
  117. _07d_difearn,
  118. _07d_difper,
  119. _07d_costmedian,
  120. _07d_costmean,
  121. _07d_trans,
  122. _07d_earn_per_neg100_neg30,
  123. _07d_earn_per_neg30_pos0,
  124. _07d_earn_per_pos0_pos100,
  125. _07d_earn_per_pos100_posmax,
  126. (_07d_earn_per_pos100_posmax -_07d_earn_per_neg100_neg30 ) / _07d_trans,
  127. (_07d_earn_per_pos400_posmax *2 + _07d_earn_per_pos100_posmax - _07d_earn_per_pos400_posmax -_07d_earn_per_neg100_neg30 ) / _07d_trans,
  128. _30d_cost,
  129. _30d_earn,
  130. _30d_earnper,
  131. _30d_difcost,
  132. _30d_difearn,
  133. _30d_difper,
  134. _30d_costmedian,
  135. _30d_costmean,
  136. _30d_trans,
  137. _30d_earn_per_neg100_neg30,
  138. _30d_earn_per_neg30_pos0,
  139. _30d_earn_per_pos0_pos100,
  140. _30d_earn_per_pos100_posmax,
  141. (_30d_earn_per_pos100_posmax -_30d_earn_per_neg100_neg30 )/ _30d_trans,
  142. (_30d_earn_per_pos400_posmax *2 + _30d_earn_per_pos100_posmax - _30d_earn_per_pos400_posmax -_30d_earn_per_neg100_neg30 ) / _30d_trans,
  143. ]
  144. arr_totalAnalysis.append(arr_one_ana_data)
  145. if len(arr_totalAnalysis )%50==0:
  146. save_total_ana_df()
  147. TotalAnalysis_columns = [
  148. "add",
  149. "url",
  150. "beizhu",
  151. "07d_cost",
  152. "07d_earn",
  153. "07d_earnper",
  154. "07d_difcost",
  155. "07d_difearn",
  156. "07d_difper",
  157. "07d_costmedian",
  158. "07d_costmean",
  159. "07d_trans",
  160. "07d_earn_per_neg100_neg30",
  161. "07d_earn_per_neg30_pos0",
  162. "07d_earn_per_pos0_pos100",
  163. "07d_earn_per_pos100_posmax",
  164. "07d_earn_pos_dif",
  165. "07d_earn_pos_dif_4x",
  166. "30d_cost",
  167. "30d_earn",
  168. "30d_earnper",
  169. "30d_difcost",
  170. "30d_difearn",
  171. "30d_difper",
  172. "30d_costmedian",
  173. "30d_costmean",
  174. "30d_trans",
  175. "30d_earn_per_neg100_neg30",
  176. "30d_earn_per_neg30_pos0",
  177. "30d_earn_per_pos0_pos100",
  178. "30d_earn_per_pos100_posmax",
  179. "30d_earn_pos_dif",
  180. "30d_earn_pos_dif_4x",
  181. ]
  182. def save_total_ana_df():
  183. cur_time = int(time.time())
  184. # cur_time=cur_time/1000
  185. TotalAnalysis_df = pd.DataFrame(
  186. data=arr_totalAnalysis, columns=TotalAnalysis_columns
  187. )
  188. TotalAnalysis_df = TotalAnalysis_df.round(4)
  189. TotalAnalysis_df = TotalAnalysis_df.sort_values(by=["add"], ascending=[
  190. True]).reset_index(drop=True)
  191. TotalAnalysis_df.to_excel(
  192. baseclass.dalao_total_ana_gmgn_path/f"totalana.xlsx", index=False)
  193. df = pd.read_excel( baseclass.dalao_merge_defined_path / f"merge_defined.xlsx", dtype=object)
  194. arr_str_dalaoaddress = df['dalaoaddress'].drop_duplicates().tolist()
  195. # arr_str_dalaoaddress= [ "21fPp88HFomebzssP3qLriHHQDw7NQxJ1SoHpgvGENLd"]
  196. arr_totalAnalysis = []
  197. main()
  198. save_total_ana_df()
  199. print(f"{'{:<6}'.format('END')} ----------------NOTE-----------NOTE---------------")