返回介绍

第一部分 新手入门

第二部分 股票量化相关

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

第四部分 衍生品相关

5.7 5217 策略

发布于 2022-02-20 22:26:16 字数 3528 浏览 933 评论 0 收藏 0

  • 买入信号 :价格创出60个交易日新高,第二天买入

  • 卖出信号 :价格从最高点下跌17%,则第二天卖出

  • 卖出金额平均分配到新高的股价上

import numpy as np 
from datetime import datetime, timedelta

start = '20120101'                       # 回测起始时间
end = (datetime.today() - timedelta(days=1)).strftime('%Y%m%d')  # 截止日期
benchmark = 'HS300'                        # 策略参考标准
universe = set_universe('HS300')
capital_base = 1000000                     # 起始资金
freq = 'd'                                 # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1                           # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟

MAX_PRICE = {}

def initialize(account):                   # 初始化虚拟账户状态
    pass

def handle_data(account):                  # 每个交易日的买入卖出指令

    today = account.current_date.strftime('%Y%m%d')   
    hist = account.get_attribute_history('closePrice' , 60)
    cash = account.cash
    buylist = []

    #记录持仓股票的最高价(卖出判断指标)
    for s in account.valid_secpos : 
        MAX_PRICE[s] = max(MAX_PRICE[s],np.max(hist[s]))

    # 备选买入股票,已经在股票池的股票不再重复购买,创60日新高则入选购买
    option = [x for x in account.universe if x not in account.valid_secpos]   

    for s in option :    
        if np.max(hist[s]) == hist[s][-1] : 
            buylist.append(s)
            MAX_PRICE[s] = hist[s][-1]

    # 从最高点下跌17%,卖出
    for s in account.valid_secpos :   

        if hist[s][-1] <= MAX_PRICE[s] * (1 - 0.17) : 
            cash += hist[s][-1] * account.valid_secpos.get(s)
            order_to(s , 0)         
            # 最高价清零
            MAX_PRICE[s] = 0

    # 买入
    for s in buylist :        
        order( s, cash / len(buylist) / hist[s][-1] )

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

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

发布评论

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