基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc

上传人:doc321 文档编号:13027144 上传时间:2021-12-11 格式:DOC 页数:17 大小:122.50KB
返回 下载 相关 举报
基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc_第1页
第1页 / 共17页
基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc_第2页
第2页 / 共17页
基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc_第3页
第3页 / 共17页
基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc_第4页
第4页 / 共17页
基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc》由会员分享,可在线阅读,更多相关《基于Java语言开发的个性化股票分析技术:移动平均线(MA).doc(17页珍藏版)》请在三一文库上搜索。

1、基于Java语言开发的个性化股票分析技术:移动平均线(MA)移动平均线(MA)是以道·琼斯的“平均成本概念”为理论基础,采用"移动平均"的原理, 将一段时期内的股票价格平均值连成曲线,显示股价的历史波动情况,进而反映股价指数未 来发展趋势的技术分析方法。优点:显示买进和卖出信号,直观的显示价格变动大致方向。 缺点:不易把握汇价的高峰及低谷;须靠其他的技术指标的辅助。XML描述:<?xml version="1.0" encoding="UTF-8" ?><indicator shortName="

2、MA" fullName="移动平均线" class="com.shengrensoft.stock.model.indicator.dailyma.DailyMAIndicator" dataUnit="D"><!- 仅限:分钟、每日、每周、每月 四种情况允许 -> <!- 参数列表 -> <paramList> <param shortName="TINY" value="5" fullName="超短期" /&g

3、t; <param shortName="SHRT" value="10" fullName="短期" /> <param shortName="MID" value="30" fullName="中期" /> <param shortName="LONG" value="60" fullName="长期" /> <param shortName="HUGE&quo

4、t; value="120" fullName="超长期" /> </paramList> <!- 数据列表 -> <dataList> <data shortName="StkDailyK" /> <data shortName="IdxDailyK" /> <data shortName="BlkDailyK" /> </dataList> <!- 输出列表 -> <valueList

5、> <value shortName="T" fullName="超短期" /> <value shortName="S" fullName="短期" /> <value shortName="M" fullName="中期" /> <value shortName="L" fullName="长期" /> <value shortName="H" full

6、Name="超长期" /> </valueList> <!- 图形:超短期 -> <drawChart name="T" region="Price"> <line thickness="1" color="#FFFF00" opacity="1"><!- 黄色线形图 -> <valueList> <value shortName="T" name="value&

7、quot; /> </valueList> </line> </drawChart> <!- 图形:短期 -> <drawChart name="S" region="Price"> <line thickness="1" color="#FF00FF" opacity="1"><!- 粉色线形图 -> <valueList> <value shortName="S"

8、name="value" /> </valueList> </line> </drawChart> <!- 图形:中期 -> <drawChart name="M" region="Price"> <line thickness="1" color="#00FF00" opacity="1"><!- 绿色线形图 -> <valueList> <value shortNa

9、me="M" name="value" /> </valueList> </line> </drawChart> <!- 图形:长期 -> <drawChart name="L" region="Price"> <line thickness="1" color="#FFFFFF" opacity="1"><!- 白色线形图 -> <valueList>

10、<value shortName="L" name="value" /> </valueList> </line> </drawChart> <!- 图形:超长期 -> <drawChart name="H" region="Price"> <line thickness="1" color="#00FFFF" opacity="1"><!- 湖蓝色线形图 ->

11、 <valueList> <value shortName="H" name="value" /> </valueList> </line> </drawChart> <description> 移动平均线(MA)是以道·琼斯的“平均成本概念”为理论基础,采用"移动平均"的原理, 将一段时期内的股票价格平均值连成曲线,显示股价的历史波动情况,进而反映股价指数未 来发展趋势的技术分析方法。优点:显示买进和卖出信号,直观的显示价格变动大致方向。 缺点:不易把

