当前位置: 首页 > news >正文

MATLAB写的低价股日线买卖信号生成器,带实盘换仓记录和多组回测结果

本文还有配套的精品资源,点击获取

简介:一套开箱即用的低价股日线交易信号生成工具,用MATLAB编写,包含主策略脚本(dijiagu.m)、增强版择时逻辑(dijiagu_tp.m)、收益统计模块(zongshouyi.m),以及5个已跑完的回测结果文件(.mat格式),覆盖不同参数组合下的收益率曲线与持仓序列。配套提供Excel实盘换仓记录(低价股1天换仓.xlsx),方便对照验证;原始行情数据来自Book4.xlsx和Book4-2.xlsx,经清洗后可直接导入运行。所有代码兼容MATLAB R2015b及以上版本,不依赖金融工具箱或额外插件,只需加载数据即可输出买卖点、累计收益图(如_dijiagu.png)和分段收益统计。hzg低价股择时文件夹内含清晰的主入口说明和关键参数配置提示,适合想快速验证低价股择时逻辑的量化初学者或实盘跟踪者。

1. 项目概述:为什么低价股择时值得单独建模?

我做量化策略开发快十二年了,从最早用Excel手动算均线,到后来写Python回测框架,再到近几年回归MATLAB做高频信号验证——不是因为MATLAB多先进,而是它在信号逻辑快速验证、矩阵运算直觉化、以及避免Python生态碎片化干扰上,对中小策略开发者有不可替代的“安静感”。这套低价股日线买卖信号生成器,就是我在2022年夏天为一个实盘小账户专门打磨的产物。它不追求年化50%的神话收益,目标很实在:在A股市场中,把5元以下、流通市值低于30亿、近60日无涨停、非ST这一类被主流资金长期忽视的股票,做成一套“可盯盘、可换仓、可复盘”的闭环工具。

你可能觉得低价股=垃圾股,但数据不会骗人。我统计过2018–2023年全市场低价股(定义为收盘价≤5元)的日频波动率中位数是1.87%,比全市场中位数(1.42%)高出32%;而它们的换手率标准差比高价股低19%,说明价格弹性高、但筹码结构相对稳定——这恰恰是技术择时最理想的土壤:波动够用,噪音可控,信号衰减慢。这套系统没用任何机器学习模型,核心就三件事:第一,用滚动窗口+分位数法动态划定“低价”边界(不是固定5元,而是取全市场低价股池的20%分位数);第二,在该池内用双周期MACD+量能突破组合过滤假信号;第三,强制设置持仓上限(单只≤15%,总仓位≤80%),防止踩雷集中爆发。所有逻辑都写在dijiagu.m里,不到400行代码,没有嵌套函数,变量命名全是中文拼音缩写(比如zjbl= 资金比率,jzts= 坚持天数),就是为了让你打开就能看懂、改一行就能试效果。

它真正解决的是三个实操痛点:一是信号滞后问题——很多开源策略输出的是“昨日收盘价触发买入”,但低价股常有早盘跳空,这套系统默认输出T日开盘前可执行的信号(基于T-1日收盘数据+夜盘量能预判);二是换仓摩擦忽略问题——多数回测假设无限流动性,而低价股实际挂单厚度常不足万手,所以dijiagu_tp.m里内置了“滑点模拟模块”,按档位价差和最近5日平均成交额估算实际成交成本;三是结果不可追溯问题——Excel换仓记录(低价股1天换仓.xlsx)不是事后补的,而是策略每次运行自动写入,含时间戳、成交价、对手方类型(买一/卖一)、是否撤单,连券商委托编号字段都预留了空列。这不是炫技,是我在2021年因一笔低价股隔夜单未成交导致回测与实盘偏差3.2%后,咬着牙加进去的。

如果你刚接触量化,别被“MATLAB”吓住——它比Python更像高级计算器。你不需要会面向对象编程,只要懂for循环、if判断、plot画图就行;如果你已有Python经验,你会发现main.py只是个轻量级封装器,真正干活的还是MATLAB脚本,因为矩阵切片(比如price(1:100, :))和向量化逻辑(比如buy_sig = (macd > 0) & (vol > mean(vol(1:20))))在MATLAB里写起来比NumPy更顺手。整套工具包最大的诚意在于:所有.mat回测文件(shouyilv1.mat到shouyilv4.mat)都带原始信号序列、持仓向量、每日现金余额,不是只给你一张收益率曲线图。你可以用load('shouyilv3.mat')直接看到第137个交易日为什么清仓了“*ST某业”,而不是靠猜。

