correct_calculation.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. initial_capital = 1000000
  7. current_capital = initial_capital
  8. print(f"初始资金: {initial_capital:,.2f}元")
  9. for i in range(min(5, len(df))):
  10. row = df.iloc[i]
  11. # 开仓
  12. entry_value = row['开仓市值']
  13. entry_cost = entry_value * 0.0004
  14. capital_after_entry = current_capital - entry_value - entry_cost
  15. # 平仓
  16. exit_value = row['平仓市值']
  17. exit_cost = exit_value * 0.0004
  18. gross_pnl = (row['卖出价格'] - row['买入价格']) * row['持仓数量']
  19. net_pnl = gross_pnl - entry_cost - exit_cost
  20. capital_after_exit = capital_after_entry + exit_value - exit_cost
  21. print(f"\n交易#{i+1}:")
  22. print(f" 交易前资金: {current_capital:,.2f}元")
  23. print(f" 开仓: 买{entry_value:,.2f}元, 成本{entry_cost:.2f}元")
  24. print(f" 开仓后资金: {capital_after_entry:,.2f}元")
  25. print(f" 平仓: 卖{exit_value:,.2f}元, 成本{exit_cost:.2f}元")
  26. print(f" 毛盈亏: {gross_pnl:,.2f}元")
  27. print(f" 净盈亏: {net_pnl:,.2f}元")
  28. print(f" 平仓后资金: {capital_after_exit:,.2f}元")
  29. print(f" 记录盈亏: {row['盈亏金额']:,.2f}元")
  30. print(f" 盈亏差异: {net_pnl - row['盈亏金额']:.2f}元")
  31. current_capital = capital_after_exit
  32. print(f"\n验证计算:")
  33. print(f"5笔交易后计算资金: {current_capital:,.2f}元")
  34. print(f"5笔交易后记录资金: {df.iloc[4]['平仓时总资金']:,.2f}元")
  35. print(f"差异: {current_capital - df.iloc[4]['平仓时总资金']:.2f}元")
  36. # 问题是我们的代码在开仓时扣除了成本,但在平仓时又计算了包含开仓成本的盈亏
  37. print(f"\n结论:")
  38. print(f"当前代码逻辑: 开仓时扣除成本,平仓时盈亏计算又包含了成本")
  39. print(f"正确逻辑应该: 开仓时扣除成本,平仓时盈亏只计算价差和卖出成本")