12、握汇价的高峰及低谷;须靠其他的技术指标的辅助。 </description></indicator>Java代码:/* * (#)DailyMAIndicator.java * * Copyright Hangzhou Shengren Software Tech. Co., Ltd. */package com.shengrensoft.stock.model.indicator.dailyma;import java.rmi.RemoteException;import java.text.DecimalFormat;import java.util.ArrayLi

13、st;import java.util.LinkedHashMap;import java.util.List;import mons.lang.math.NumberUtils;import mon.util.DateUtil;import mon.util.StkAnalysisUtil;import com.shengrensoft.stock.center.data.Data;import com.shengrensoft.stock.center.data.GettingDataList;import com.shengrensoft.stock.center.data.BlkDai

14、lyK.BlkDailyKData;import com.shengrensoft.stock.center.data.Data.DataName;import com.shengrensoft.stock.center.data.IdxDailyK.IdxDailyKData;import com.shengrensoft.stock.center.data.StkDailyK.StkDailyKData;import com.shengrensoft.stock.center.model.ModelParam;import com.shengrensoft.stock.center.mod

15、el.indicator.AbstractIndicator;import com.shengrensoft.stock.center.model.indicator.IndicatorValue;/* * MA移动平均线的实现类。 * * author 迅动平台 2012/08/27 新建 */public class DailyMAIndicator extends AbstractIndicator /* 序列版本ID */ private static final long serialVersionUID = 6146654415916101973L; / 参数名定义 /* 参数名:

16、超短期 */ private static final String PARAM_TINY = "TINY" /* 参数名:短期 */ private static final String PARAM_SHRT = "SHRT" /* 参数名:中期 */ private static final String PARAM_MID = "MID" /* 参数名:长期 */ private static final String PARAM_LONG = "LONG" /* 参数名:超长期 */ private st

17、atic final String PARAM_HUGE = "HUGE" / 计算值定义 /* 计算值:超短期 */ private static final String VALUE_TINY = "T" /* 计算值:短期 */ private static final String VALUE_SHRT = "S" /* 计算值:中期 */ private static final String VALUE_MID = "M" /* 计算值:长期 */ private static final String

