返回介绍

第一部分 新手入门

第二部分 股票量化相关

第三部分 基金、利率互换、固定收益类

第四部分 衍生品相关

【基本面指标】Cash Cow

发布于 2022-02-20 22:26:13 字数 2340 浏览 752 评论 0 收藏 0

策略思路

每个季度,计算沪深300成分股资产负债表中的 现金及现金等价物/总资产 ,数值以最近一次披露的财报为准

清仓,选出该比率最大的前30只股票,将资金分成30份,分别买入

每60个交易日调仓一次

from heapq import nlargest
from datetime import timedelta

start = '2010-01-01'
end   = '2015-04-01'
benchmark = 'HS300'
universe = set_universe('HS300')
capital_base = 500000
refresh_rate = 60

def initialize(account):
    pass

def handle_data(account):
    cashpct = getCashPct(account.universe, account.current_date)
    buylist = nlargest(30, cashpct, key=cashpct.get)

    for stock in account.valid_secpos:
        order_to(stock, 0)

    for stock in buylist:
        order(stock, int(account.referencePortfolioValue/len(buylist)/account.referencePrice[stock]/100)*100)

def getCashPct(universe, date):
    start, end = (date - timedelta(weeks=26)).strftime('%Y%m%d'), date.strftime('%Y%m%d')
    N = len(universe)
    if N == 0:
        return None
    elif N <= 45:
        batches = [universe]
    else:
        batches = [universe[i:i+45] for i in range(0, N, 45)]

    CashPct = {}
    for sub in batches:
        df = DataAPI.FdmtBSGet(secID=','.join(sub), publishDateBegin=start, publishDateEnd=end, field=['secID', 'cashCEquiv', 'TAssets'])
        for stock in sub:
            try:
                df_sub = df[df.secID==stock]
                df_sub['pct'] = df_sub['cashCEquiv'] / df_sub['TAssets']
                CashPct[stock] = df_sub['pct'].mean()
            except:
                pass
    return CashPct

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文