2. 策略设计逻辑与底层原理拆解

2.1 低价股池的动态构建:为什么不用固定价格阈值?

很多人一上来就设“股价<5元”,这是典型静态思维。A股每年退市几十家,新股上市上百只,低价股的绝对价格中枢其实在缓慢下移。我查过Wind数据:2018年全市场股价中位数是12.3元,2023年降到9.7元;而低价股(定义为全市场最低20%分位)的平均价格,2018年是3.2元,2023年是2.6元。如果死守5元线,2023年会漏掉近40%真正活跃的低价标的。所以dijiagu.m里用的是滚动动态池:

% 在主循环中每20个交易日更新一次低价池 if mod(trade_day_idx, 20) == 0 % 取当前交易日前60日所有A股收盘价,剔除ST、停牌、上市不足60日 valid_price = price_data(~is_st & ~is_suspended & days_listed>=60, end-59:end); % 计算全市场低价分位线:取20%分位数,再乘以0.95作为安全边际 low_threshold = prctile(valid_price(:), 20) * 0.95; low_stock_ids = find(price_data(:, end) < low_threshold); end

这个0.95系数是关键。它不是拍脑袋定的,而是基于历史回测的滑动窗口优化结果:当系数在0.9~0.98之间时,池子稳定性(日均换股数/总股数)与收益率夏普比率乘积最大。系数太小(如0.8),池子过于激进,每天换20%股票,交易成本吃掉大部分收益;太大(如0.99),池子僵化,错过阶段性低价股行情。我实测过,用0.95时,2020–2023年低价池日均换股率稳定在3.2%,而用固定5元线则是12.7%。

提示:Book4.xlsx里的“price”表是清洗后的日频数据,但注意它的“date”列是Excel序列号(如44197代表2020-12-31),MATLAB读取后需用datetime(date_num,'ConvertFrom','excel')转换,否则时间对齐会出错。这点在dijiagu.m第87行有注释,但新手常忽略,导致信号错位一天。

2.2 买卖信号生成:双周期MACD+量能确认的物理意义

低价股的最大陷阱是“脉冲式上涨”——今天涨停,明天跌停,主力拉高出货。单纯用MACD金叉死叉,胜率不到45%。我的解法是引入量能确认机制,但不是简单加个“成交量>5日均量”这种粗糙条件。dijiagu_tp.m里用的是“量能斜率+持续性”双校验:

  • 量能斜率:计算最近3日成交量对数的一阶差分,即diff(log(vol(1:3)))。为什么要用对数?因为低价股成交量常跨数量级(今日1万手,明日10万手),线性差分会被大数主导,而对数差分能反映真实增速变化。当斜率>0.3时,说明量能进入加速释放阶段。
  • 持续性校验:要求该斜率信号连续出现2天,且第2天收盘价必须高于第1天最高价。这排除了“单日放量假突破”,因为真突破必然伴随价格新高。

MACD部分也做了适配:标准参数(12,26,9)在低价股上太钝,我把快线周期压缩到8,慢线保持26,信号线用5——这样既能捕捉低价股常见的3~5日波段,又避免过度交易。公式在代码里是:

% 自定义MACD,快线EMA(8),慢线EMA(26),信号线EMA(5) of DIFF ema_fast = movmean(price, [7,0], 'omitnan'); % MATLAB movmean等效EMA(8) ema_slow = movmean(price, [25,0], 'omitnan'); diff_line = ema_fast - ema_slow; dea_line = movmean(diff_line, [4,0], 'omitnan'); macd_hist = diff_line - dea_line;

注意这里没用financial toolboxmacd()函数,因为那个函数默认用指数加权,而movmean是简单移动平均,计算更快且结果更稳定。实测下来,在低价股上,这种简化版MACD的信号延迟比原版少0.7个交易日(用corrcoef算信号与实际涨跌幅的时滞相关性得出)。

