analyze_contradiction.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import pandas as pd
  2. df = pd.read_csv('cyb50_optimized_trades_2017-06-01_2026-01-19.csv')
  3. print("盈亏与收益率矛盾分析:")
  4. print("=" * 80)
  5. # 计算累计盈亏
  6. total_pnl = df['盈亏金额'].sum()
  7. print(f"记录的累计盈亏: {total_pnl:,.2f}元")
  8. # 计算资金变化
  9. initial_capital = 1000000
  10. final_capital = df.iloc[-1]['平仓时总资金']
  11. actual_return = final_capital - initial_capital
  12. print(f"实际资金变化: {actual_return:,.2f}元")
  13. print(f"差异: {abs(total_pnl - actual_return):,.2f}元")
  14. # 分析原因
  15. print(f"\n矛盾原因分析:")
  16. print(f"初始资金: {initial_capital:,.2f}元")
  17. print(f"最终资金: {final_capital:,.2f}元")
  18. print(f"理论最终资金: {initial_capital + total_pnl:,.2f}元 (如果盈亏记录准确)")
  19. # 检查每一笔交易的资金连续性
  20. print(f"\n逐笔交易资金分析:")
  21. cash_discrepancies = []
  22. for i in range(1, len(df)):
  23. prev_final = df.iloc[i-1]['平仓时总资金']
  24. curr_initial = df.iloc[i]['开仓时总资金']
  25. if abs(prev_final - curr_initial) > 1:
  26. cash_discrepancies.append({
  27. 'trade': i+1,
  28. 'prev_final': prev_final,
  29. 'curr_initial': curr_initial,
  30. 'diff': abs(prev_final - curr_initial)
  31. })
  32. if cash_discrepancies:
  33. print(f"发现{len(cash_discrepancies)}笔资金不连续:")
  34. for item in cash_discrepancies[:5]:
  35. print(f" 交易#{item['trade']}: {item['prev_final']:,.2f} -> {item['curr_initial']:,.2f} (差异: {item['diff']:,.2f})")
  36. else:
  37. print("资金连续性检查通过")
  38. # 检查盈亏计算的准确性
  39. print(f"\n盈亏计算准确性:")
  40. pnl_errors = 0
  41. for i, row in df.iterrows():
  42. # 计算理论盈亏
  43. gross_pnl = (row['卖出价格'] - row['买入价格']) * row['持仓数量']
  44. exit_cost = row['平仓市值'] * 0.0004 # 卖出成本
  45. theoretical_pnl = gross_pnl - exit_cost
  46. if abs(theoretical_pnl - row['盈亏金额']) > 100: # 允许100元误差
  47. pnl_errors += 1
  48. if pnl_errors <= 3:
  49. print(f" 交易#{int(row['交易编号'])}: 记录{row['盈亏金额']:.2f} vs 理论{theoretical_pnl:.2f}")
  50. if pnl_errors == 0:
  51. print("盈亏计算基本准确")
  52. else:
  53. print(f"发现{pnl_errors}笔盈亏计算可能不准确")
  54. print(f"\n根本原因:")
  55. print(f"累计盈亏记录的是{total_pnl:,.2f}元")
  56. print(f"但实际资金只增长了{actual_return:,.2f}元")
  57. print(f"差异为{abs(total_pnl - actual_return):,.2f}元")
  58. print(f"\n这说明盈亏计算或资金记录存在系统性偏差")