首页

股票决策辅助工具说明(二)-工具设计原理

最近有读者联系笔者,试用一下股票决策辅助工具。目前是完成了内测的在线查询功能,可以查询个股资金以及所在行业资金涨跌趋势,用来提早防范踩坑。

第一张图,可以看到出货速度和行业转向的趋势。

第二张图,砸盘的时候资金还是上涨的趋势,但是资金已经在第6天上面,监测,是实现第一根上涨,就看到。虽然无法预测未来,但是可以先看到机会。

另外,对根据资金波动选股功能,目前实在也没必要开发新的系统,笔者采用发送邮件的方式替代即可。

很感谢这位读者和笔者的互动,也为改进工具提出来不少建议。笔者发现,在正式推出选股数据试用征集之前,需要将工具的设计原理再进行阐述。希望有兴趣的读者可以阅读。

模型,也可以说是系统,工具,三合一,也是开发者心智的模型外在显现,模型制作试验过程也是笔者认识学习的过程。

图片

先上一张图。此处忽略笔者蹩脚的英文表达。软件没有破译。在笔者心中,市场、行业、个股就是这样运动循环的。

蓝色是价格转跌到价格转涨,红色是价格涨到价格转跌。黄色的是循环过程中的四个时间延迟。最下面的是决定市场运作的动力,盈利预期。盈利预期的高低决定了中间的买卖双方的力量对比,从而决定了上面的价格变化。股票二级市场的系统结构和运动变化规律

先用市场来举例,预期好的时候,再高的买入价,都不会妨碍买入,就会形成波浪上涨,筹码不断交换向上。反之,预期差的时候,再低的卖出价都可能被不断抛售,筹码交换不断向下。这两个都是系统运动行为中的正反馈。负反馈是寻找均衡点,稳定点的行为特征。

再来看个股,是一样的过程。其实这也是个哲学模型,个股,行业,市场,经济,分层次的系统如何产生整体的行为特征,涌现?科学决策的思维方法基础——系统辩证法。不扯远了,,个股的股票决策,需要首先分辨个股在运动循环中的位置。股票分阶段运动的资金成本判断方法文已经说明,使用成本线来作为时空定位。

因为决定价格变化的因素信息并不能精确获取,也就没有跑这个系统动力模型的必要性,跑出来也是若干情况中的一种,现实是会有若干种可能,特别对于多阶存量的因果回路系统。

散户个股的决策是属于不确定性决策,不是搞几个假设参数,画几条线,看看历史趋势,最好找到真实的多方力量,随机应变,没有足够的把握别动。或然决定方法的思考

这里重点是没有充分的信息,信息搜集是风险管理的基础,比如,无法提前知道市场中大部分人的预期收益率,这不是个定量,随着市场环境的变化,是个随价格下降的变量。也不知道每一个交易者的要买多少量的筹码的信息,所以散户无法预测,接下来是涨多少,跌多少。有控盘能力的又不一样,获取的信息更多,主导性也强。

图片

笔者此时策略只有等待,按照可以获取的行为信息,按照起心动念,进入拉升,持续拉升,拉升回落对股票进行了分阶段监测。结合资金波动的情况,这是接近真实多方的力量。一只股票的多方力量,不仅受到个股资金的影响,也受到上层行业资金的限制。不管宏观环境如何变化,预期如何变化反映在实际上的还是资金变化。

起心动念就是股价跌到一定位置,股价开始横着走的监测,但是这个过程不一定能走出来,所以一旦创新低,就会被剔除监测,待到价格跌到合适再进入。一直到平均成本从下跌趋势出现走平(负反馈)为止,都会在这个池子。一旦股价穿过成本线,并且开始走平,就会进入第二个阶段,进入拉升阶段。

这个阶段一样会出现震荡反复,因为多空双方,筹码交换都存在延迟,好的情况就是出现减幅震荡,这说明通过来回摩擦,意见差不多一致(负反馈)。这个阶段,如果出现成本创新低,剔除不再监测,待啥时候商量好了回来再看。所以,这个池子可能会出现短时的股价创新低。

第三个阶段,就是成本走出来高度(正反馈),是从第二个阶段发展到的第三阶段的股票。其实这部分在第二阶段也可能出现,因为笔者选择的周期是90天,可能存在还没创新高但是已经拉起来的,一旦创新高就会进入第三阶段中监测。