2.3 持仓管理与风控:为什么单只股票上限设为15%?

低价股持仓最怕“黑天鹅”。2022年有个案例:某低价化工股因环保核查突然停牌3个月,期间同池其他股票涨了15%,但该股复牌后直接跌停。如果满仓一只,整个策略就废了。所以zongshouyi.m里的仓位算法是分层的:

  1. 基础仓位:按信号强度分配。MACD柱状体高度(macd_hist绝对值)越大,基础仓位越高,但封顶30%;
  2. 流动性折价:用最近5日平均成交额除以当日流通市值,得到“换手支撑率”,低于0.5%的股票,基础仓位×0.6;
  3. 最终上限:单只≤15%,且总仓位≤80%,剩余20%现金应对突发停牌或补仓。

这个15%不是经验值,而是通过蒙特卡洛模拟算出来的:我随机抽取500组低价股组合,模拟1000次停牌事件(按历史停牌概率分布抽样),计算不同单只上限下的最大回撤。结果发现,当上限从10%提到15%时,年化收益提升1.2%,但最大回撤只增加0.8个百分点;再提到20%,收益增0.3%,回撤却跳升2.1%。所以15%是收益/风险比的拐点。

注意:低价股1天换仓.xlsx里“可用资金”列不是静态数字,而是根据zongshouyi.m输出的每日现金余额动态填充的。比如第100天现金余额是12.3万元,当天信号买入3只股票,系统会按15%上限自动分配:第一只分4.5万,第二只4.5万,第三只3.3万(因剩余资金不足4.5万),严格遵循“先满足上限,再按信号强度排序”。

3. 实操全流程详解:从数据加载到信号导出

3.1 环境准备与依赖检查

这套工具唯一硬性要求是MATLAB R2015b及以上版本,不需要任何工具箱——这是刻意为之的设计。金融工具箱(Financial Toolbox)虽然有现成的backtest函数,但它强制要求数据格式为timetable,而低价股行情常有停牌缺失值,timetable处理起来反而麻烦。我们全程用基础矩阵操作,兼容性更强。

安装步骤极简:
1. 下载资源包,解压到任意路径(比如C:\dijiagu\);
2. 启动MATLAB,点击“主页”→“设置路径”→“添加并包含子文件夹”,选择解压后的根目录;
3. 在命令行输入which dijiagu,若返回完整路径(如C:\dijiagu\dijiagu.m),说明路径已生效;
4. 运行dijiagu,首次会提示“找不到Book4.xlsx”,此时把Book4.xlsx复制到MATLAB当前工作目录(默认是Documents\MATLAB),或修改dijiagu.m第23行的data_path变量指向你的存放位置。

提示:main.py是给习惯Python工作流的用户准备的快捷入口。它不做计算,只调用MATLAB引擎(需提前安装matlab.engine)。运行python main.py --mode backtest --param_set 3会自动启动MATLAB,加载shouyilv3.mat并生成图表。但如果你只是想快速跑通,直接MATLAB里敲dijiagu更直接。

3.2 数据预处理:Book4.xlsx的清洗逻辑

Book4.xlsx是原始行情源,但不能直接用。它有三个坑:
-日期格式混乱:有些行是“2020/12/31”,有些是“2020-12-31”,还有纯数字(Excel序列号);
-停牌数据缺失:停牌日价格为空,但成交量填了0,导致计算均线时产生偏差;
-ST标识不统一:有的写“*ST”,有的写“ST”,有的甚至没标。

dijiagu.m第45–120行做了全自动清洗:

% 1. 统一日期:识别三种格式,转为datenum raw_date = raw_data{:,1}; date_num = zeros(size(raw_date)); for i = 1:length(raw_date) if isnumeric(raw_date{i}) % Excel序列号 date_num(i) = raw_date{i}; elseif contains(raw_date{i},'/') % '2020/12/31' date_num(i) = datenum(raw_date{i},'yyyy/mm/dd'); else % '2020-12-31' or other date_num(i) = datenum(raw_date{i}); end end % 2. 处理停牌:价格为空时,用前一日价格填充;成交量为0且价格非空时,标记为停牌 price_clean = raw_data{:,3}; vol_clean = raw_data{:,4}; is_suspended = (isnan(price_clean)) | (vol_clean==0 & ~isnan(price_clean)); price_clean(is_suspended) = fillmissing(price_clean,'previous'); % 向前填充价格 % 3. ST识别:正则匹配所有含'ST'的股票名称 stock_name = raw_data{:,2}; is_st = cellfun(@(x) ~isempty(regexp(x,'ST','ignorecase')), stock_name);

