利用python炒股的收益策略

在今年股市大涨后,突然对股票有了一定的兴趣,于是采用python作为语言去对股票进行操作,用到的库是 akshare 。操作涉及两个方面,一个是选股,一个是买股和卖出。此策略是针对公司股票基本估值的一个买卖,最大程度上减少了与机构的博弈,关注的是股票本身的价值。

先上结果,这是利用股票数据建立数学模型后得到的。

该数据一共跑了 7 轮数据,4 轮数据从 20190101 - 20241011,3 轮数据从 20200101 - 20241011 ,时间跨度很大。收益率最高的还是策略 2,10 w本金 6 年 增长至 30.6 w。

选股

选股的策略是只选择前两年公司发展较好,公司在三年前已上市的股票(如 2019 年就只用 2018,2017 年发展较好且在2016年就已上市的股票),每一年选一次,一年一轮(相应的该策略下股票应当在年底进行抛售,无论当时股票的行情好与否)。

策略

卖出和买入的时机大致是通过市盈率来进行判断,在市盈率较高的时机抛出,在市盈率较低的时机买入。在实验中发现,股票的持有时间在40天-190天不等,虽然按照策略达不到最低点买入和最高点卖出,但卖出时基本都是盈利的。所以一旦出现买入信号,会直接购置股票的买入上限。

在实际操作中发现股票代码 00 开头的股票会出现某天严重下跌的情况,但又没办法抛开 00 的股票不进行操作,于是有了策略 2 ,对 00 开头的股票进行限购,限购 1500 股,其他的股票无限制。

选股代码

#股票连续三年ROE、EPS涨幅超过20的股票,陡然增长的股票不要
def xuangu_all():
    '''

    :param year: 多少年开始模拟
    :param N_year: 模拟数据提前知晓的财务报表年份
    :return:
    '''
    import akshare as ak
    import datetime
    
    year=2024
    today = datetime.datetime.today()
    now_year = today.year
    #选出价格在20-40之间的市盈率大于0的股票,选择存在三年以上的股票
    stock_zh_a_spot_em_df = ak.stock_zh_a_spot_em()
    print(stock_zh_a_spot_em_df)
    daixuan=[]
    # for i in range(len(stock_zh_a_spot_em_df)):
    #     if stock_zh_a_spot_em_df.loc[i,'最新价']<40 and stock_zh_a_spot_em_df.loc[i,'最新价']>20:
    #         if stock_zh_a_spot_em_df.loc[i,'市盈率-动态']>0:
    #             daixuan.append(stock_zh_a_spot_em_df.loc[i,'代码'])
    #
    for i in range(len(stock_zh_a_spot_em_df)):
        daixuan.append(stock_zh_a_spot_em_df.loc[i,'代码'])
    daixuan2=[]
    #未满三年的股票剔除,不满足ROE和EPS的股票剔除
    for num in range(len(daixuan)):
        # #三年前未入市的股票不要
        daily_data = ak.stock_zh_a_hist(symbol=daixuan[num], start_date=f'{year-3}0101',end_date=f'{year-3}0201')
        if len(daily_data)<10:
            continue

        print(num)
        data=ak.stock_financial_abstract_ths(daixuan[num],indicator='按年度')
        #财务报表小于5年的股票不要
        if len(data)<3:
            continue
        #算3年的ROE和EPS,看同比增长大于20的
        #EPS
        _time=2
        for N in range(1):
            N=now_year-year
            try:
                EPS = 0
                _EPS=[]
                for i in range(_time):
                    _EPS.append((float(data.loc[i+N,'基本每股收益'])-float(data.loc[i+1+N,'基本每股收益']))/float(data.loc[i+1+N,'基本每股收益']))
                    EPS+=(float(data.loc[i+N,'基本每股收益'])-float(data.loc[i+1+N,'基本每股收益']))/float(data.loc[i+1+N,'基本每股收益'])
                    if (float(data.loc[i+N,'基本每股收益'])-float(data.loc[i+1+N,'基本每股收益']))/float(data.loc[i+1+N,'基本每股收益'])<=0.1:
                        EPS=0
                        break
                EPS/=_time
                #ROE
                ROE=0
                _ROE=[]
                for i in range(_time):
                    _ROE.append(float(data.loc[i+N,'净资产收益率'][:-1]))
                    ROE+=float(data.loc[i+N,'净资产收益率'][:-1])
                    if float(data.loc[i+N,'净资产收益率'][:-1])<10:
                        ROE=0
                        break
                ROE/=_time
            except:
                continue
            print('EPS',EPS,'ROE',ROE)
            if EPS>=0.25 and ROE>=25:
                daixuan2.append(daixuan[num])
                print(daixuan2)
                with open('xuangu.txt','w')as f:
                    for i in daixuan2:
                        f.write(i+'\n')

                break

    print('done')
    return daixuan2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值