分享

python量化交易编程:新手学量化

 追梦文库 2022-05-15

python量化交易编程自学:新手学量化,欢迎一起交流学习,共同进步

这个股票回溯是513060,今年跌幅很惨的恒生医疗ETF,跌幅在60%以上,股票数据来源于同花顺客户端历史交易记录。是按做T的模式设置的买卖点。每次1000股,靠做T赚取盈利

设置的股票买卖点:

买点:涨幅小于-0.5%以上

卖点:第二天收盘价格涨幅大于2%以上

交易日期:2021-3-29至2022-5-23

Python源码:

'''股票买卖策略:买入:股票涨幅小于-0.5%时买入卖出:查看尾盘价格,如果有持股部分涨幅超过2%时则卖出'''import pandas# 股票信息,来自同花顺历史记录from pandas import DataFramedata = pandas.DataFrame(pandas.read_excel('../1.xlsx'))# print(data)# 用于记录持仓信息stock_data = pandas.DataFrame(columns=['时间', '涨幅', '购买价格', '购买数量', '购买金额'])# 交易信息trade_data = pandas.DataFrame(columns=['购买时间', '购买价格', '购买数量', '购买金额', '卖出时间', '卖出价格', '卖出数量', '卖出金额', '做T盈利'])def buy_Stock(date: str = None, amount: float = None, price: float = None, num: int = None) -> DataFrame: '''买入股票''' money = round((price * num + price * num * 0.00025), 2) # 买入ETF金额,万2.5手续费 add_data = pandas.DataFrame({'时间': date, '涨幅': amount, '购买价格': price, '购买数量': num, '购买金额': money}, index=[1]) # 将买入的数据添加到末尾 new_data = stock_data.append(add_data, ignore_index=True) return new_datadef sell_Stock(date=None, date1=None, price=None, price1=None, money=None, num=None, num1=None): '''卖出股票 date:买入时间 date1:卖出时间 price 购买价格 price1 卖出价格 money: 购买金额 money1 购买金额 num买入数量 num1 卖出数量 ''' money1 = round((price1 * num1 - price1 * num1 * 0.00025), 2) # 卖出,减去万2.5的手续费 # 做T盈利金额 profit = money1 - money add_data = pandas.DataFrame({'购买时间': date, '购买价格': price, '购买数量': num, '购买金额': money, '卖出时间': date1, '卖出价格': price1, '卖出数量': num1, '卖出金额': money1, '做T盈利': profit}, index=[1]) # 将数据添加到交易数据信息表中 new_data = trade_data.append(add_data, ignore_index=True) # 获取卖出的数据 return new_datadef tactics(): ''' 交易策略:股票涨幅小于-0.05时,买入 持股部分涨幅大于0.02时,卖出盈利部分的持股 ''' global stock_data global trade_data # 循环股票数据 for row in range(data.index.max()): # 当股票涨幅小于-0.05if data.loc[row, '涨幅'] < -0.005: # 调用全局变量是需要用关键字global重新再次声明一次 # 买入股票,并得到持股数据 stock_data = buy_Stock(date=data.loc[row, '时间'], amount=data.loc[row, '涨幅'], price=data.loc[row, '收盘'], num=1000) else: # 循环查看买入的价格,如果收盘价比买入价格高百分之2以上,则卖出部分持股 # 循环持股数据,倒序循环 for i in range(len(stock_data) - 1, -1, -1): # 卖出价格 = 购买价格+ 购买价格*0.02 round 保留小数位 sell_pice = stock_data.loc[i, '购买价格'] + stock_data.loc[i, '购买价格'] * 0.02 # 卖出价格,大于当天收盘价格 if sell_pice < data.loc[row, '收盘']: trade_data = sell_Stock(date=stock_data.loc[i, '时间'], date1=data.loc[row, '时间'], price=stock_data.loc[i, '购买价格'], price1=data.loc[row, '收盘'], money=stock_data.loc[i, '购买金额'], num=stock_data.loc[i, '购买数量'], num1=stock_data.loc[i, '购买数量']) stock_data = stock_data.drop(index=i) # 删除数据后需要重建索引 stock_data.index = range(len(stock_data))tactics()# 计算总和,购买金额总和money_sum = stock_data['购买金额'].sum()#num_sum = stock_data['购买数量'].sum()stock_data = stock_data.append({'购买金额': money_sum, '购买数量': num_sum}, ignore_index=True)print(stock_data)trade_data.loc[trade_data.index.max() + 1, '做T盈利'] = trade_data['做T盈利'].sum()print(trade_data)# 将持股信息保存到Excel表格中stock_data.to_excel('持股数据.xlsx')trade_data.to_excel('交易股票数据.xlsx')

结论:

手中持仓总额度:40233.04元,持仓数量:50000股

持仓市值: 23750元 等于: 2022-5-23收盘价 0.475乘以持仓数量50000

持仓亏损: 16483.04元 = 40233.04元 - 23750元

做T收益:1766.95元 共卖出72次

实际亏损:14716.09元 =16483.04元-1766.95元

亏损率 -36%

做个假设,假如不算市值亏损的话,只算投入与做T收益,因为股市有涨有跌,跌的迟早会涨回来的。只是时间问题,这里只算做T收益的比例。它的收益就是:

1766.95元除以 40233.04元 百分之4.3的收益,一年零一个多月,这个收益也不是很高

况且账面价值是亏损的,99.99%的散户可能承受不了这个数据

恒生医疗ETF单边下跌,没有像样的反弹,能做T次数太少。

文章图片1

持仓表的部分交易数据

文章图片2

交易做T的部分交易数据

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约