第四个阶段,就是拉升回落阶段(负反馈演变为正反馈)。不是所有的票都能走出正反馈的指数增长的模式,倍周期的高度,所以,依然会存在震荡,笔者就将这部分暂时回落的部分从第三阶段放到第四阶段,后期如果股价转向,成本回升又进入第三阶段监测。这里存在一个时间差,股价转向不一定马上成本就回升,没有回升的还待在这个池子里。如果成本创新低或者股价创新低,也直接删除,待后来重新回到第一个池子循环。

这个池子的方法,是通过工程的方法来提高散户在决策时多股票看不到的效率问题,工程方面有经验的读者可以自己做来试试。一个行业资金拉升,该行业不同阶段的股票(部分)都会有一定的动静,根据自己平时的交易习惯进行筛选就行了。数学在这里面的应用,可能就是趋势判断的几段代码,详见python讲解如何实现股票序列数值的趋势判断

也可能造成,数量有点多,不知道从哪里下手。优中选优,怎么选,热门?低价格?涨停?,这些标准,笔者不能统一设计。不然就有非法荐股的嫌疑。

笔者采用的数据表格的形式,对四个阶段的股票提供了行业资金波动趋势,变化天数、个股资金波动趋势,变化天数,个股价格趋势,变化天数,以及其他成本变化趋势的参数,资金波动趋势还可以通过在线工具查看(如上图)。

只是辅助决策工具,毕竟交易除了决策信息之外,还有经验积累,操作习惯,心态影响。如果想通过该工具就实现财富自由,是不现实的。特别出现没有满意条件的时候,最好别操作。作为没有足够信息来源和筹码数量的散户,最好不要和资金趋势对着干,顺着大资金更安全。

这部分年后专门来介绍数据表格的每个指标如何使用,笔者计划征集10名志愿者,试用一个月,一同改进工具的设计。如有意愿,可以扫公号下方联系客服二维码。

管理风险     创造价值

图片

保险、金融、风险管理和企业风险管理决策顾问

长按识别二维码关注安佑风管咨询

资产负债管理的整体性方法简要介绍

今天为大家简要介绍下资产负债管理中的整体性方法。

资产负债管理是企业风险管理中的一个重要的实践活动。从广义上讲,资产负债管理是一个连续的管理过程,这一过程包括针对企业资产负债所进行的分析设计、管理实施以及相关政策实施后的跟踪监测和检查,这一系列活动将在满足可接受的风险程度和一定的约束条件下,保证实现企业既定的财务目标。

再具体到资产负债管理应该如何实施,我们就需要在系统观的指导下,对资产负债进行整体性,全局性管理。系统观的内容详见风险识别也是运动变化的–系统世界观,这是我们决策的底层思维逻辑。风险管理为决策服务,详见战略与风险管理的关系

之前我们介绍过一个DFA 动态财务规划,这是比较适合一般企业的一个决策模型。详见适合每个企业财务管理使用的DFA动态财务规划模型框架。DFA 就是整体性方法中的代表方法,另外就是数值模拟的方法。数值模拟和动态规划其实相辅相成。

资产负债管理整体性方法需要在很强的计算机系统支持下才能实现。这也是笔者一直强调,数字经济条件下,企业的风险管理,DFA才会从金融行业扩散到一般企业。目前制造业在进行的智能化设备升级,跟着就是智能化决策。而,智能化决策,一定是需要人来对大模型进行训练,才能实现决策的最优。

而,决策的核心,就是风险管理的思维。对设计人员的技术要求难度,全方位整体性的考虑风险因素,并且能掌握相关领域业务实践知识,并能进行计算机编程,和使用大模型。

因为是整体性的模型,复杂,需要具体问题具体分析,并不会有现成的软件。需要了解业务背景和模型基础的专业人员自己进行程序设计和编写程序,当然还包括后期的维护。必须三合一。

当然也可以将计算机技术方面的问题交给IT人员处理,但是前提一定是资产负债管理的人员能提出非常明确的需求。自己不会,这个是很难做到的。自己如果会,做出来的demo ,提交给IT人员会更高效率。

除了对人的要求外,还需要数据,也就是信息系统。和前面的问题一样,在设计开发的决策模型系统做出来的基础前提,详见信息搜集是风险管理的基础

再梳理一下,三方面,思维,技术,数据。

