一个简单量化策略回测

实现一个简单的指数定投策略,写一个回测脚本验证一下。

策略

  1. 定投创业板指数(场内ETF,或场外指数基金)
  2. 一般的定投每期固定金额,而这里采取更激进的方法,每期定投金额随指数降低而增加,即越跌越投(策略详见脚本)

获取指数历史行情
如何获取历史行情数据? 由于我们是按月定投,只需要获取按月K线图即可。有付费软件和网站当然可以获取历史行情数据,但作为一个打游戏从来不充钱的人,本着能不花钱就不花钱的原则,在网上努力找到了免费的资源。
在浏览器输入https://q.stock.sohu.com/hisHq?code=zs_399006&start=20210101&end=20210825&stat=1&order=A&period=m&callback=historySearchHandler&rt=jsonp&r=0.8391495715053367&0.9677250558488026

  • code:合约代码,399006就是深证创业板指数代码
  • star, end 分别代表开始、结束日期
  • order 表示排序方式,Asce升序
  • period 周期?month月K

获得数据格式如下:

historySearchHandler([{
   "status":0,"hq":[["2021-01-29","2977.32","3128.87","162.61","5.48%","2963.41","3427.44","482663424","212739920.00","-"],["2021-02-26","3134.79","2914.11","-214.76","-6.86%","2887.81","3476.00","327237024","139207552.00","-"],["2021-03-31","2958.53","2758.50","-155.61","-5.34%","2603.94","3023.21","393472384","150975600.00","-"],["2021-04-30","2766.42","3091.40","332.90","12.07%","2711.84","3110.16","318636480","125344720.00","-"],["2021-05-31","3059.58","3309.07","217.67","7.04%","2864.05","3309.75","293336448","123553176.00","-"],["2021-06-30","3290.53","3477.18","168.11","5.08%","3122.81","3484.19","362395232","159291744.00","-"],["2021-07-30",
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
量化交易系统是一个比较复杂的系统,需要考虑很多因素,包括数据获取、数据处理、策略、交易执行等。以下是一个简单量化交易系统的示例代码,用Python实现: ``` import pandas as pd import yfinance as yf # 获取股票数据 def get_stock_data(ticker, start_date, end_date): data = yf.download(ticker, start=start_date, end=end_date) return data # 计算技术指标 def calculate_indicator(data): data['MA10'] = data['Adj Close'].rolling(window=10).mean() data['MA60'] = data['Adj Close'].rolling(window=60).mean() data['MACD'] = data['Adj Close'].ewm(span=12).mean() - data['Adj Close'].ewm(span=26).mean() data['Signal'] = data['MACD'].ewm(span=9).mean() return data # 交易策略 def backtest_strategy(data): data['Position'] = 0 data['Position'][data['MA10'] > data['MA60']] = 1 data['Position'][data['MA10'] < data['MA60']] = -1 data['Position'][data['MACD'] < data['Signal']] = -1 data['Position'][data['MACD'] > data['Signal']] = 1 data['Returns'] = data['Adj Close'].pct_change() * data['Position'].shift(1) data['Cumulative Returns'] = (1 + data['Returns']).cumprod() return data # 执行交易 def execute_trade(data, capital): data['Shares'] = (capital * data['Position']) // data['Adj Close'] data['Cash'] = capital - (data['Shares'] * data['Adj Close']).cumsum() data['Total'] = data['Cash'] + (data['Shares'] * data['Adj Close']).cumsum() return data # 试 ticker = 'AAPL' start_date = '2015-01-01' end_date = '2021-01-01' capital = 100000 data = get_stock_data(ticker, start_date, end_date) data = calculate_indicator(data) data = backtest_strategy(data) data = execute_trade(data, capital) print(data.tail()) ``` 以上代码实现了一个简单的交易策略,即根据股票的10日移动平均线和60日移动平均线的交叉以及MACD指标的金叉和死叉来确定交易信号,然后根据信号执行交易并计算收益。这个交易策略非常简单,只是为了演示如何实现一个量化交易系统。在实际应用中,需要根据具体的需求设计更加复杂的交易策略,并考虑更多的因素,如手续费、滑点等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值