如何进行股票回测?
简单回测用平台。复杂回测租用抢占式服务器分布式计算。平台更方便的是图形化展示,回测算力十分鸡肋。
先弄明白什么是回测?
- 股票回测是指,利用过去一段时间内的市场数据,分析不同买入/卖出策略下的收益表现。
回测有什么作用?
- 无论是提出猜想去验证,还是漫无目的的因子组合找寻最优策略,我们都可以通过回测过程加深对交易和数据的认识。
回测的方法有哪些?
- 机器学习或者蒙特卡洛模拟,都是基于规则的思想。无论你用什么方法实现,核心目标都是计算出不同交易策略的收益从而进行对比分析。
哪些数据适合做回测?
- 相较于基本面或消息面数据,行情数据在市场上有完整的交易时间序列。行情数据是最合适作为回测的数据类型。
回测的粒度分为哪些?
- 按照行情数据的归集级别,可分为Tick级,秒级,分钟级,日级等粒度。后者可以通过归集前者数据产生。
如何选择回测的粒度?
- 应根据自身数据资源和计算资源以及策略类型来判断。
- 在T+1交易制度下,普通交易者回测Tick级的高频数据难度非常大,在普通交易频率下,日线或者分钟级回测更有实际意义。
- 而在T+0领域例如可转债、ETF,则需要更细粒度的数据,比如秒级或者Tick级。
以下是单股日线回测结果,根据过去一段时间内换手和收盘账户以及今日开盘涨幅为策略因子,产生参数组合,分别计算不同参数组合下的收益率,排序后得到组合收益列表。
完整代码:
import json
import time
import pandas as pd
import numpy as np# 假设某一支票的K线格式如下
'''klines = [{"日期": "2023-01-01", "开盘": 100, "收盘": 105, "最高": 110, "最低": 98, "成交量": 1000000, "成交额": 105000000, "振幅": 12.24,"涨跌幅": 5.0, "涨跌额": 5, "换手率": 5.2},...{"日期": "2023-01-02", "开盘": 106, "收盘": 102, "最高": 108, "最低": 99, "成交量": 800000, "成交额": 81600000, "振幅": 8.08,"涨跌幅": -3.81, "涨跌额": -3, "换手率": 4.1},
]'''# 线上实际数据格式
k = '''{"code":0,"cnt":1,"msg":"","data":{"code":"600519","name":"贵州茅台","type":"day","count":240,"fq":"前复权","fields":["日期","开盘","收盘","最高","最低","成交量","成交额","振幅","涨跌幅","涨跌额","换手率"],"list":[["2025-01-21","1481.00","1468.15","1482.00","1465.00","16856","2481821229.00","1.15","-0.45","-6.65","0.13"],["2025-01-20","1461.00","1474.80","1489.79","1460.00","31410","4647626351.00","2.05","1.38","20.05","0.25"],["2025-01-17","1446.39","1454.75","1461.00","1446.38","18309","2663227309.00","1.01","0.58","8.37","0.15"],["2025-01-16","1474.00","1446.38","1482.66","1442.00","26342","3840411437.00","2.76","-1.69","-24.89","0.21"],["2025-01-15","1467.00","1471.27","1474.60","1460.01","18399","2701518712.00","0.99","-0.08","-1.23","0.15"],["2025-01-14","1444.95","1472.50","1478.68","1442.00","30957","4535651504.00","2.54","1.98","28.52","0.25"],["2025-01-13","1425.00","1443.98","1444.44","1422.01","21083","3030806870.00","1.56","0.56","7.98","0.17"],["2025-01-10","1447.10","1436.00","1451.95","1436.00","21872","3154677598.00","1.10","-0.55","-8.00","0.17"],["2025-01-09","1448.99","1444.00","1464.58","1432.98","29706","4295852736.00","2.19","0.10","1.50","0.24"],["2025-01-08","1440.00","1442.50","1451.82","1426.66","35258","5071821246.00","1.75","0.16","2.30","0.28"],["2025-01-07","1444.66","1440.20","1451.89","1439.00","24221","3494634227.00","0.90","0.01","0.20","0.19"],["2025-01-06","1453.00","1440.00","1462.66","1432.80","44255","6392479712.00","2.02","-2.37","-35.00","0.35"],["2025-01-03","1494.50","1475.00","1494.99","1467.01","32628","4836610288.00","1.88","-0.87","-13.00","0.26"],["2025-01-02","1524.00","1488.00","1524.49","1480.00","50029","7490883773.00","2.92","-2.36","-36.00","0.40"],["2024-12-31","1525.40","1524.00","1545.00","1522.01","39354","6033540366.00","1.51","-0.07","-1.00","0.31"],["2024-12-30","1533.97","1525.00","1543.96","1525.00","25130","3849542646.00","1.24","-0.26","-3.97","0.20"],["2024-12-27","1528.90","1528.97","1536.00","1519.50","20759","3170191445.00","1.08","0.08","1.18","0.17"],["2024-12-26","1534.00","1527.79","1538.78","1523.00","18287","2798840003.00","1.03","-0.14","-2.21","0.15"],["2024-12-25","1538.80","1530.00","1538.80","1526.10","17123","2621061878.00","0.83","-0.57","-8.82","0.14"],["2024-12-24","1525.00","1538.82","1544.00","1521.59","22105","3394160299.00","1.47","0.81","12.37","0.18"],["2024-12-23","1523.00","1526.45","1538.00","1517.00","21603","3300971424.00","1.38","0.29","4.45","0.17"],["2024-12-20","1531.13","1522.00","1541.80","1520.02","28158","4307425535.00","1.43","-0.34","-5.13","0.22"],["2024-12-19","1541.26","1527.13","1544.05","1526.45","24809","3862602665.00","1.14","-1.32","-20.49","0.20"],["2024-12-18","1534.09","1547.62","1553.12","1523.22","41162","6440801971.00","1.95","0.88","13.50","0.33"],["2024-12-17","1502.11","1534.12","1545.12","1497.13","54172","8398945449.00","3.19","2.05","30.80","0.43"],["2024-12-16","1497.12","1503.32","1505.12","1486.83","32537","4945298799.00","1.22","0.55","8.20","0.26"],["2024-12-13","1526.13","1495.12","1531.11","1495.00","49512","7580908315.00","2.34","-3.04","-46.80","0.39"],["2024-12-12","1508.14","1541.92","1542.12","1505.12","41937","6510547810.00","2.45","2.00","30.20","0.33"],["2024-12-11","1516.12","1511.72","1531.12","1507.10","29671","4569662604.00","1.58","-0.72","-10.99","0.24"],["2024-12-10","1546.12","1522.71","1555.85","1521.30","60312","9421340719.00","2.31","1.86","27.79","0.48"],["2024-12-09","1498.14","1494.92","1505.84","1489.32","19800","3008173586.00","1.10","-0.15","-2.21","0.16"],["2024-12-06","1489.12","1497.13","1515.02","1484.19","32040","4883148600.00","2.07","0.67","10.01","0.26"],["2024-12-05","1486.98","1487.12","1493.98","1486.12","16141","2441318387.00","0.53","-0.60","-9.00","0.13"],["2024-12-04","1496.19","1496.12","1499.78","1486.12","23924","3626565544.00","0.91","-0.45","-6.74","0.19"],["2024-12-03","1500.12","1502.86","1505.02","1492.20","24807","3777197199.00","0.85","0.12","1.74","0.20"],["2024-12-02","1502.12","1501.12","1506.11","1491.22","26820","4086609952.00","0.99","-0.05","-0.74","0.21"],["2024-11-29","1493.12","1501.86","1531.12","1489.33","36088","5534035503.00","2.80","0.52","7.74","0.29"],["2024-11-28","1498.12","1494.12","1501.11","1478.12","23952","3627662382.00","1.54","-0.07","-1.05","0.19"],["2024-11-27","1485.12","1495.17","1498.27","1481.12","25934","3927607772.00","1.15","0.68","10.05","0.21"],["2024-11-26","1474.69","1485.12","1495.00","1465.00","25745","3876885984.00","2.03","0.71","10.43","0.20"],["2024-11-25","1487.12","1474.69","1508.12","1472.79","33186","5011136234.00","2.38","-0.62","-9.25","0.26"],["2024-11-22","1517.27","1483.94","1523.89","1483.94","33436","5107288992.00","2.63","-2.45","-37.31","0.27"],["2024-11-21","1519.99","1521.25","1525.11","1508.12","18262","2810933515.00","1.12","0.02","0.32","0.15"],["2024-11-20","1519.12","1520.93","1530.09","1507.42","21345","3292675257.00","1.49","0.19","2.89","0.17"],["2024-11-19","1541.12","1518.04","1545.49","1501.12","33266","5138831155.00","2.89","-1.11","-17.08","0.26"],["2024-11-18","1538.12","1535.12","1552.11","1531.12","27092","4237197499.00","1.37","0.00","0.00","0.22"],["2024-11-15","1545.12","1535.12","1559.92","1529.12","33761","5295326892.00","1.99","-0.95","-14.80","0.27"],["2024-11-14","1546.12","1549.92","1570.57","1541.77","29248","4617144097.00","1.85","-0.30","-4.70","0.23"],["2024-11-13","1544.12","1554.62","1562.78","1537.40","29125","4594445032.00","1.63","0.08","1.30","0.23"],["2024-11-12","1565.12","1553.32","1599.12","1550.07","49223","7844798676.00","3.12","-1.32","-20.81","0.39"],["2024-11-11","1566.12","1574.13","1586.07","1543.31","43854","6957095385.00","2.70","-0.75","-11.96","0.35"],["2024-11-08","1637.01","1586.09","1643.23","1577.13","60771","9885645907.00","4.07","-2.41","-39.17","0.48"],["2024-11-07","1538.58","1625.26","1629.62","1538.42","74739","12074951757.00","5.89","5.05","78.14","0.59"],["2024-11-06","1551.12","1547.12","1565.11","1537.34","37631","5916917616.00","1.79","-0.39","-5.99","0.30"],["2024-11-05","1516.12","1553.11","1553.82","1512.13","45640","7134443464.00","2.73","1.89","28.79","0.36"],["2024-11-04","1521.05","1524.32","1526.12","1504.18","29093","4481761764.00","1.45","0.96","14.45","0.23"],["2024-11-01","1497.12","1509.87","1521.25","1496.92","32284","4954302212.00","1.62","0.40","5.96","0.26"],["2024-10-31","1508.27","1503.91","1516.12","1496.12","29957","4575545180.00","1.33","-0.28","-4.21","0.24"],["2024-10-30","1501.12","1508.12","1527.31","1499.53","32006","4913175983.00","1.84","0.03","0.38","0.25"],["2024-10-29","1536.12","1507.74","1556.12","1506.12","41166","6368105233.00","3.24","-2.17","-33.38","0.33"],["2024-10-28","1536.12","1541.12","1541.12","1498.35","39121","6064453668.00","2.79","0.40","6.15","0.31"],["2024-10-25","1523.12","1534.97","1550.91","1522.13","27745","4328271351.00","1.88","0.44","6.65","0.22"],["2024-10-24","1537.12","1528.32","1551.12","1521.13","23923","3723973209.00","1.94","-0.99","-15.30","0.19"],["2024-10-23","1520.23","1543.62","1553.07","1508.12","40088","6259600035.00","2.96","1.61","24.50","0.32"],["2024-10-22","1502.68","1519.12","1536.30","1500.32","36269","5607826492.00","2.39","0.94","14.20","0.29"],["2024-10-21","1517.33","1504.92","1526.09","1497.33","42008","6433918335.00","1.90","-0.80","-12.20","0.33"],["2024-10-18","1469.12","1517.12","1543.96","1455.08","68619","10418043492.00","6.04","3.15","46.40","0.55"],["2024-10-17","1513.12","1470.72","1513.78","1469.53","39460","5964778958.00","2.95","-1.86","-27.90","0.31"],["2024-10-16","1517.00","1498.62","1525.92","1486.12","46664","7140169692.00","2.60","-2.07","-31.75","0.37"],["2024-10-15","1575.12","1530.37","1577.11","1529.13","43571","6884141869.00","3.04","-3.03","-47.74","0.35"],["2024-10-14","1589.12","1578.11","1596.75","1557.29","44812","7181350822.00","2.50","-0.19","-3.00","0.36"],["2024-10-11","1591.52","1581.11","1616.08","1566.12","41915","6764982707.00","3.09","-2.17","-35.01","0.33"],["2024-10-10","1598.38","1616.12","1644.20","1567.12","74603","12198964035.00","4.91","2.85","44.85","0.59"],["2024-10-09","1676.12","1571.27","1676.12","1566.12","120197","19708432734.00","6.47","-7.52","-127.85","0.96"],["2024-10-08","1886.12","1699.12","1886.12","1656.30","194709","35114075007.00","13.33","-1.45","-25.00","1.55"],["2024-09-30","1668.12","1724.12","1736.00","1628.12","157293","26982747037.00","6.72","7.40","118.80","1.25"],["2024-09-27","1576.12","1605.32","1605.32","1541.48","87922","14050260569.00","4.24","6.66","100.20","0.70"],["2024-09-26","1376.08","1505.12","1505.99","1372.12","97278","14269262657.00","9.74","9.45","130.00","0.77"],["2024-09-25","1376.17","1375.12","1403.12","1372.83","73954","10420109655.00","2.25","1.96","26.40","0.59"],["2024-09-24","1261.21","1348.72","1349.12","1241.21","100413","13297277523.00","8.72","8.97","111.06","0.80"],["2024-09-23","1244.12","1237.66","1269.62","1236.78","45550","5809791682.00","2.65","-0.19","-2.38","0.36"],["2024-09-20","1237.62","1240.04","1250.02","1226.15","39982","5038507835.00","1.93","0.24","2.92","0.32"],["2024-09-19","1238.12","1237.12","1269.00","1221.95","59988","7623739997.00","3.79","-0.47","-5.90","0.48"],["2024-09-18","1276.12","1243.02","1276.13","1242.78","46185","5895948011.00","2.60","-2.91","-37.23","0.37"],["2024-09-13","1307.12","1280.25","1308.12","1273.42","56005","7329376917.00","2.65","-2.36","-30.93","0.45"],["2024-09-12","1356.12","1311.18","1361.12","1311.03","47948","6482445000.00","3.69","-3.31","-44.94","0.38"],["2024-09-11","1351.72","1356.12","1362.00","1341.12","20996","2892932794.00","1.54","0.15","2.00","0.17"],["2024-09-10","1346.14","1354.12","1369.12","1346.14","19803","2737295644.00","1.70","0.22","3.00","0.16"],["2024-09-09","1356.13","1351.12","1369.83","1346.20","28638","3950086825.00","1.72","-1.67","-23.00","0.23"],["2024-09-06","1381.12","1374.12","1382.12","1374.12","10321","1445537257.00","0.58","-0.50","-6.88","0.08"],["2024-09-05","1376.62","1381.00","1383.12","1373.12","14503","2033680839.00","0.73","0.35","4.88","0.12"],["2024-09-04","1378.12","1376.12","1395.31","1375.86","14211","1995221417.00","1.40","-0.72","-10.00","0.11"],["2024-09-03","1374.12","1386.12","1391.10","1369.14","17888","2516125842.00","1.60","1.09","15.00","0.14"],["2024-09-02","1406.12","1371.12","1414.12","1371.12","34135","4801049927.00","3.03","-3.40","-48.19","0.27"],["2024-08-30","1389.12","1419.31","1434.19","1381.12","38739","5576118649.00","3.82","2.15","29.89","0.31"],["2024-08-29","1356.12","1389.42","1394.12","1356.12","27472","3864270621.00","2.78","1.78","24.30","0.22"],["2024-08-28","1380.19","1365.12","1382.12","1351.12","31664","4388025875.00","2.25","-1.09","-15.07","0.25"],["2024-08-27","1388.12","1380.19","1389.12","1377.23","13657","1920770570.00","0.86","-0.57","-7.93","0.11"],["2024-08-26","1393.12","1388.12","1399.98","1379.27","15628","2207595461.00","1.49","-0.21","-2.99","0.12"],["2024-08-23","1384.12","1391.11","1399.62","1382.24","15320","2166499202.00","1.25","0.36","4.94","0.12"],["2024-08-22","1392.12","1386.17","1396.12","1376.13","19527","2750868073.00","1.43","-0.54","-7.53","0.16"],["2024-08-21","1396.12","1393.70","1404.10","1391.81","15092","2144746551.00","0.88","-0.37","-5.14","0.12"],["2024-08-20","1406.02","1398.84","1406.05","1390.12","18591","2644814344.00","1.14","-0.19","-2.72","0.15"],["2024-08-19","1408.12","1401.56","1435.00","1401.12","20433","2942106435.00","2.41","-0.41","-5.76","0.16"],["2024-08-16","1402.91","1407.32","1412.04","1393.13","16455","2349825846.00","1.35","0.31","4.31","0.13"],["2024-08-15","1381.15","1403.01","1412.11","1380.07","23039","3275699572.00","2.31","0.98","13.59","0.18"],["2024-08-14","1399.13","1389.42","1401.02","1388.14","13414","1898377426.00","0.92","-0.69","-9.71","0.11"],["2024-08-13","1409.12","1399.13","1411.12","1388.13","16308","2317037756.00","1.63","-0.93","-13.09","0.13"],["2024-08-12","1406.12","1412.22","1419.12","1402.70","13632","1956573438.00","1.16","-0.05","-0.70","0.11"],["2024-08-09","1436.15","1412.92","1445.12","1412.92","30138","4368705515.00","2.29","0.43","6.11","0.24"],["2024-08-08","1387.12","1406.81","1424.30","1385.12","25131","3592705430.00","2.82","1.09","15.19","0.20"],["2024-08-07","1381.62","1391.62","1398.11","1374.42","20622","2910580747.00","1.72","0.78","10.80","0.16"],["2024-08-06","1398.12","1380.82","1400.12","1370.13","27444","3860735014.00","2.16","-0.38","-5.31","0.22"],["2024-08-05","1365.00","1386.13","1402.12","1361.64","37736","5327127147.00","2.97","1.80","24.56","0.30"],["2024-08-02","1349.72","1361.57","1373.09","1349.72","21928","3041726372.00","1.72","-0.05","-0.71","0.17"],["2024-08-01","1394.12","1362.28","1396.12","1360.82","32038","4470988088.00","2.53","-2.51","-35.12","0.26"],["2024-07-31","1349.22","1397.40","1403.39","1349.22","43272","6098149721.00","3.99","3.04","41.29","0.34"],["2024-07-30","1362.10","1356.11","1366.39","1337.42","51779","7103491566.00","2.11","-1.31","-18.03","0.41"],["2024-07-29","1391.12","1374.14","1398.11","1374.12","30869","4342610100.00","1.72","-1.73","-24.17","0.25"],["2024-07-26","1406.61","1398.31","1413.84","1387.02","32354","4594928574.00","1.91","-0.59","-8.30","0.26"],["2024-07-25","1416.14","1406.61","1424.12","1396.13","28347","4054086714.00","1.98","-0.67","-9.53","0.23"],["2024-07-24","1426.32","1416.14","1439.82","1411.12","24123","3490200973.00","2.01","-1.05","-14.98","0.19"],["2024-07-23","1475.12","1431.12","1477.12","1431.12","30944","4555460198.00","3.12","-2.98","-44.00","0.25"],["2024-07-22","1501.15","1475.12","1506.10","1467.77","28543","4300813310.00","2.55","-1.77","-26.62","0.23"],["2024-07-19","1466.93","1501.74","1505.30","1460.13","38943","5888615145.00","3.07","1.91","28.11","0.31"],["2024-07-18","1475.62","1473.63","1491.12","1468.65","28870","4337214601.00","1.52","-0.26","-3.89","0.23"],["2024-07-17","1452.22","1477.52","1479.12","1446.14","34311","5115680654.00","2.27","1.75","25.40","0.27"],["2024-07-16","1452.12","1452.12","1458.12","1441.17","20316","2998367128.00","1.17","0.08","1.10","0.16"],["2024-07-15","1446.12","1451.02","1464.12","1446.12","19176","2835374730.00","1.24","-0.27","-3.92","0.15"],["2024-07-12","1449.13","1454.94","1462.52","1441.57","23386","3451132648.00","1.46","1.16","16.73","0.19"],["2024-07-11","1426.09","1438.21","1445.12","1416.33","29020","4236960596.00","2.04","1.73","24.50","0.23"],["2024-07-10","1415.37","1413.71","1442.00","1411.12","23763","3436693365.00","2.18","-0.03","-0.44","0.19"],["2024-07-09","1396.12","1414.15","1431.01","1386.22","33621","4807957927.00","3.21","1.29","18.03","0.27"],["2024-07-08","1419.12","1396.12","1433.89","1395.26","39527","5657951348.00","2.70","-2.31","-33.00","0.31"],["2024-07-05","1455.12","1429.12","1469.30","1426.12","38829","5664477336.00","2.95","-2.24","-32.74","0.31"],["2024-07-04","1481.12","1461.86","1488.12","1457.25","24380","3637968895.00","2.09","-0.97","-14.26","0.19"],["2024-07-03","1475.12","1476.12","1489.13","1464.14","31573","4740808130.00","1.70","0.63","9.30","0.25"],["2024-07-02","1409.12","1466.82","1474.12","1409.12","51853","7659166816.00","4.59","3.55","50.32","0.41"],["2024-07-01","1445.00","1416.50","1449.11","1404.12","32161","4636689118.00","3.12","-1.87","-27.01","0.26"],["2024-06-28","1456.12","1443.51","1470.61","1440.12","38582","5699649047.00","2.08","-1.58","-23.10","0.31"],["2024-06-27","1468.12","1466.61","1470.09","1444.12","32822","4857959457.00","1.77","0.09","1.27","0.26"],["2024-06-26","1456.12","1465.34","1477.19","1453.92","29570","4414601922.00","1.59","0.18","2.57","0.24"],["2024-06-25","1453.12","1462.77","1479.11","1453.12","42098","6273919386.00","1.79","0.70","10.10","0.34"],["2024-06-24","1399.12","1452.67","1465.11","1390.13","63840","9319362390.00","5.18","0.38","5.55","0.51"],["2024-06-21","1476.62","1447.12","1481.10","1446.34","43320","6418543742.00","2.35","-1.97","-29.10","0.34"],["2024-06-20","1476.12","1476.22","1492.13","1474.12","24711","3715924984.00","1.22","-0.06","-0.90","0.20"],["2024-06-19","1474.11","1477.12","1480.12","1458.22","41262","6167728416.00","1.49","0.71","10.38","0.33"],["2024-06-18","1476.13","1466.74","1499.78","1461.92","41258","6317590943.00","2.55","-1.35","-20.00","0.33"],["2024-06-17","1477.53","1486.74","1494.01","1456.25","48318","7400883243.00","2.52","-0.90","-13.50","0.38"],["2024-06-14","1500.24","1500.24","1509.20","1465.70","59514","9177637168.00","2.90","0.00","-0.01","0.47"],["2024-06-13","1522.01","1500.25","1522.13","1498.39","36186","5654938942.00","1.57","-1.10","-16.67","0.29"],["2024-06-12","1515.24","1516.92","1535.24","1515.24","33171","5230086503.00","1.32","0.18","2.68","0.26"],["2024-06-11","1548.23","1514.24","1550.24","1512.24","70247","11090577610.00","2.43","-3.21","-50.18","0.56"],["2024-06-07","1591.37","1564.42","1591.42","1564.25","33525","5453120695.00","1.71","-1.30","-20.63","0.27"],["2024-06-06","1588.90","1585.05","1597.23","1581.15","25610","4205700983.00","1.01","-0.26","-4.19","0.20"],["2024-06-05","1597.24","1589.24","1603.92","1588.27","19056","3140824328.00","0.98","-0.58","-9.20","0.15"],["2024-06-04","1585.74","1598.44","1601.24","1581.79","20841","3432497303.00","1.23","0.87","13.81","0.17"],["2024-06-03","1595.24","1584.63","1596.16","1580.35","30261","4966041477.00","0.99","-0.57","-9.06","0.24"],["2024-05-31","1595.74","1593.69","1608.74","1593.69","21857","3617654788.00","0.94","-0.03","-0.55","0.17"],["2024-05-30","1620.24","1594.24","1620.62","1594.24","32208","5333306808.00","1.63","-1.54","-25.00","0.26"],["2024-05-29","1611.24","1619.24","1625.24","1610.24","19651","3289173345.00","0.93","0.58","9.36","0.16"],["2024-05-28","1615.64","1609.88","1620.41","1608.24","23521","3923020375.00","0.75","-0.34","-5.48","0.19"],["2024-05-27","1623.24","1615.36","1632.69","1613.25","25098","4199001866.00","1.20","-0.43","-6.96","0.20"],["2024-05-24","1638.24","1622.32","1640.24","1622.24","20217","3401323915.00","1.10","-0.91","-14.93","0.16"],["2024-05-23","1645.24","1637.25","1651.62","1635.32","18885","3199923320.00","0.99","-0.35","-5.70","0.15"],["2024-05-22","1648.24","1642.95","1655.20","1636.24","20286","3443977767.00","1.15","-0.44","-7.29","0.16"],["2024-05-21","1653.24","1650.24","1654.97","1643.40","16293","2776847499.00","0.70","-0.24","-4.00","0.13"],["2024-05-20","1663.23","1654.24","1678.23","1653.35","31426","5401389335.00","1.50","-0.36","-6.00","0.25"],["2024-05-17","1645.25","1660.24","1661.82","1645.24","28924","4936920634.00","1.01","0.64","10.50","0.23"],["2024-05-16","1650.24","1649.74","1655.12","1635.24","29680","5048754769.00","1.21","0.27","4.50","0.24"],["2024-05-15","1647.82","1645.24","1653.24","1643.83","15739","2677203002.00","0.57","-0.12","-1.98","0.13"],["2024-05-14","1651.23","1647.22","1658.51","1645.25","21274","3623282672.00","0.80","-0.24","-4.02","0.17"],["2024-05-13","1677.26","1651.24","1677.90","1646.46","37662","6435415674.00","1.87","-1.96","-32.98","0.30"],["2024-05-10","1706.34","1684.22","1713.12","1679.23","26207","4571398242.00","1.99","-1.00","-17.02","0.21"],["2024-05-09","1703.24","1701.24","1710.22","1695.24","22387","3929804849.00","0.88","-0.47","-7.97","0.18"],["2024-05-08","1714.93","1709.21","1715.21","1700.91","14769","2603293863.00","0.83","-0.35","-6.03","0.12"],["2024-05-07","1711.03","1715.24","1723.04","1701.92","24925","4413196426.00","1.24","0.57","9.80","0.20"],["2024-05-06","1679.21","1705.44","1710.24","1672.24","59909","10504351712.00","2.30","3.34","55.20","0.48"],["2024-04-30","1650.25","1650.24","1675.12","1650.24","30760","5273902374.00","1.51","0.06","1.00","0.24"],["2024-04-29","1642.19","1649.24","1673.24","1639.06","41332","7072096590.00","2.07","-0.33","-5.43","0.33"],["2024-04-26","1639.24","1654.67","1659.24","1639.22","30996","5290248521.00","1.22","1.00","16.39","0.25"],["2024-04-25","1635.57","1638.28","1640.84","1627.49","14476","2447183879.00","0.81","-0.03","-0.56","0.12"],["2024-04-24","1642.22","1638.84","1645.15","1628.57","17086","2893555635.00","1.01","0.08","1.32","0.14"],["2024-04-23","1620.24","1637.52","1640.24","1620.24","24980","4217855279.00","1.23","1.06","17.22","0.20"],["2024-04-22","1599.24","1620.30","1624.12","1590.24","29951","5001684635.00","2.13","1.79","28.42","0.24"],["2024-04-19","1606.02","1591.88","1613.74","1586.52","23500","3879233242.00","1.68","-1.49","-24.14","0.19"],["2024-04-18","1604.25","1616.02","1628.22","1603.42","26568","4445487745.00","1.54","0.23","3.78","0.21"],["2024-04-17","1613.24","1612.24","1620.44","1603.24","24819","4130322018.00","1.06","-0.19","-3.00","0.20"],["2024-04-16","1610.73","1615.24","1624.80","1604.24","26266","4382796962.00","1.27","-0.18","-2.98","0.21"],["2024-04-15","1580.25","1618.22","1620.85","1580.22","35818","5960815532.00","2.57","2.47","38.95","0.29"],["2024-04-12","1596.24","1579.27","1609.24","1579.27","26744","4403968129.00","1.88","-0.88","-13.97","0.21"],["2024-04-11","1585.35","1593.24","1595.24","1579.93","22766","3736417595.00","0.96","0.00","0.02","0.18"],["2024-04-10","1607.51","1593.22","1610.23","1590.24","27631","4562853880.00","1.24","-0.89","-14.24","0.22"],["2024-04-09","1605.91","1607.46","1618.24","1603.69","25590","4256226333.00","0.90","-0.28","-4.44","0.20"],["2024-04-08","1640.24","1611.90","1641.24","1607.84","59167","9907355766.00","2.01","-2.92","-48.45","0.47"],["2024-04-03","1679.24","1660.35","1684.68","1655.26","29046","5002390042.00","1.77","0.07","1.12","0.23"],["2024-04-02","1667.24","1659.23","1670.23","1650.29","25449","4360973684.00","1.20","-0.44","-7.34","0.20"],["2024-04-01","1655.23","1666.57","1679.24","1653.94","27131","4679371035.00","1.54","1.12","18.43","0.22"],["2024-03-29","1646.88","1648.14","1656.23","1643.34","13457","2290584417.00","0.78","0.08","1.26","0.11"],["2024-03-28","1640.24","1646.88","1663.24","1638.44","24642","4201857059.00","1.51","0.04","0.64","0.20"],["2024-03-27","1650.24","1646.24","1657.24","1644.24","18113","3087792980.00","0.79","-0.50","-8.29","0.14"],["2024-03-26","1632.70","1654.53","1658.04","1632.70","28069","4782899074.00","1.55","1.24","20.28","0.22"],["2024-03-25","1643.78","1634.25","1644.01","1625.82","24473","4131446237.00","1.10","-0.75","-12.34","0.19"],["2024-03-22","1650.27","1646.59","1654.23","1633.24","25456","4318592818.00","1.27","-0.46","-7.65","0.20"],["2024-03-21","1653.34","1654.24","1664.24","1649.74","16596","2839332631.00","0.88","-0.04","-0.60","0.13"],["2024-03-20","1648.60","1654.84","1658.92","1645.47","15249","2604543856.00","0.81","0.10","1.58","0.12"],["2024-03-19","1648.24","1653.26","1665.18","1638.35","23948","4093701261.00","1.62","-0.01","-0.24","0.19"],["2024-03-18","1660.24","1653.50","1665.09","1644.24","26055","4446059130.00","1.25","-0.56","-9.23","0.21"],["2024-03-15","1657.74","1662.73","1677.64","1657.24","17834","3066692399.00","1.23","0.05","0.86","0.14"],["2024-03-14","1664.24","1661.87","1680.08","1656.74","19405","3338768308.00","1.40","-0.65","-10.82","0.15"],["2024-03-13","1685.21","1672.69","1693.24","1665.34","26500","4588879420.00","1.65","-1.04","-17.55","0.21"],["2024-03-12","1639.18","1690.24","1694.34","1635.74","54227","9393309052.00","3.57","3.08","50.51","0.43"],["2024-03-11","1620.24","1639.73","1644.12","1618.42","29895","5048394347.00","1.59","1.43","23.06","0.24"],["2024-03-08","1625.80","1616.67","1631.92","1615.29","22156","3710678522.00","1.02","-0.75","-12.20","0.18"],["2024-03-07","1625.24","1628.87","1635.04","1623.24","21599","3633934774.00","0.73","0.19","3.08","0.17"],["2024-03-06","1636.24","1625.79","1640.24","1623.26","22142","3725582802.00","1.04","-0.89","-14.55","0.18"],["2024-03-05","1616.05","1640.34","1642.24","1611.92","36238","6102136582.00","1.87","1.16","18.80","0.29"],["2024-03-04","1624.24","1621.54","1626.23","1615.29","26485","4434401015.00","0.67","-0.54","-8.76","0.21"],["2024-03-01","1635.24","1630.30","1640.21","1621.92","26868","4526845398.00","1.12","-0.61","-9.94","0.21"],["2024-02-29","1626.79","1640.24","1641.74","1624.44","24758","4184917973.00","1.06","0.83","13.45","0.20"],["2024-02-28","1634.16","1626.79","1641.81","1619.25","31867","5371312847.00","1.38","-0.49","-7.95","0.25"],["2024-02-27","1628.24","1634.74","1638.16","1623.24","22080","3718478358.00","0.91","-0.33","-5.48","0.18"],["2024-02-26","1653.24","1640.22","1653.98","1630.26","27318","4625594409.00","1.43","-1.15","-19.11","0.22"],["2024-02-23","1656.35","1659.33","1669.62","1645.26","27306","4670706950.00","1.46","-0.26","-4.29","0.22"],["2024-02-22","1652.74","1663.62","1668.25","1645.77","22794","3905984695.00","1.35","0.04","0.72","0.18"],["2024-02-21","1611.26","1662.90","1676.24","1607.24","46154","7868784082.00","4.27","2.95","47.66","0.37"],["2024-02-20","1642.60","1615.24","1642.60","1601.80","34470","5755266893.00","2.49","-1.55","-25.43","0.27"],["2024-02-19","1683.11","1640.67","1683.17","1633.24","36977","6288277980.00","3.02","-0.64","-10.57","0.29"],["2024-02-08","1665.25","1651.24","1670.24","1630.24","46757","7953438044.00","2.42","-0.30","-4.99","0.37"],["2024-02-07","1626.27","1656.23","1659.83","1606.85","52601","8899606867.00","3.27","2.16","34.99","0.42"],["2024-02-06","1575.25","1621.24","1630.72","1571.34","52472","8740646588.00","3.77","2.92","45.99","0.42"],["2024-02-05","1541.24","1575.25","1582.68","1540.49","53130","8590683071.00","2.74","2.21","34.01","0.42"],["2024-02-02","1560.24","1541.24","1573.02","1526.24","39382","6336691194.00","3.01","-0.90","-14.03","0.31"],["2024-02-01","1550.74","1555.27","1569.13","1546.24","26485","4272298576.00","1.48","0.33","5.12","0.21"],["2024-01-31","1558.24","1550.15","1565.21","1543.37","29649","4770104891.00","1.40","-0.52","-8.09","0.24"],["2024-01-30","1595.22","1558.24","1595.22","1555.24","30866","5010784454.00","2.51","-2.32","-37.00","0.25"],["2024-01-29","1585.54","1595.24","1605.82","1585.53","31421","5189014946.00","1.28","0.80","12.68","0.25"],["2024-01-26","1575.60","1582.56","1589.34","1568.24","26955","4402111882.00","1.33","-0.04","-0.68","0.21"],["2024-01-25","1572.06","1583.24","1586.24","1567.24","31206","5094508165.00","1.21","0.76","12.00","0.25"],["2024-01-24","1574.24","1571.24","1579.08","1548.80","33216","5373603703.00","1.94","0.45","7.00","0.26"]]}}'''
k = json.loads(k)klines = []
# 数据清洗+格式化
for l in k['data']['list']:dic = {}for f in range(len(k['data']['fields'])):if k['data']['fields'][f] == '日期':dic[k['data']['fields'][f]] = l[f]else:dic[k['data']['fields'][f]] = float(l[f])klines.append(dic)data = pd.DataFrame(klines)
data['日期'] = pd.to_datetime(data['日期'])# 以日期为索引,排序
data['日期'] = data['日期'].dt.date
data.set_index('日期', inplace=True)
data = data.sort_index(ascending=True)# 由基本数据计算衍生数据,如:开盘涨幅=今开/昨收;收盘涨幅=今收/昨收;量比=今日成交量/(前5日平均成交量)
data['开盘涨幅'] = (data['开盘'] / data['收盘'].shift(1) - 1) * 100
data['收盘涨幅'] = (data['收盘'] / data['收盘'].shift(1) - 1) * 100
data['量比'] = data['成交量'] / data['成交量'].shift(1).rolling(window=5).mean()# 数据格式验证
print('pands读入数据格式:', data.to_string(max_rows=None, max_cols=None))calc_cnt = 0def backtest(n, turn_over_threshold, open_return_threshold, close_return_threshold):# 计算过去n天的换手率、开盘涨幅、收盘涨幅和量比的平均值或其它统计量data['平均换手率'] = data['换手率'].shift(1).rolling(window=n).mean()data['平均开盘涨幅'] = data['开盘涨幅'].shift(1).rolling(window=n).mean().round(2)data['平均收盘涨幅'] = data['收盘涨幅'].shift(1).rolling(window=n).mean().round(2)# 初始化交易信号,每次覆写data['买入信号'] = (data['平均换手率'] > turn_over_threshold) & \(data['平均开盘涨幅'] > open_return_threshold) & \(data['平均收盘涨幅'] > close_return_threshold)# 条件符合则买入,记录买入日期buy_dates = data[data['买入信号']].index# 由买入日期推算卖日期sell_dates = []for index in buy_dates:try:loc = data.index.get_loc(index)next_loc = loc + 1next_index = data.index[next_loc]sell_dates.append(next_index)except IndexError:sell_dates.append(None) # 不存在下一个交易日global calc_cnt# 计算收益率total_return = 1.0for buy_date, sell_date in zip(buy_dates, sell_dates):if sell_date in data.index:calc_cnt = calc_cnt + 1buy_price = data.loc[buy_date, '开盘']sell_price = data.loc[sell_date, '开盘']turn_over = data.loc[buy_date, '平均换手率']open_return = data.loc[buy_date, '平均开盘涨幅']close_return = data.loc[buy_date, '平均收盘涨幅']daily_return = round(sell_price / buy_price, 4)total_return = round(total_return * daily_return, 4) # 计算复利# 输出参数组合,方便校验print(calc_cnt, '{}_{}_{}_{}'.format(n, turn_over_threshold, open_return_threshold, close_return_threshold),buy_date, sell_date, buy_price, sell_price, turn_over, open_return, close_return, daily_return,total_return)return total_returnbest_params = {}
max_return = 0# 定义要测试的n值范围
n_values = range(1, 2) # 例如n从1到29天# 枚举定义各个阈值的可能取值
turn_over_thresholds = [1, 2, 3, 4, 5] # 平均换手率
open_return_thresholds = [0.5, 1, 1.5, 2] # 平均开盘涨幅
close_return_thresholds = [0.5, 1, 1.5, 2] # 平均收盘涨幅# 参数生产
turn_over_thresholds = np.round(np.arange(0, 2, 0.1), 2)
open_return_thresholds = np.round(np.arange(-3, 3, 0.5), 2)
close_return_thresholds = np.round(np.arange(-3, 3, 0.5), 2)k_len = len(data)
param_size = len(n_values) * len(turn_over_thresholds) * len(open_return_thresholds) * len(close_return_thresholds)# 计算预估
print("K线长度:", k_len)
print("参数组合量:", param_size)
print("预估最大计算次数:", param_size * k_len)print("3s后开始计算\n\n\n\n")
time.sleep(3)# 打印表头
print('触发计数', '参数组合', '买入日期', '卖出日期', '买入价格', '卖出价格', '平均换手率', '平均开盘涨幅', '平均收盘涨幅', '单笔收益', '累计收益')start_time = time.time()
# 遍历所有组合
for n in n_values:for turn_over in turn_over_thresholds:for open_return in open_return_thresholds:for close_return in close_return_thresholds:return_value = backtest(n, turn_over, open_return, close_return)# 记录最大累计收益的参数值if return_value > max_return:max_return = return_valuebest_params = {'倒推天数': n,'平均换手率大于': turn_over,'平均开盘涨幅大于': open_return,'平均收盘涨幅大于': close_return,}end_time = time.time()
elapsed_time = end_time - start_time
print("最佳参数组合:", best_params)
print("最高收益率:", max_return)
print("总计算次数:", calc_cnt)
print("耗时(s):", elapsed_time)
课后思考: 将单股日线回测改为全市场并行回测
参考链接:离线回测-历史数据下载 · 开发文档
原文地址:https://zhuanlan.zhihu.com/p/1913635911742259398