下面,用笔者设计的一款家庭资产负债管理软件来做简要说明。该软件已经部分申请软著,详见为什么说风险管理顾问是保险销售的转型方向?这套工具是笔者为保险销售提升风险管理水平设计的工具。

家庭使用的资产负债管理工具,复杂程度没有企业版本复杂,但确实是家庭需求的供给缺口。家庭因为缺乏相关的专业知识和技能,思维平时也缺乏专业训练,所以在财务决策时,大多数时候时处于劣势。

软件分为两大模块,目前完成了第一个模块,就是管理决策模块,分为资产负债框架,资产部分,和负债部分。其中资产部分,完成了部分股票决策工具,详见股票决策辅助工具使用说明。另外一个模块是环境变量,这部分,需要待笔者考完试才有时间继续,计划是做自然环境和经济模型结合的模型,引入大模型来训练。

整个系统的是极为复杂的,单单一个或有负债的测算,都需要对宏观经济的运行周期有较为精确的判断才行。有人说,未来不能算准确,怎么说呢,我们就是干这个的。

再补充一下数值模拟技术。举个例子大家就明白了,气象预报,天气系统受到太阳、月亮、大气云层、海洋、陆地、极地冰川等多方面因素的影响,要预判某个地方的近几天的天气变化,现在就是运用的数值模拟技术。属于气象领域的高精尖技术。资产负债管理,一样,要提前预判资产和负债的变化,并提出适当的应对策略。只是,对数据获取的成本,没有气象要求那么高,不需要发卫星。

这就是整体性方法。

具体的数学上的算法和编程设计,如果企业需要相关技能培训和咨询,可以关注公众号,数据柳叶刀。我们提供数据分析人员组织设计,数据分析人员技能培训和模型设计咨询服务。

如何评价模型是好还是坏—交叉验证思路

当你建立了一个模型后,肯定想知道这个模型是好还是坏,就像你完成了一项工作,也需要评价你的工作完成得好不好。前面我们介绍了一系列评价模型优劣的指标如AIC、BIC、MSE 等。但这些指标一般是对数据自身的评价,也就是说,你用一份样本数据建立了模型,然后将模型回代到该样本数据,再来验证该模型的有效性。在这种情况下,通常验证效果会比较好,但这未必真的说明该模型有效。

打个比方,你根据自己的家庭布局发明了一个扫地机器人,它可以把你家的每个角落都打扫得干干净净。看起来不错,但是有一个问题,如果把它放到别人的家中那么由于家庭布局不同,它的打扫效果就很一般了。也就是说,你是根据自己的家庭布局发明的,它只适合你的家庭布局,但却并非适合所有的家庭布局。所以,这算不上一个好的机器人,一个好的机器人应该在所有的环境下都能发挥作用。

从专业上来讲,这就是一个偏差一方差权衡同题、你的扫地机器人对自己家的打扫效果非常好(如99%)说明偏差非常低,但是放到别人的家中打扫效果很地般(如60%),说明方差很大(因为不同家庭的打扫效果差别很大)。只追求偏差而忽略方差,说明推广性不强,如果反过来,有一个扫地机器人在每一家的打扫效果都不算非常好,但都比较稳定(如在每一家都为 80%左右),则说明它的方差很小,但偏差相对较大(因为每一家的打扫效果都不算太好)。

同样的道理,如果你建立了一个模型,怎样才能说明它的好坏? 只是回代效果好 (偏差小)并不意味着真的有效,还需要把它用于新的数据中进行验证。如果验证的结果仍然很好(方差小),就说明模型有效。然而,这一思路说起来简单,做起来就比较困难了。因为实际中的样本数据通常只调查或测量一次,很少进行重复抽样,所以很难在新的数据中进行验证。试想:你要研究高血压的危险因素,调查了 2000 人建立模型,一般不大可能再调查 1000 人来验证这一模型。

交叉验证法(Cross Validation,CV)正是解决这一问题的技术,它先把n例调查数据随机分为k份,以其中的k-1份数据作为训练集 (Training Set),建立模型;然后以剩余的1份数据作为验证集 (Validation Set),验证模型的优劣。经过这种方式验证的效果通常更具有说服力,因为建立模型的数据和验证模型的数据不同。

验证一个模型的好坏,严格来说是把数据分为 3 份:训练集用来建立模型,验证集用来比较模型优劣并筛选模型,还有一个测试集 (Test Set)用来检验模型推广的能力。通常我们所说的把数据按一定比例(如7:3)分为两份,一份是训练集,一份就是测试集,把训练集中建立的模型应用到测试集中,看其效果如何。而在交叉验证中我们通常在训练集中建模,然后利用验证集对模型进行调整和筛选。