18、 VALUE_LONG = "L" /* 计算值:超长期 */ private static final String VALUE_HUGE = "H" /* * 构造方法。 */ public DailyMAIndicator() throws RemoteException /* * 计算出指定时间范围内MA移动平均线的值序列。 * * param stkCode 证券代码 * param beginDate 起始日期 * param closeDate 终止日期 * param paramsList 指标参数列表 * * return MA移动平均

19、线的值序列 */ public LinkedHashMap<java.util.Date, IndicatorValue> calculate ( String stkCode, java.util.Date beginDate, java.util.Date closeDate, List<ModelParam> paramsList) throws RemoteException / 如果未指定起始日期,则返回空的值序列 if (beginDate = null) return null; / 如果未指定终止日期,则以当前日期作为终止日期 if (closeDate

20、 = null) closeDate = DateUtil.getSystemTime(); / 起始日期、终止日期的前后关系检查 if (beginDate.after(closeDate) return null; / 取得指标的各个参数 int paramTINY = 0; / 参数:超短期 int paramSHRT = 0; / 参数:短期 int paramMID = 0; / 参数:中期 int paramLONG = 0; / 参数:长期 int paramHUGE = 0; / 参数:超长期 for (ModelParam param : paramsList) if (PA

21、RAM_TINY.equals(param.getShortName() paramTINY = NumberUtils.toInt(param.getValue(); else if (PARAM_SHRT.equals(param.getShortName() paramSHRT = NumberUtils.toInt(param.getValue(); else if (PARAM_MID.equals(param.getShortName() paramMID = NumberUtils.toInt(param.getValue(); else if (PARAM_LONG.equal

22、s(param.getShortName() paramLONG = NumberUtils.toInt(param.getValue(); else if (PARAM_HUGE.equals(param.getShortName() paramHUGE = NumberUtils.toInt(param.getValue(); else return null; / 发现一个意外的模型参数 / 判别证券代码类型(股票代码、股指代码、或板指代码),分别计算MA移动平均线的值序列 StkAnalysisUtil stkAnalysisUtil = super.getStkAnalysisUti

23、l(); if (stkAnalysisUtil.isStkCode(stkCode) return this.calcStkDailyMA(stkCode, beginDate, closeDate, paramTINY, paramSHRT, paramMID, paramLONG, paramHUGE); else if (stkAnalysisUtil.isIdxCode(stkCode) return this.calcIdxDailyMA(stkCode, beginDate, closeDate, paramTINY, paramSHRT, paramMID, paramLONG

24、, paramHUGE); else if (stkAnalysisUtil.isBlkCode(super.getUserId(), stkCode) return this.calcBlkDailyMA(stkCode, beginDate, closeDate, paramTINY, paramSHRT, paramMID, paramLONG, paramHUGE); else return null; /* * 计算出指定股票指定日期范围的MA移动平均线值序列。 * * param stkCode 股票代码 * param beginDate 起始日期 * param closeDa

25、te 终止日期 * param paramTINY 超短期参数 * param paramSHRT 短期参数 * param paramMID 中期参数 * param paramLONG 长期参数 * param paramHUGE 超长期参数 * * return MA移动平均线值序列 */ private LinkedHashMap<java.util.Date, IndicatorValue> calcStkDailyMA( String stkCode, java.util.Date beginDate, java.util.Date closeDate, int par

26、amTINY, int paramSHRT, int paramMID, int paramLONG, int paramHUGE) / 准备好指标返回值列表 LinkedHashMap<java.util.Date, IndicatorValue> indicatorValueList = new LinkedHashMap<java.util.Date, IndicatorValue>(); / 取得指定股票指定日期范围的日K数据 GettingDataList dataList = super.getUsingDataList(); Data data = dat

27、aList.getDailyData( DataName.StkDailyKData.getShortName(), stkCode, beginDate, closeDate); if (data = null) return indicatorValueList; / 表示指定日期范围内无对应的日K数据 / 数据类型转换 StkDailyKData dailyKData = (StkDailyKData) data; / 自起始日期始至终止日期止,依次计算出各日的不同MA线的值 List<Integer> tinyCloseValueList = new ArrayList&l

28、t;Integer>(paramTINY); List<Integer> shortCloseValueList = new ArrayList<Integer>(paramSHRT); List<Integer> middleCloseValueList = new ArrayList<Integer>(paramMID); List<Integer> longCloseValueList = new ArrayList<Integer>(paramLONG); List<Integer> hugeCl

29、oseValueList = new ArrayList<Integer>(paramHUGE); / 自起始日期始至终止日期止,依次取得各日的MA移动平均线的值 java.util.Date date = beginDate; do / 日期格式转换(数据存储时统一使用了yyyyMMdd格式) String dateStr = DateUtil.getFormatedDate(date, "yyyyMMdd"); / 容错处理:应对因系统原因导致某日该有交易记录却没有交易记录的情况 Integer test = dailyKData.getOpen(dateS

30、tr); if (test != null && test != 0) / 构造一个值对象 IndicatorValue indicatorValue = new IndicatorValue(); Integer close = dailyKData.getClose(dateStr); if (close != null && close != 0) / 计算超短期MA值 tinyCloseValueList.add(close); / 新值加入 int num = tinyCloseValueList.size(); if (num > paramT

31、INY) tinyCloseValueList.remove(0); / 老值剔除 if (tinyCloseValueList.size() = paramTINY) String tinyMA = calcAverageValue(tinyCloseValueList); indicatorValue.setValue(VALUE_TINY,tinyMA); / 计算短期MA值 shortCloseValueList.add(close); / 新值加入 num = shortCloseValueList.size(); if (num > paramSHRT) shortClose

32、ValueList.remove(0); / 老值剔除 if (shortCloseValueList.size() = paramSHRT) String shortMA = calcAverageValue(shortCloseValueList); indicatorValue.setValue(VALUE_SHRT,shortMA); / 计算中期MA值 middleCloseValueList.add(close); / 新值加入 num = middleCloseValueList.size(); if (num > paramMID) middleCloseValueLis

33、t.remove(0); / 老值剔除 if (middleCloseValueList.size() = paramMID) String middleMA = calcAverageValue(middleCloseValueList); indicatorValue.setValue(VALUE_MID,middleMA); / 计算长期MA值 longCloseValueList.add(close); / 新值加入 num = longCloseValueList.size(); if (num > paramLONG) longCloseValueList.remove(0)

34、; / 老值剔除 if (longCloseValueList.size() = paramLONG) String longMA = calcAverageValue(longCloseValueList); indicatorValue.setValue(VALUE_LONG,longMA); / 计算超长期MA值 hugeCloseValueList.add(close); / 新值加入 num = hugeCloseValueList.size(); if (num > paramHUGE) hugeCloseValueList.remove(0); / 老值剔除 if (hug

35、eCloseValueList.size() = paramHUGE) String hugeMA = calcAverageValue(hugeCloseValueList); indicatorValue.setValue(VALUE_HUGE,hugeMA); / 加入一个值对象 indicatorValueList.put(date,indicatorValue); / 准备取得下一日的数据 date = super.getStkTransDateUtil().getNextTransDate(stkCode,date); if (date = null) break; while (

36、!date.after(closeDate); / 返回MA移动平均线的值序列 return indicatorValueList; /* * 计算出指定股指指定日期范围的MA移动平均线值序列。 * * param idxCode 股指代码 * param beginDate 起始日期 * param closeDate 终止日期 * param paramTINY 超短期参数 * param paramSHRT 短期参数 * param paramMID 中期参数 * param paramLONG 长期参数 * param paramHUGE 超长期参数 * * return MA移动平均

37、线值序列 */ private LinkedHashMap<java.util.Date, IndicatorValue> calcIdxDailyMA( String idxCode, java.util.Date beginDate, java.util.Date closeDate, int paramTINY, int paramSHRT, int paramMID, int paramLONG, int paramHUGE) / 准备好指标返回值列表 LinkedHashMap<java.util.Date, IndicatorValue> indicator

38、ValueList = new LinkedHashMap<java.util.Date, IndicatorValue>(); / 取得指定股指指定日期范围的日K数据 GettingDataList dataList = super.getUsingDataList(); Data data = dataList.getDailyData( DataName.IdxDailyKData.getShortName(), idxCode, beginDate, closeDate); if (data = null) return indicatorValueList; / 表示指定

39、日期范围内无对应的MA移动平均线数据 / 数据类型转换 IdxDailyKData dailyKData = (IdxDailyKData) data; / 自起始日期始至终止日期止,依次计算出各日的不同MA线的值 List<Integer> tinyCloseValueList = new ArrayList<Integer>(paramTINY); List<Integer> shortCloseValueList = new ArrayList<Integer>(paramSHRT); List<Integer> middleC

40、loseValueList = new ArrayList<Integer>(paramMID); List<Integer> longCloseValueList = new ArrayList<Integer>(paramLONG); List<Integer> hugeCloseValueList = new ArrayList<Integer>(paramHUGE); / 自起始日期始至终止日期止,依次取得各日的MA移动平均线的值 java.util.Date date = beginDate; do / 日期格式转换(数据存

41、储时统一使用了yyyyMMdd格式) String dateStr = DateUtil.getFormatedDate(date, "yyyyMMdd"); / 容错处理:应对因系统原因导致某日该有交易记录却没有交易记录的情况 Integer test = dailyKData.getOpen(dateStr); if (test != null && test != 0) / 构造一个值对象 IndicatorValue indicatorValue = new IndicatorValue(); Integer close = dailyKData.getClose(dateStr);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1