有意思。 如果他真走火入魔,就不会在三年前彻底离开闽发和股市,转去做了几年与股市无关的行业了。不过这几年正好是股市很惨的几年。 他以前在闽发上贴过的图是从他自己写的软件中(也是用Java)出来的,不过才写了一点就放下了。比较一下他半年前发布的第一个版本和半年后版本的源码就知道变化有多大了。 飞狐、分析家是不错,但大家就此止步吗?只有开源社区才能最快地对用户的需求做出反应。 至少,这是目前我看到的进展最快,功能最强的开源股票软件。
1,走火入魔是指用天文等等分析方法,跟离不离开股市没有什么关系吧? 2,应该也有一些开源的,映象中sourceforge有一个eiffel开发,用python作为脚本的,Eclipse也有一个好像叫Eclipse Trader的东西 3, Foxtrader,分析家的扩展已经足够表达了,包括什么指标的轮廓曲线
“1,走火入魔是指用天文等等分析方法,跟离不离开股市没有什么关系吧?” 天文只是他用的方法之一,天文中有很多成分就是大尺度的时间指标而已,相信你也会用周、月、年等因素吧,何况天文上的月比大家用的公历是由皇帝来定的月的日数更有实质含义。 之乎者现在也还会用天文来分析的,我看到他的blog中就有一个他开发的天文学模块的截图,不过在源码中没找到,估计他也不想开放出来,否则就更走火了。 分析家、飞狐中不也提供江恩的工具吗?甚至也有甲子纪日和周易的函数。 Humai Trader中也有很多传统的技术指标,而且他在向着神经网络、系统辨识等金融数理方向努力。 “2,应该也有一些开源的,映象中sourceforge有一个eiffel开发,用python作为脚本的,Eclipse也有一个好像叫Eclipse Trader的东西” 这些我都下载运行过。Eclipse Trader是eclipse.org重点推介在Eclipse Platform上开发应用的东西,Humai Trader则是netbeans.org重点推介的在NetBeans Platform上开发应用的东西,有点唱对台的意思。这样才好,有比较,有选择。 “3, Foxtrader,分析家的扩展已经足够表达了,包括什么指标的轮廓曲线” 但他们不是开源的,始终会让有些人的想法无法表达。 有喜欢飞狐、分析家的,有用TS、WLD的,萝卜白菜各有所爱,这个世界就是这样的。
这是之乎者发过来的最新的用Humai Trader(已改名为BlogTrader Platform)写的SAR和历史分布指标的源码,(让我提意见): package org.blogtrader.platform.modules.indicator.basic; import org.blogtrader.platform.core.analysis.indicator.AbstractDefaultIndicator; import org.blogtrader.platform.core.analysis.indicator.Chart; import org.blogtrader.platform.core.analysis.indicator.IndicatorName; import org.blogtrader.platform.core.analysis.indicator.Parameter; /** * * @author Howard Deng */ @IndicatorName("SAR") public class SARIndicator extends AbstractDefaultIndicator { public String getShortDescription() { return "SAR"; } public String getLongDescription() { return "Parabolic SAR"; } protected void initParams() { addParam(new Parameter("Primary AF", 2 )); addParam(new Parameter("AF step", 2 )); addParam(new Parameter("Maxima AF", 20)); setOverlapping(true); } Var<Float> sar_up = new Var("SAR", Chart.DOT, 0); Var<Float> sar_dn = new Var("SAR", Chart.DOT, 1); Var<Float> extrLo = new Var("", Chart.NONE); Var<Float> extrHi = new Var("", Chart.NONE); Var<Float> afUp = new Var("", Chart.NONE); Var<Float> afDn = new Var("", Chart.NONE); Var<Integer> trend = new Var("", Chart.NONE); private final static int UP = 1; private final static int DOWN = -1; protected void calcSignSeries(int fromIndex) { float initAf = getParams().get(0).getValue().intValue() / 100f; float stepAf = getParams().get(1).getValue().intValue() / 100f; float maxiAf = getParams().get(2).getValue().intValue() / 100f; for (int i = fromIndex; i < masterSigns.size(); i++) { setCurrent(i); if (i == 0) { trend.set(i, UP); float currLo = L.get(i); float currHi = H.get(i); sar_up.set(i, currLo); afUp .set(i, initAf); extrHi.set(i, currHi); sar_dn.set(i, currHi); afDn .set(i, initAf); extrLo.set(i, currLo); } else { if (trend.get(i - 1) == UP) { float currHi = H.get(i); float prevHi = H.get(i - 1); if (currHi > extrHi.get(i - 1)) { /** new high, af added 2% each day, till 20% */ afUp. set(i, Math.min(afUp.get(i - 1) + stepAf, maxiAf)); extrHi.set(i, currHi); } else { afUp. set(i, afUp.get(i - 1)); extrHi.set(i, extrHi.get(i - 1)); } sar_up.set(i, sar_up.get(i - 1) + afUp.get(i) * (prevHi - sar_up.get(i - 1))); sar_dn.set(i, NaN); if (sar_up.get(i) >= currHi) { sar_dn.set(i, currHi); afDn .set(i, initAf); extrLo.set(i, L.get(i)); trend.set(i, DOWN); } else { afDn .set(i, initAf); extrLo.set(i, L.get(i)); trend.set(i, UP); } } else { float currLo = L.get(i); float prevLo = L.get(i - 1); if (currLo < extrLo.get(i - 1)) { afDn .set(i, Math.min(afDn.get(i - 1) + stepAf, maxiAf)); extrLo.set(i, currLo); } else { afDn .set(i, afDn.get(i - 1)); extrLo.set(i, extrLo.get(i - 1)); } sar_dn.set(i, sar_dn.get(i - 1) + afDn.get(i) * (prevLo - sar_dn.get(i - 1))); sar_up.set(i, NaN); if (sar_dn.get(i) <= currLo) { sar_up.set(i, currLo); afUp .set(i, initAf); extrHi.set(i, H.get(i)); trend.set(i, UP); } else { afUp .set(i, initAf); extrHi.set(i, H.get(i)); trend.set(i, DOWN); } } } } } } ------------------------- package org.blogtrader.platform.modules.indicator.basic; import org.blogtrader.platform.core.analysis.indicator.Chart; import org.blogtrader.platform.core.analysis.indicator.AbstractDefaultIndicator; import org.blogtrader.platform.core.analysis.indicator.IndicatorName; import org.blogtrader.platform.core.analysis.indicator.Parameter; import org.blogtrader.platform.core.data.DefaultSignSeries; /** * * @author Howard Deng */ @IndicatorName("HVD") public class HVDIndicator extends AbstractDefaultIndicator { public String getShortDescription() { return "HVD"; } public String getLongDescription() { return "Historical Volume Distribution"; } protected void initParams() { addParam(new Parameter("Number of Intervals", 30, 1, 1, 100)); addParam(new Parameter("Period1", 50)); addParam(new Parameter("Period2", 100)); addParam(new Parameter("Period3", 200)); setOverlapping(true); } Var<Float[][]> HVD1 = new Var("HVD1", Chart.PROFILE, 0); Var<Float[][]> HVD2 = new Var("HVD2", Chart.PROFILE, 1); Var<Float[][]> HVD3 = new Var("HVD3", Chart.PROFILE, 2); protected void calcSignSeries(int fromIndex) { int nIntervals = getParams().get(0).getValue().intValue(); int period1 = getParams().get(1).getValue().intValue(); int period2 = getParams().get(2).getValue().intValue(); int period3 = getParams().get(3).getValue().intValue(); for (int i = fromIndex; i < masterSigns.size(); i++) { setCurrent(i); Float[][] probability_densitys1 = probDens(i, C, V, period1, nIntervals); Float[][] probability_densitys2 = probDens(i, C, V, period2, nIntervals); Float[][] probability_densitys3 = probDens(i, C, V, period3, nIntervals); HVD1.set(i, probability_densitys1); HVD2.set(i, probability_densitys2); HVD3.set(i, probability_densitys3); } } } 这是Java的,今后的script版本应该会简单点点。
rororo: 我下载的是1。0。1版,好象是2006。1。2的,怎么导入你上面给的代码?他后面的版本还没上传到站点吧?SAR指标系列在作者“亚当”的书中应该是有好几个的!一般软件(应该是我见过的所有软件)里的SAR都是其中最简单的一个,既然要提意见那是不是可以考虑再设计给通用的函数用于其他几个“SAR”指标?关于对这个通用的“SAR”指标或函数的要求我过几天想好了告诉你。
BlogTrader Platform 官方网址: http://blogtrader.org 已经完成添加频数统计曲线到任一指标的任一变量. 现在已经进入下一版本的功能冻结状态, 计划三月底发布新版本 WJ2000, 目前还不支持自动引入指标, 除非你用直接用NetBeans IDE将指标编译进里面.
这个东西兄弟也在关注,兄弟本来自己有打算自己做个分析软件,不过工作量很大,没有太多精力 目前发布的版本基本功能应该都差不多了 兄弟再等新的一个版本发布 准备把混沌等还有自己用的的一些指标做进来 不过可能只是本人在用了