求代码,java里让用户输入两个java整数类型,然后显示出这两个数的sum,product, difference and (division)

1、Diff算法步骤:

  • 用js对象结构(虚拟DOM)表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树插到文档当中
  • 当状态变更的时候,重新构造一棵新的对象树然后用新的树和旧的树進行比较,记录两棵树差异
  • 把所记录的差异应用到所构建的真正的DOM树上视图就更新了

Diff 算法: 仅在同级的vnode间做diff,递归地进行同级vnode的diff最终實现整个DOM树的更新

2、key的作用原理:

  • 唯一标识,为了高效的更新虚拟DOM
  • transition过渡时使用key属性,可以区分它们是否变化否则vue只会替换其内部属性洏不会触发过渡效果

添加key唯一标识后Diff算法就可以正确的识别此节点,找到正确的位置区插入新的节点

列表节点时:在B和C之间加一个F
Diff算法默认执行把C更新成F,D更新成CE更新成D,最后再插入E

根据我们可以用随机数的方法排序!

{//不符合要求,就继续试

    我的新书于近日上架在这篇博攵里,介绍了这本书的内容这里将摘录出部分内容,用以推广本书请大家多多支持。   

1 MACD指标的计算方式

     从数学角度来分析MACD指标是根据均线的构造原理,对股票收盘价进行平滑处理计算出算术平均值以后再进行二次计算,它是属于趋向类指标

    MACD指标是由三部分构成的,汾别是:DIF(离差值也叫差离值)、DEA(离差值平均)和BAR(柱状线)。

    具体的计算过程是首先算出快速移动平均线(EMA1)和慢速移动平均线(EMA2),用这两个数值来测量两者间的差离值(DIF)在此基础上再计算差离值(DIF)N周期的平滑移动平均线DEA(也叫MACD、DEM)线。

    如前文所述EMA1周期參数一般取12日,EMA2一般取26日而DIF一般取9日,在此基础上MACD指标的计算步骤如下所示。

    第三步:计算差离值的9日EMA(即MACD指标中的DEA)用差离值计算它的9日EMA,这个值就是差离平均值(DEA)

    这里乘以2的原因是,在不影响趋势的情况下从数值上扩大DIF和DEA差值,这样观察效果就更加明显

    朂后,把各点(即每个交易日)的DIF值和DEA值连接起来就能得到在x轴上下移动的两条线,分别表示短期(即快速EMA1,周期是12天)和长期(即慢速EMA2,周期是26天)而且,DIF和DEA的离差值能构成红、绿两种颜色的柱状线在x轴之上是红色,而x轴之下是绿色

2 遍历数据表数据,绘制MACD指標

    同K线指标一样根据不同的计算周期, MACD指标也可以分为日指标、周指标、月指标乃至年指标在下面的DrawMACD.py范例程序中将绘制日MACD指标,在这個范例程序中可以看到关于数据结构、图形绘制和数据库相关的操作由于程序代码比较长,下面分段讲解

7 # 第一个参数是数据,第二个參数是周期

    在第8行到第15行的calEMA方法中根据第二个参数term,计算快速(周期是12天)和慢速(周期是26天)的EMA值

    具体步骤是,通过第9行的for循环遍历由第一个参数指定的DataFrame类型的df对象,根据第10行的if条件中如果是第一天,则EMA值用当天的收盘价如果满足第12行的条件,即不是第一天則在第13行中根据8.3.1节的算法,计算当天的EMA值

    请注意,在第11行和第13行中是通过df.ix的形式访问索引行(比如第i行)和指定标签列(比如EMA列)的数徝ix方法与之前loc以及iloc方法不同的是,ix方法可以通过索引值和标签值访问而loc以及iloc方法只能通过索引值来访问。计算完成后在第14行把df的EMA列轉换成列表类型的对象并在第15行返回。

在第15行到第27行定义的calMACD方法中将调用第8行定义的calEMA方法来计算MACD的值。具体步骤是在第18行和第19行通过調用calEMA方法,分别得到了快速和慢速的EMA值在第20行,用这两个值计算DIF值请注意,shortEMA和longEMA都是列表类型所以可以像第20行那样,通过调用pd.Series方法把咜们转换成Series类对象后再直接计算差值

    从第21行到第25行的程序语句,也是根据8.3.1节给出的公式计算DEA值同样要用两条if语句区分“第一天”和“鉯后几天”这两种情况,在第26行根据计算公式算出MACD的值

    第27行返回指定的列,在后面的代码中还要用到df对象的其他列此时则可以用如第28荇所示的代码返回df的全部列。

30 # 打开数据库连接 39 # 依次把每个cols元素中的第一个值放入col数组

    从第29行到第35行的程序语句建立了MySQL数据库的连接和获嘚游标cursor对象,在第36行中通过select类型的SQL语句,来获取stock_600895表中的所有数据如8.2节所述,这个数据表中的数据源自雅虎网站

    在第37行中,得到了stock_600895数據表的字段列表在第40行和第41行的for循环中,把字段列表中的第0行索引元素放入了heads在第42行和第43行,把从stock_600895数据表中获取的数据放入到df对象茬第44行的程序语句,把包含数据表字段列表的heads对象赋值给df对象的字段

    执行到这里,如果去掉第45行打印语句的注解就能看到第一列输出嘚是字段名列表,之后会按天输出与MACD有关的股票指标数据

58 # 设置x轴坐标的标签和旋转角度 63 # 带网格线,且设置了网格样式

    在第49和第50行中通过調用plot方法以折线的形式绘制出DEA和DIF两根线,在第51行中设置了图例

    在第53行到第57行的for循环中,以柱状图的形式依次绘制了每天的MACD值的柱状线这里用第54行和第56行的if…else语句进行区分,如果row['MACD']大于0则MACD柱是红色,反之是绿色

    从第59行到第61行的程序语句设置了x轴的标签,如果显示每天嘚日期那么x轴上的文字会过于密集,所以在第59行和第60行进行相应的处理只显示stockDataFrame.index%10==0(即索引值是10的倍数)的日期。

    在第62行设置了x轴文字的旋转角度在第64行设置了网格的式样,在第65行设置了标题文字最后在第68行通过调用show方法绘制了整个图形。

    请注意如果不编写第66行的程序语句,那么y轴标签值里的负号就不会显示这样显示结果就不正确了。读者可以把这条语句注释掉后再运行一下,看看结果如何

     至此,我们实现了计算并绘制MACD指标线的功能读者应该掌握了如何获得指定股票在指定时间段内的交易数据,而后可以稍微改写上述的范例程序绘制出其他股票在指定时间范围内的MACD走势图。

3 MACD与K线均线的整合效果图

     MACD是趋势类指标如果把它与K线和均线整合到一起的话,就能更恏地看出股票走势的“趋势性”在下面的DrawKwithMACD.py范例程序中示范了整合它们的效果,由于程序代码比较长因而在下面的分析中略去了一些之湔分析过的重复代码,读者可以从本书提供下载的范例程序中看到完整的代码

9 # 计算EMA的方法,第一个参数是数据第二个参数是周期 11 # 省略具体实现,请参考本书提供下载的完整范例程序 14 # 省略中间的计算过程请参考本书提供下载的完整范例程序

从第3行到第8行的程序语句通过import語句导入了必要的依赖包,第10行定义的calEMA方法和DrawMACD.py范例程序中的完全一致所以就省略了该方法内部的代码。第13行定义计算MACD的calMACD方法和DrawMACD.py范例程序Φ的同名方法也完全一致但在最后的第15行,是通过return语句返回整个df对象而不是返回仅仅包含MACD指标的相关列,这是因为在后文中需要股票的开盘价等数值来绘制K线图。

17 # 打开数据库连接 26 # 依次把每个cols元素中的第一个值放入col数组

    从第16行到第33行的程序语句把需要的数据放入了stockDataFrame这个DataFrame類型的对象中之后就可以根据其中的数据画图了,这段程序代码之前分析过就不再重复讲述了。

34 # 开始绘图设置大小,共享x坐标轴
36 # 调鼡方法绘制K线图

    从第34行到第44行的程序语句绘制了指定时间范围内“张江高科”股票的K线图和均线这部分代码和第7章drawKMAAndVol.py范例程序中实现同类功能的代码很相似,有差别的是在第35行第二个子图的名字设置为“axMACD”,在第44行中通过linestyle设置了网格线的样式

45 # 开始绘制第二个子图
49 # 设置第②个子图中的MACD柱状图
61 # 旋转x轴显示文字的角度

    在上述程序代码中,在axMACD子图内绘制了MACD线由于是在子图内绘制,因此在第46行和第47行绘制DEA和DIF折线嘚时候需要在参数里通过“ax=axMACD”的形式指定所在的子图。

    在第59行和第60行中设置了axMACD子图中的x轴标签由于在第35行中设置了axPrice和axMACD两子图是共享x轴,因此K线和均线所在子图的x轴刻度会和MACD子图中的一样因为是在子图中,所以需要通过第62行和第63行的for循环依次旋转x轴坐标的标签文字

    在這段代码中其实给出了两种设置x轴标签的方式。如果注释掉第59行和第60行的代码并去掉第57行和第58行的注释,会发现效果是相同的

    需要说奣的是,虽然在第57行和第59行的代码中并没有指定标签文字但在第37行调用candlestick2_ochl方法绘制K线图时,会设置x轴的标签文字所以依然能看到x轴上日期的标签。运行这个范例程序后结果如图所示。

    根据MACD各项指标的含义可以通过DIF和DEA两者的值、DIF和DEA指标的交叉情况(比如金叉或死叉)以忣BAR柱状图的长短与收缩的情况来判断当前股票的趋势。

    如下两点是根据DIF和DEA的数值情况以及它们在x轴上下的位置来确定股票的买卖策略

    第┅,当DIF和DEA两者的值均大于0(在x轴之上)并向上移动时一般表示当前处于多头行情中,建议可以买入反之,当两者的值均小于0且向下移動时一般表示处于空头行情中,建议卖出或观望

    第二,当DIF和DEA的值均大于0但都在向下移动时一般表示为上涨趋势即将结束,建议可以賣出股票或观望同理,当两者的值均小于0但在向上移动时,一般表示股票将上涨建议可以持续关注或买进。

    如下四点是根据DIF和DEA的交叉情况来决定买卖策略

    第一,DIF与DEA都大于0而且DIF向上突破DEA时说明当前处于强势阶段,股价再次上涨的可能性比较大建议可以买进,这就昰所谓MACD指标黄金交叉也叫金叉。

    第二DIF与DEA都小于0,但此时DIF向上突破DEA时表明股市虽然当前可能仍然处于跌势,但即将转强建议可以开始买进股票或者重点关注,这也是MACD金叉的一种形式

    第三,DIF与DEA虽然都大于0但而DIF却向下突破DEA时,这说明当前有可能从强势转变成弱势股價有可能会跌,此时建议看机会就卖出这就是所谓MACD指标的死亡交叉,也叫死叉

    第四,DIF和DEA都小于0在这种情况下又发生了DIF向下突破DEA的情況,这说明可能进入下一阶段的弱势中股价有可能继续下跌,此时建议卖出股票或观望这也是MACD死叉的一种形式。

    如下两点是根据MACD中BAR柱狀图的情况来决定买卖策略

    第一,红柱持续放大这说明当前处于多头行情中,此时建议买入股票直到红柱无法再进一步放大时才考慮卖出。相反如果绿柱持续放大,这说明当前处于空头行情中股价有可能继续下跌,此时观望或卖出直到绿柱开始缩小时才能考虑買入。

    第二当红柱逐渐消失而绿柱逐渐出现时,这表明当前的上涨趋势即将结束有可能开始加速下跌,这时建议可以卖出股票或者观朢反之,当绿柱逐渐消失而红柱开始出现时这说明下跌行情即将或已经结束,有可能开始加速上涨此时可以开始买入。

    虽然说MACD指标對趋势的分析有一定的指导意义但它同时也存在一定的盲点。

    比如当没有形成明显的上涨或下跌趋势时(即在盘整阶段),DIF和DEA这两个指标会频繁地出现金叉和死叉的情况这时由于没有形成趋势,因此金叉和死叉的指导意义并不明显

    又如,MACD指标是对趋势而言的从中無法看出未来时间段内价格上涨和下跌的幅度。比如在图8-11中股票“张江高科”在价格高位时,DIF的指标在2左右但有些股票在高位时,DIF的指标甚至会超过5

也就是说,无法根据DIF和DEA数值的大小来判断股价会不会进一步涨或进一步跌有时看似DIF和DEA到达一个高位,但如果当前上涨趨势强劲股价会继续上涨,同时这两个指标会进一步上升反之亦然。

    因此在实际使用中,投资者可以用MACD指标结合其他技术指标比洳之前提到的均线,从而能对买卖信号进行多重确认

5 验证基于柱状图和金叉的买点

    在CalBuyPointByMACD.py范例程序中将根据如下原则来验证买点:DIF向上突破DEA(出现金叉),且柱状图在x轴上方(即当前是红柱状态)

    在这个范例程序中,用的是股票“金石资源(代码为603505)从2018年9月到2019年5月的交易数據程序代码如下。

6 # 第一个参数是数据第二个参数是周期 8 # 省略方法内的代码,请参考本书提供下载的完整范例程序 11 # 省略中间计算过程的玳码最后返回的是df,请参考本书提供下载的完整范例程序

    上述代码的calEMA和calMACD方法和8.3.4节的范例程序中的代码完全一致所以就不再重复讲述了。

15 # 打开数据库连接 24 # 依次把每个cols元素中的第一个值放入col数组

    第13行开始的getMACDByCode方法中包含了从数据表中获取的股票交易数据并返回MACD指标的代码 这蔀分程序代码与之前DrawKwithMACD.py范例程序中的程序也非常相似,只不过在第21行中是根据股票代码来动态地拼接select语句该方法在第31行中返回包含MACD指标的stockDataFrame對象。

40 #规则2:出现红柱即MACD值大于0

    如果去掉第32行打印语句的注释,执行后就能确认数据在第35行到第45行的while循环中,依次遍历了每个交易日嘚数据有数据计算的误差,所以在这个范例程序中通过第36行的if语句排除了刚开始29天的数据从第30天算起。

    在第39行的if条件语句中制定了第┅个规则前一个交易日的DIF小于DEA,而且当天DIF大于DEA即出现上穿金叉的现象。在第41行的if条件语句中制定了第二个规则即出现金叉的当日,MACD指标需要大于0即当前BAR柱是红柱状态。运行这个范例程序之后就能看到如下输出的买点。

    下面改写一下之前的范例程序把股票代码改荿603505,把股票名称改为“金石资源”运行后即可看到如图所示的结果图。 

    根据图中的价格走势在表中列出了各买点的确认情况。

表  基于MACD嘚到的买点情况确认表

该日出现DIF金叉且Bar已经在红柱状态,后市有涨

该日出现DIF金叉,且Bar柱开始逐渐变红后市有涨。

该日虽然出现金叉Bar柱也开始变红,但之后几天Bar交替出现红柱和绿柱情况后市在下跌后,出现上涨情况

该日在出现金叉的同时,Bar柱由绿转红但之后若幹交易日后出现死叉,且Bar柱又转绿后市下跌。

出现金叉且Bar柱由绿柱一下子变很长,后市有涨

    根据这个范例程序的运行结果,可以得箌的结论是:通过MACD指标的确能算出买点但之前也说过,MACD有盲点在盘整阶段,趋势没有形成时此时金叉的指导意义就不是很明显,甚臸是错误的

6 验证基于柱状图和死叉的卖点

    参考MACD指标,与8.4.2节描述的情况相反如果出现如下情况,则可以卖出股票:DIF向下突破DEA(出现死叉)且柱状图向下运动(红柱缩小或绿柱变长)。下面通过股票“士兰微”(代码为600460)从2018年9月到2019年5月的交易数据来验证卖点

8 # 省略方法内嘚程序代码,请参考本书提供下载的完整范例程序 9 # 定义计算MACD的方法内的程序代码也没有变 11 # 省略方法内的程序代码请参考本书提供下载的唍整范例程序 21 # 规则2:Bar柱是否向下运动

    在第14行中通过调用getMACDByCode方法,获取了600460(士兰微)的交易数据其中包含了MACD指标数据。在第16行到第26行的while循环Φ通过遍历stockDf对象计算卖点。

    具体的步骤是通过第17行的if条件语句排除了误差比较大的数据,随后通过第20行的if语句判断当天是否出现了DIF死叉的情况即前一个交易日的DIF比DEA大,但当前交易日DIF比DEA小

    当满足这个条件时,再通过第22行的if语句判断当天的Bar柱数值是否小于前一天的即判断Bar柱是否在向下运动。当满足这两个条件时通过第23行的代码输出建议卖出股票的日期。运行这个范例程序代码后可看到如下输出的賣点。

再修改前文提到的DrawKwithMACD.py范例程序把股票代码改为600460,把股票名称改成“士兰微”运行后即可看到如图所示的结果图。

    再根据价格走势在表中列出了各卖点的确认情况。

表  基于MACD得到的卖点情况确认表

1. 该日出现DIF死叉且DIF和DEA均在x轴下方,Bar由红转绿且绿柱持续扩大。

2. 虽然能驗证该点附近处于弱势但由于此点已经处于弱势,所以后市价位跌幅不大

1. 在DIF和DEA上行过程中出现死叉。

2. Bar柱从红转绿后市股价有一定幅喥的下跌。

在11月29日的卖点基础上再次出现死叉,且Bar柱没有向上运动的趋势所以进一步确认了弱势行情,果然后市股价有一定幅度的下跌

1. 虽然出现死叉,但前后几天DIF和DEA均在向上运动这说明强势并没有结束。

2. Bar柱虽然变绿但变绿的幅度非常小。

3. 后市价格不是下跌而是仩涨了。

1. DIF和DEA在x轴上方出现死叉说明强势行情有可能即将结束。

2. Bar柱由红开始转绿

3. 后市价位出现一波短暂反弹,这可以理解成强势的结束之后出现下跌,且下跌幅度不小

    从上述的验证结果可知,从MACD指标中能看出股价发展的趋势当从强势开始转弱时,如果没有其他利好消息可以考虑观望或适当卖出股票。

    在通过MACD指标确认趋势时应当从DIF和DEA的数值、运动趋势(即金叉或死叉的情况)和Bar柱的运动趋势等方媔综合评判,而不能简单割裂地通过单个因素来考虑

    并且,影响股价的因素非常多在选股时,应当从资金面、消息面和指标的技术面等因素综合考虑哪怕在指标的技术面,也应当结合多项技术指标综合考虑如前文所述,单个指标难免出现盲点当遇到盲点时就有可能出现风险而误判。

    上述内容是摘自我的书《基于股票大数据分析的Python入门实战 视频教学版》,京东链接:

    在我的博客里,也有其它相關介绍本书的文章链接如下。

    本文可转载但请标明出处,同时请全文转载别根据自身需要在转载时恶意删改本文

我要回帖

更多关于 java整数类型 的文章

 

随机推荐