一个简单量化策略回测

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

策略

  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"
### Python量化交易策略代码示例 对于小瓦提出的“低买高卖”策略,可以通过编写Python脚本来实现简单功能。下面展示了一个基于Pandas库处理股票价格数据并执行该策略的简化版本。 #### 导入必要的库 ```python import pandas as pd import numpy as np from datetime import datetime ``` #### 加载历史股价数据 假设有一个CSV文件包含了每日收盘价和其他相关信息。 ```python data = pd.read_csv('stock_prices.csv', parse_dates=['Date']) data.set_index('Date', inplace=True) ``` #### 计算收益率变化方向 通过比较相邻两天的价格变动情况来决定买卖信号。 ```python data['Return'] = data['Close'].pct_change() data.dropna(inplace=True) def generate_signals(df): signals = [] prev_price = df.iloc[0]['Close'] for index, row in df.iterrows(): current_price = row['Close'] if current_price < prev_price: signals.append(1) # Buy signal elif current_price > prev_price: signals.append(-1) # Sell signal else: signals.append(0) # No action prev_price = current_price return pd.Series(signals, index=df.index) data['Signal'] = generate_signals(data)[^1] ``` #### 执行交易逻辑 根据生成的买卖信号更新持仓状态,并计算累计收益。 ```python initial_capital = 100000.0 # 初始资金设定为十万人民币 position = False # 默认为空仓 capital_history = [initial_capital] for i in range(len(data)): price = data.iloc[i]['Close'] signal = data.iloc[i]['Signal'] if not position and signal == 1: # 当前无仓位且收到买入信号时开多单 shares_bought = initial_capital / price capital -= shares_bought * price position = True elif position and (signal == -1 or i == len(data)-1): # 持有头寸遇到卖出信号或到达最后一天平仓 profit = shares_bought * price + capital capital_history.append(profit) break final_profit = capital_history[-1] - initial_capital print(f'最终盈利金额:{final_profit:.2f}元') ``` 此段代码实现了对给定时间段内应用“低买高卖”策略后的模拟操作过程,并输出了总的盈亏结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值