清洗后生成clean_data.mat缓存文件,下次运行直接加载,省去重复清洗时间。你可以在hzg低价股择时文件夹里找到data_preprocess_log.txt,里面记录了每次清洗的停牌日数量、ST股占比等统计,方便你验证数据质量。

3.3 主策略运行:dijiagu.m的核心执行流程

dijiagu.m是策略心脏,执行分五步:

Step 1:初始化参数(第130–150行)
所有可调参数集中在此,包括:
-lookback_days = 60;// 动态低价池的回溯期
-macd_fast = 8; macd_slow = 26; macd_signal = 5;// MACD参数
-vol_slope_thres = 0.3;// 量能斜率阈值
-max_single_pos = 0.15;// 单只上限

实操心得:新手常改macd_fast想抓更短周期,但实测macd_fast=6时,信号频率翻倍,但胜率从52.3%降到46.1%。低价股的流动性决定了它不适合超短线,8是平衡点。

Step 2:构建低价池(第155–180行)
如前所述,每20日更新一次,生成low_pool_ids逻辑索引向量。

Step 3:生成信号矩阵(第185–250行)
对池内每只股票,计算:
-macd_hist(MACD柱状体)
-vol_slope(量能斜率)
-price_new_high(是否创近期新高)
然后合成买卖信号:

buy_signal = (macd_hist > 0) & (vol_slope > vol_slope_thres) & ... (price_new_high) & (macd_hist > 0.5*median(macd_hist)); sell_signal = (macd_hist < 0) & (vol_slope < -0.2); % 死叉+量能萎缩

注意0.5*median(macd_hist)这个动态阈值——它让信号强度与池内股票整体活跃度挂钩,避免在冷清市况下发出弱信号。

Step 4:仓位分配与持仓更新(第255–320行)
根据信号和风控规则,更新position_matrix(T日持仓矩阵)和cash_balance(现金余额)。这里有个细节:卖出信号优先级高于买入,即当天既有买又有卖,先卖后买,确保现金充足。

Step 5:结果输出(第325–380行)
生成三类文件:
-result_dijiagu.png:收益率曲线图(蓝色)+基准沪深300(灰色)+现金比例(红色)
-trade_log.xlsx:详细交易日志,含日期、股票代码、买卖方向、成交价、手续费
-signals.mat:结构体,含buy_sigsell_sigpositiondaily_return等字段,供后续分析

运行完成后,控制台会打印摘要:

【策略运行完成】 回测周期:2020-01-02 至 2023-12-29(共1024个交易日) 总收益率:+87.3%,年化:22.1% 最大回撤:-28.6%,夏普比率:1.03 信号总数:1287次,胜率:52.3%

3.4 回测结果解读:五个.mat文件的差异本质

资源包里的shouyilv1.matshouyilv4.mat不是随便跑的,而是四组关键参数的对比实验:

文件名核心参数差异设计意图典型表现
shouyilv1.matmacd_fast=12,vol_slope_thres=0.2保守型,降低信号频率年化18.2%,回撤-22.1%,信号数842次
shouyilv2.matmacd_fast=8,vol_slope_thres=0.3标准版,本文主推年化22.1%,回撤-28.6%,信号数1287次
shouyilv3.matmax_single_pos=10%,total_cap=70%高风控版,应对极端行情年化15.7%,回撤-16.3%,信号数956次
shouyilv4.mat加入“涨停次日不买入”规则规避追高陷阱年化20.4%,回撤-25.8%,胜率54.1%

dijiagu_tp.m是增强版,它在shouyilv2基础上增加了:
-滑点模拟:按买卖档位价差(bid_ask_spread)和成交额估算实际成交价,使回测更贴近实盘;
-隔夜单处理:低价股常有集合竞价大幅跳空,dijiagu_tp.m会检查T日开盘价是否偏离T-1日收盘>5%,若是,则修正买入价为开盘价,并标记is_gap_trade=1
-手续费分层:万1.5(券商费率)+印花税(卖出0.1%)+过户费(沪市0.001%),精确到小数点后4位。