交叉验证法可广泛应用于对包括线性模型在内的各种模型的评价,而且可以用于某些参数的确定、变量的筛选等,因为它是一种思路,而不是一种固定的方法。后面我们会在其他内容中继续用到该方法。交叉验证主要有以下几种情形:

(1)当k=n时,等同于把n 例数据分为n份,以其中的n-1 例作为训练集,以剩下的1例作为验证集,这种方法称为留一 (Leave One Out)交叉验证法。例如,编号为1~100的数据,先以第 1~99 号数据作为训练集建立模型,将第 100 号数据代入模型,可计算第 100 号数据的预测值与实际值的差异(如MSE);然后以第1~98、100号数据作为训练集建立模型,将第 99 号数据代入模型,计算第 99 号数据的MSE;按着以第 1~97、99、100 号数据作为训练集建立模型,将第 98 号数据代入模型,计算第98号数据的MSE;····”。这样重复100 次,相当于建立 100 个模型,可以计算 100个MSE,然后得到这 100个MSE的均值。

(2)当k为其他值时,一般称为k折 (k Folds) 交又验证法。如当k=10时,相于把数据集分为 10 份,先以第 1~9 份数作为训练集建立模型,以第 10 份数据作为验证集,可以观察模型的 MSE: 然后以第 1~8、10 份数据作为训练集,以第9 份数据作为验证集,观察模型的 MSE:··…。这样重复 10次,最终也可以计算出 10次MSE的均值。

实际中是选择留一交验证法还是k 折交叉验证法呢? 这仍需要考虑到偏差-方差权衡问题。一般而言,随着K的增加,偏差会变小,但方差会增大。因此,留一交叉验证法估计的偏差较小,因为训练集比较大,但同时带来方差的增大,因为每次都用到N-1 例数据拟合模型,这些结果之间必然存在高度相关。而且在样本量很大时,留一交又验证法的计算量太大。Hastie 等 (2001)推荐采用 10 折或5折交验证法作为较好的折中。

以生活中的数据为例,我们曾以R^2(adj)为标准进行最优子集选择,结果发现age+course、age+course+ht、agetcourse+wt、coursetwt、agetcoursetht+wt 这 5 个模型似乎差别不大。现在我们用 10 折交叉验证法来看一下,这5个模型到底哪个最好。

表 1分别给出了数据回代和交叉验证法给出的MSE。可以看出,回代结果与以R^2(adj)为标准的选择结果一致,R越大的模型,其MSE越小。但交叉验证结果并不完全一致,如 course+wt 模型与 coursetwt+age 模型,从回代结果来看,后者更好(MSE更小):但从交叉验证结果来看,则前者更好。这种情况在实际中并不少见,即多个变量的回代效果较好,但交叉验证效果未必更好。因为变量越多,可能其偏差越小,但方差可能会随之增大,所以在自身验证时会显得效果较好,但新数据的验证则未必。

从结果中还可以看出一个特点,即交叉验证法的 MSE总是高于回代法。这很容易理解,将模型用于自身数据,误差必然较小: 而用于一份新的数据,误差肯定较大。

交叉验证是一种思路,实现方式有很多种,我这里给出sas的宏程序,感兴趣的读者可以自取。

%Macro cv(seed=,data=,k=,Y=,var=,nvar=);

/*data 指定数据,seed 指定种子数,k 指定几折交叉,y 指定因变量,var 指定自变量,nvar指定自变量的数目*/

data vd;

set &data.;

call streaminit(&seed.);

ran=cei1(&k.*rand(“uniform”));

run;

%Do i = 1 to &k:

%DO:

data train &i. valid &i.;

set vd;

if ran=&i. then output valid &i.;

else output train &i.;

run;

proc reg data=train_&i. noprint;

model &y.=&var.;

store param;

run;

proc plm restore=param;

score data=valid &i. out=res &i. residual=res;

run;

%END;

%End;

data res;

set res_l-res_&k.;

res2=res**2;

run;

proc sql;

select ran,sum(res2)/(n(res2)-(&nvar.+l)) as mse from res

/*计算MSE,分母中的n(res2)表示例数,(&nvar.+1)表示变量数+截距*/

group by ran;

quit;

%mend cv;