成交分析

编程入门 行业动态 更新时间:2024-10-25 00:31:08

成交分析

成交分析

一条基本的交易记录包含以下几个部分:

  • trade_code:交易标的
  • trade_date:交易时间
  • trade_price:单价
  • trade_amount:成交数量
  • trade_direction:交易方向(buy/sell)
  • fee:成交手续费

根据成交记录,可以按照自己的分析方法得到交易结果,比如最基础的功能就是根据一组配对的buy与sell,得到本组交易的利润,其中:
收益 = 成交量 ∗ ( 卖出单价 − 买入单价 ) − ( 买入手续费 + 卖出手续费 ) 收益 = 成交量 * (卖出单价 - 买入单价) - (买入手续费+卖出手续费) 收益=成交量∗(卖出单价−买入单价)−(买入手续费+卖出手续费)

这里博主提供一种简单的方法,方便计算成交记录:

import pandas as pd
from loguru import logger
from copy import deepcopydef _reform_trade_detail(trade_df):"""结构化交易整合"""buy_hold_record_list = []history_trade_record = []trade_df = trade_df.sort_values(["trade_direction", "trade_date"])  # 买在上,卖在下for _record_info in trade_df.to_dict(orient="records"):buy_hold_record_list = [_ for _ in buy_hold_record_list if _ is not None]if _record_info['trade_direction'].strip() == "buy":  # 记录买入buy_hold_record_list.append(_record_info)elif _record_info['trade_direction'].strip() == "sell":  # 记录卖出del_buy_index = []for _buy_index, buy_record in enumerate(deepcopy(buy_hold_record_list)):  # 循环每一个买入记录if buy_record['trade_code'] != _record_info['trade_code']:continue# 当前 buy_record 足够卖出trade_amount = min(_record_info['trade_amount'], buy_record['trade_amount'])  # 当前撮合数量history_trade_record.append({"trade_code": _record_info['trade_code'],  # 代码"buy_date": buy_record['trade_date'],  # 买入时间"buy_price": buy_record['trade_price'],  # 买入时均价"buy_fee": buy_record['fee'],  # 买入手续费"sell_date": _record_info['trade_date'],  # 卖出时间"sell_price": _record_info['trade_price'],  # 卖出时价格"sell_fee": _record_info['fee'],  # 卖出手续费"amount": trade_amount,  # 交易数量# 收益 = 成交量 * (卖出单价 - 买入单价) - (买入手续费+卖出手续费)"trade_return": trade_amount * (_record_info['trade_price'] - buy_record['trade_price']) - (buy_record['fee'] + _record_info['fee']),})# 买单损耗buy_hold_record_list[_buy_index].update({"trade_amount": buy_hold_record_list[_buy_index]['trade_amount'] - trade_amount,})if buy_hold_record_list[_buy_index]["trade_amount"] == 0:del_buy_index.append(_buy_index)_record_info['trade_amount'] = _record_info['trade_amount'] - trade_amountif _record_info['trade_amount'] == 0:breakfor _del_i in del_buy_index:  # 替换del_buy_index中的内容为空buy_hold_record_list[_del_i] = Noneelse:logger.error(f"交易没有方向! {_record_info}")return buy_hold_record_list, history_trade_record

示例程序

比如对于保存成文件的交易记录trade_info.csv

trade_codetrade_datetrade_pricetrade_amounttrade_directionfee
000001.SZ2022/8/1012.061000buy0.2
000002.SZ2022/8/1917.011000buy0.3
000001.SZ2022/9/112.612000buy0.5
000002.SZ2022/9/1318.181000sell5.1
000004.SZ2022/9/159.82500buy0.6
000002.SZ2022/9/229.821500sell5.05
000001.SZ2022/9/112.59500sell5.01
import pandas as pdtrade_record = pd.read_csv("trade_info.csv")
buy_hold_record_list, history_trade_record = _reform_trade_detail(trade_record)

得到结果:

  • history_trade_record:成交记录

    trade_codebuy_datebuy_pricebuy_feesell_datesell_pricesell_feeamounttrade_return
    0000001.SZ2022/8/1012.060.22022/9/112.595.01500259.79
    1000002.SZ2022/8/1917.010.32022/9/1318.185.110001164.6
  • buy_hold_record_list:当前持仓情况

    trade_codetrade_datetrade_pricetrade_amounttrade_directionfee
    0000001.SZ2022/8/1012.06500buy0.2
    1000001.SZ2022/9/112.612000buy0.5
    2000004.SZ2022/9/159.82500buy0.6

更多推荐

成交分析

本文发布于:2023-11-16 02:40:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1611731.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!