你可以用load('shouyilv2.mat')查看内部结构:

>> s = load('shouyilv2.mat'); >> fieldnames(s) ans = 1×5 cell array {'buy_sig'} {'sell_sig'} {'position'} {'daily_return'} {'cum_return'} >> size(s.buy_sig) % 1024×500矩阵,每列是一只股票的买入信号(1/0) ans = 1024 500

4. 实盘换仓记录与结果验证方法

4.1 Excel换仓记录的生成逻辑与字段含义

低价股1天换仓.xlsx不是策略输出的副产品,而是策略执行的指令清单。它由dijiagu.m在每次运行后自动生成,结构如下:

列名含义示例是否必填
trade_date交易日期(YYYY-MM-DD)2023-06-15
stock_code股票代码(6位数字)002341
stock_name股票简称新纶新材
direction方向(BUY/SELL)BUY
signal_strength信号强度(0~1)0.82
target_weight目标仓位权重(%)15.0
actual_weight实际成交仓位(%)14.7
order_price委托价格(元)2.35
exec_price成交价格(元)2.34
slippage滑点(bps)-43
commission手续费(元)12.8
broker_id券商委托编号否(预留)

关键字段解析:
-signal_strength:不是二值信号,而是abs(macd_hist)/max(abs(macd_hist))归一化值,0.8以上视为强信号,优先执行;
-actual_weight:因现金余额或涨跌停限制,实际成交可能低于目标,此列记录真实分配;
-slippage(exec_price - order_price)/order_price * 10000,单位基点(bps),负值表示买入成交价低于委托价(捡漏),正值表示高于(吃亏)。

实操心得:我最初没记录slippage,结果2022年Q3发现策略回测年化25%,实盘只有18%。深挖后发现低价股在早盘9:25集合竞价时段,order_price设为前日收盘价,但实际成交常有±1.5%偏差。加上此列后,回测与实盘收益偏差收窄到±0.8%以内。

4.2 如何用Excel记录反向验证策略逻辑?

验证不是看“结果对不对”,而是看“过程合不合理”。我推荐三步交叉验证法:

第一步:时间对齐验证
打开低价股1天换仓.xlsx,筛选trade_date=2023-06-15,找到所有BUY记录。然后在MATLAB里运行:

s = load('shouyilv2.mat'); date_vec = datetime(s.trade_dates,'ConvertFrom','datenum'); % 转换日期 idx = find(date_vec == datetime('2023-06-15')); buy_today = s.buy_sig(idx,:); % 第idx行的买入信号向量 stock_pool = readtable('Book4.xlsx'); % 读取股票池 buy_codes = stock_pool(strcmp(stock_pool.is_low,1), 'code'); % 获取低价池股票代码 % 对比buy_today中为1的位置,与Excel里的stock_code是否一致

如果完全匹配,说明信号生成无误。

第二步:价格合理性验证
选Excel里一笔BUY记录,比如stock_code=002341order_price=2.35。回到Book4.xlsx,查该股2023-06-14的收盘价(应为2.35),2023-06-15的开盘价(应≥2.35)。若开盘价是2.32,说明委托价设高了,但Excel里exec_price=2.32slippage=-128,这就是合理滑点,不是策略错误。

第三步:仓位一致性验证
Excel里target_weight=15.0actual_weight=14.7。在MATLAB里查当日现金余额:

cash_bal = s.cash_balance(idx); % 当日现金 total_value = s.portfolio_value(idx); % 当日总资产 target_cash = cash_bal * 0.15 / (1 - 0.15); % 计算应投入现金 actual_cash = target_cash * (14.7/15.0); % 按比例缩放

actual_cash与Excel里commission所在行的成交金额一致,说明仓位计算逻辑正确。

4.3 常见问题排查与避坑指南

Q1:运行dijiagu报错“Undefined function ‘movmean’”

原因movmean是R2016a新增函数,你的MATLAB版本低于此。
解法:替换为兼容写法。打开dijiagu.m,找到所有movmean(x, [n,0]),改为:

% 替代movmean(x, [7,0]) window_len = 8; x_padded = [nan(1,window_len-1); x]; % 前补NaN ema_fast = nanmean(hankel(x_padded(1:end-window_len+1), x_padded(end-window_len+1:end)), 2);

或者直接升级MATLAB——R2015b已停止支持,强烈建议用R2018b及以上。

Q2:result_dijiagu.png里收益率曲线是平的

原因Book4.xlsx数据没加载成功,price_data为空矩阵,导致所有计算返回NaN。
排查:在命令行输入size(price_data),若返回0 0,说明路径错误。检查dijiagu.m第23行data_path是否指向Book4.xlsx所在目录,且文件名拼写准确(Windows区分大小写?不区分,但空格要一致)。

Q3:Excel换仓记录里出现大量SELL但无BUY

原因:低价池更新滞后。比如你在2023-12-29运行,但Book4.xlsx最新数据只到2023-12-20,那么最后9天池子为空,只能清仓。
解法:确保Book4.xlsx数据覆盖整个回测周期。可用dijiagu.m第165行的disp(['Low pool updated on ', datestr(now)])确认更新时间。

Q4:实盘换仓时发现某只股票没在低价池里,但策略信号却买了

原因dijiagu.m里低价池构建用的是“T-60日数据”,但实盘T日买入,需确保T-60日数据存在。若Book4.xlsx缺T-60日数据,池子会回退到更早日期,导致池子异常扩大。
避坑:在hzg低价股择时文件夹里运行check_data_completeness.m,它会扫描Book4.xlsx,报告缺失日期,并提示补全。

最后分享一个小技巧:想快速测试新参数?不用重跑全部回测。在MATLAB里加载shouyilv2.mat,修改buy_sig矩阵(比如把所有信号强度<0.6的置0),再运行zongshouyi(s),它会基于现有持仓序列重新计算收益——省去90%时间。

5. 进阶扩展与个性化改造建议

这套工具的设计哲学是“最小可行闭环”——它不追求大而全,而是确保从数据输入到信号输出的每一步都可审计、可调试、可替换。如果你想让它更贴合你的实盘需求,这里有三条经过验证的改造路径:

路径一:接入实时行情(无需额外软件)
MATLAB自带webread函数,可抓取免费API。比如聚宽(JoinQuant)的免费行情接口:

% 在dijiagu.m末尾添加 url = ['https://api.jqdata.com/v1/price?token=YOUR_TOKEN&symbol=', stock_code, '&start_date=', date_str]; json_data = webread(url); price_realtime = jsondecode(json_data).close; % 将price_realtime赋值给price_data的最新列,触发新信号计算

注意:免费版限频次,建议只用于收盘后更新,盘中用本地缓存。

路径二:增加基本面过滤器
低价股常伴业绩暴雷,可在低价池构建后加一层ROE筛选:

% 加载ROE数据(需准备roedata.xlsx,含code、roe_ttm列) roe_data = readtable('roedata.xlsx'); roe_map = containers.Map(roe_data.code, roe_data.roe_ttm); valid_roe = arrayfun(@(c) isKey(roe_map,c) && roe_map(c)>0.05, stock_codes_in_pool); low_pool_ids = low_pool_ids(valid_roe);

实测加入ROE>5%后,年化收益微降0.8%,但最大回撤收窄至-21.3%,适合保守型用户。

路径三:导出为券商API指令
如果你用中信证券、华泰等支持Python下单的券商,可修改dijiagu.m的输出模块:

% 替换原Excel输出,生成JSON指令 trade_json = struct(); trade_json.timestamp = datetime('now'); trade_json.orders = {}; for i = 1:size(buy_signals,2) if buy_signals(end,i) trade_json.orders{end+1} = struct('code',stock_codes{i},'action','BUY','amount',round(target_amount(i))); end end writejson('trade_instruction.json', trade_json);

然后用券商SDK读取此JSON自动下单。

我在实际使用中发现,最有效的改造不是加复杂模型,而是强化信号执行纪律。比如在dijiagu_tp.m里加了一行:

% 强制T+1规则:昨日卖出的股票,今日禁止买入 if ~isempty(last_sell_list) buy_sig(:,ismember(stock_codes,last_sell_list)) = 0; end

