返回介绍

第一部分 新手入门

第二部分 股票量化相关

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

第四部分 衍生品相关

布林带回调系统-日内

发布于 2022-02-20 22:26:14 字数 3161 浏览 859 评论 0 收藏 0

import numpy as np
import pandas as pd
from pandas import DataFrame
start = '2014-01-01'                       # 回测起始时间
end = '2015-01-01'                         # 回测结束时间
benchmark = 'HS300'                        # 策略参考标准
universe = set_universe('HS300')           # 证券池,支持股票和基金
capital_base = 100000                      # 起始资金
freq = 'm'                                 # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 239                         # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
period = 10
multiple=1.5
threshold=-0.1
boll=pd.DataFrame(index=universe,columns = ['mean_cp','high_channel','low_channel'])

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

def handle_data(account):                  # 每个交易日的买入卖出指令
    if(account.current_minute=='09:30'):
        close_prices = account.get_daily_attribute_history('closePrice', period)
        for s in account.universe:
            mean_cp = close_prices[s].mean()
            bias = multiple*np.std(close_prices[s])
            high_channel = mean_cp + bias
            low_channel = mean_cp - bias
            boll.at[s,'high_channel']=high_channel
            boll.at[s,'low_channel']=low_channel
            boll.at[s,'mean_cp']=mean_cp
    elif(account.current_minute=='14:50'):
        print account.current_date,",",account.valid_secpos
    else:
        for s in account.valid_secpos:     #清仓
            if account.referencePrice[s]>=boll.at[s,'mean_cp'] :
                order_to(s, 0)
        buylist=[]
        c = account.referencePortfolioValue
        for s in account.universe:
            if ((account.referencePrice[s]-boll.at[s,'low_channel'])/boll.at[s,'low_channel'])<=threshold:
                buylist.append(s)
        if (len(buylist)==0):
            return
        else:
            w=min(0.2,1.0/len(buylist))# 最大仓位1/5
            for s in buylist:
                p=account.referencePrice[s]*1.01 
                num=int(c * w / p)
                order(s, num)

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

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

发布评论

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