思路:
1.导入需要的包
2.将字体设置为中文黑体
3.设置变量股票代码,移动平均线,阈值
4.定义函数 load_ohlc_from_local 读取本地文件设置日期为索引,返还DataFrame格式
5.定义buy与sell函数来模拟买卖并打印别买卖股票的代码,价格,数量与日期
6.定义calc_buy_vol通过余额cash给定的价格price来计算买入时交易的股票数量
7.定义open_current_order记入开仓的价格,开仓交易的数量,开仓日期,将余额cash全局化并计算开仓后的余额
8.定义close_current_order计算平仓价格,平仓日期,订单的盈亏,将current_orders中的订单移入history_orders中,再次更新cash余额
9.定义calc_total_pnl计算总盈亏
10.定义update_equity计算股票价格更新计算资产总值
11.定义back_test进行回测,遍历历史数据,根据移动平均线malen和价格波动的阈值判断买入与卖出信号,再调用buy sell等定义过的函数模拟交易
12.定义plot_candles绘制K线图,显示开盘价,收盘价,最高价,最低价
13.定义cast_orders_onto_candles将历史订单的开仓平仓信息绘制到K线图上
14.定义detect_best_MA将cash, current_orders, history_orders, malen全局化,设best_malen,best_pnl初始值分别为20和0,for 循环遍历i的长度(20到100,步长为10)并赋值给malen 设置初始资金cash为1000000,dfohlc(dataframe)的equity列为None,建立空字典current_orders,history_orders,调用"back_test"进行回测,当前总收益赋值给total_pnl并打印,通过if将最大的总收益赋值给best_pnl,当前malen赋值给best_malen记录最佳组合,将best_pnl进行回测,重置参数,回测,打印best_malen,total_pnl,最后画图
15.定义run_batch_parameters,将所需参数全局化,设置best_malen,best_threshold,best_pnl初始值,for循环i(20到100步长为5)j(1到5步长为1),赋值给malen,threshold,设置初始资金cash,建立空字典current_orders,history_orders,回测,将当前回测的资产价值存入dfall,计算总收益,将最大的总收益赋值给best_pnl,当前malen赋值给best_malen,当前threshold赋值给best_threshold记录最佳组合并打印,画图操作
16.主程序,设置股票代码,名称,参数,加载历史数据,回测,计算总盈亏并绘制相应的图表
代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as -plt
# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
def load_ohlc_from_local():
df = pd.read_csv('600519.csv')
df['datetime']=pd.to_datetime(df['date'], format='%Y-%m-%d', errors='coerce')
df =df.set_index('datetime')
return df
def buy(stock_code, price, volume, dt):
# send o