这看似简单,却让策略在2023年规避了3次低价股“一日游”陷阱(早盘拉涨停,下午炸板跌停)。量化不是比谁模型炫,而是比谁更懂市场的真实约束——这才是这套低价股工具包想传递的底层逻辑。

本文还有配套的精品资源,点击获取

简介:一套开箱即用的低价股日线交易信号生成工具,用MATLAB编写,包含主策略脚本(dijiagu.m)、增强版择时逻辑(dijiagu_tp.m)、收益统计模块(zongshouyi.m),以及5个已跑完的回测结果文件(.mat格式),覆盖不同参数组合下的收益率曲线与持仓序列。配套提供Excel实盘换仓记录(低价股1天换仓.xlsx),方便对照验证;原始行情数据来自Book4.xlsx和Book4-2.xlsx,经清洗后可直接导入运行。所有代码兼容MATLAB R2015b及以上版本,不依赖金融工具箱或额外插件,只需加载数据即可输出买卖点、累计收益图(如_dijiagu.png)和分段收益统计。hzg低价股择时文件夹内含清晰的主入口说明和关键参数配置提示,适合想快速验证低价股择时逻辑的量化初学者或实盘跟踪者。


本文还有配套的精品资源,点击获取

http://www.jsqmd.com/news/1184085/

相关文章:

  • 基于Docker与Nginx的Lanproxy内网穿透实战:从零搭建到HTTPS安全访问
  • C语言写的命令行五子棋AI,带禁手规则和完整可运行工程
  • 如何利用AI进行教材编写?高校教材编写新方法,值得收藏!
  • PyTorch医学图像二分类实战包:从数据加载到F1评估全流程Notebook
  • Android贪吃蛇游戏源码工程包,含完整项目结构、运行截图和开发环境配置文件
  • 3分钟学会:免费解锁WeMod高级功能的终极指南 [特殊字符]
  • Matlab飞蛾扑火优化算法(MFO)完整实现包:含20+测试函数、收敛可视化与函数曲面绘图
  • 3步告别黑边:《植物大战僵尸》宽屏适配终极指南
  • 2026年宁津机网带厂家产品实测及选购实用指南 - 热点品牌推荐
  • 如何通过配置文件定制你的Windows沙盒环境
  • AO3镜像站终极指南:3分钟快速解锁全球最大同人创作平台
  • 三相异步电动机3种主流调速方案深度对比:变频、变极与串级调速
  • LunaTranslator窗口置顶:如何让游戏翻译不干扰游戏体验的终极指南
  • 沙漠化/沙化/荒漠化/干旱程度栅格数据|全球近60年可定制|多分辨率TIF
  • YOLO系列目标检测算法演进与优化实践
  • STM32F103裸机uCGUI实战工程:ILI9325驱动LCD+触摸校准,Keil3一键编译运行
  • Jenkins构建失败精准告警:钉钉机器人条件触发与高级配置实战
  • Halcon机器视觉在制药胶囊缺陷检测中的应用
  • MATLAB时间序列预测工具包:VMD分解预处理+双向LSTM建模与五类误差可视化分析
  • Vue+SpringBoot运动社交平台源码:含数据同步、课程预约、赛事管理、装备商城与健康报告
  • 2026年碳化硅耐磨管品牌厂商业内选购实用指南 - 热点品牌推荐
  • 2026年浇口裁切设备怎么选?实测这几点关键 - 热点品牌推荐
  • strm文件手机怎么播放?安卓苹果保姆级教程
  • 小红书内容下载终极指南:3种方法完整保存图文视频动态
  • AI生成教材秘籍!借助AI工具,轻松编写高质量高校专业教材!
  • Python实战:从零到一构建科研级云雨图(Raincloud Plot)全解析
  • GNSS信号仿真开发套件:C/C++版导航电文生成、轨迹建模与RINEX兼容工具集
  • FastAPI核心原理:类型提示驱动的高性能Web框架
  • 技术揭秘系列:Win10内置OpenSSH服务端,从零搭建安全远程管理环境
  • 粉笔系统班适合文科生备考公考吗?别人说偏基础,其实是文科生补齐短板的稳妥选择