论坛首页 Java企业应用论坛

Groovy的mongodb应用演示(股价分析)

浏览 8804 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-12   最后修改:2011-09-17
@Grab(group='com.gmongo', module='gmongo', version='0.9.1')
import com.gmongo.GMongo
import com.mongodb.*
import java.text.*;

def mongo = new GMongo()
def db = mongo.getDB("stock_analysis")


db.stocks.find().each{stock->
	
	stockTrading=db.getCollection(stock.code+"."+stock.exchange)		
	
	analysingEndDate="2011-09-02"

	//过滤上市不满2月的股票
	if(stockTrading.find().count()>=44)
	{	
		tradings=[]

		stockTrading.find().each{trading->
			daily=[:]

			daily=[date: trading.date, close: trading.close, volume: trading.volume]

			tradings << daily
		}

		i=0
		
		for(i=0;i<240;i++)
		{
			if(tradings[i].date<=analysingEndDate)
			{
				break;
			}
		}
		
		for(j=0;j<i;j++)
		{
			tradings =tradings-tradings[0]
		}

		tradings=tradings[0..20]


		if( stock.name.contains("ST")==false && tradings[0..10]*.close.min()*1.1<tradings[0].close && tradings[0..20]*.close.sum()/20<tradings[0].close && tradings[0..20]*.volume.sum()/21*2<tradings[0..4]*.volume.sum()/5)
		{
			//println "${stock.code}.${stock.exchange} ${stock.name} ${new DecimalFormat("##.##").format(price10DaysClose*100/price10DaysLowest-100)}%"
			println "${stock.code}.${stock.exchange} ${stock.name}"
		}
	}
}


对过滤条件做个解释:


1) 不选ST stock.name.contains("ST")==false
2) 已分析日股价>过去10内低点的1.1倍 tradings[0..10]*.close.min()*1.1<tradings[0].close
3) 分析日股价>20日均价 tradings[0..20]*.close.sum()/20<tradings[0].close
4) 20日均量的2倍<近5日均量 tradings[0..20]*.volume.sum()/21*2<tradings[0..4]*.volume.sum()/5

... 其他条件扩展应该是很简单的


分析结果:

600057.ss 象屿股份
600136.ss 道博股份
600302.ss 标准股份
600356.ss 恒丰纸业
600371.ss 万向德农
600396.ss 金山股份
600470.ss 六国化工
600552.ss 方兴科技
600748.ss 上实发展
600754.ss 锦江股份
600824.ss 益民集团
601116.ss 三江购物
000031.sz 中粮地产
000518.sz 四环生物
000668.sz 荣丰控股
002100.sz 天康生物
002242.sz 九阳股份
002335.sz 科华恒盛
002387.sz 黑牛食品
300129.sz 泰胜风能

输出完成 (耗时 33 秒) - 正常终止

后续工作:
  • 调整分析参数
  • 评估投资成功率
   发表时间:2011-09-12  
股价信息数据是从哪来得,能介绍一下吗?
0 请登录后投票
   发表时间:2011-09-12  
guoapeng 写道
股价信息数据是从哪来得,能介绍一下吗?

1) 股票清单:大智慧导出
2) 日数据:Yahoo Stock API
0 请登录后投票
   发表时间:2011-09-12  
guoapeng 写道
股价信息数据是从哪来得,能介绍一下吗?

日数据下载程序:

@Grab(group='com.gmongo', module='gmongo', version='0.9.1')
import com.gmongo.GMongo
import com.mongodb.*

//date=Date.parse("yyyy-MM-dd",table.find(date:"2011-09-11").next().date)


def mongo = new GMongo()
def db = mongo.getDB("stock_analysis")

fileUrlList=new File("./tmp/url_list.tmp")
fileRenameBatch=new File("./tmp/incremental_downloader.bat")
fileRenameBatch.append("wget -i url_list.tmp\r\n")


db.stocks.find().each{stock->
	//构造URL: http://ichart.yahoo.com/table.csv?s=002250.sz&a=0&b=2&c=2011&d=8&e=2&f=2011
	stockTrading=db[stock.code+"."+stock.exchange]

	lastStoredDate=null
	if(stockTrading.find().size()>0)
	{
		lastStoredDate=stockTrading.findOne().date
	}
	endDate=(new Date()-1)

	if(lastStoredDate!=null)
	{//增量下载
		beginDate=(Date.parse("yyyy-MM-dd",stockTrading.findOne().date)+1)

		url="http://ichart.yahoo.com/table.csv?s=${stock.code}.${stock.exchange}&a=${beginDate.month}&b=${beginDate.day}&c=${beginDate.format("yyyy")}&d=${endDate.month}&e=${endDate.day}&f=${endDate.format("yyyy")}\r\n"
		fileUrlList.append(url)

		//table.csv@s=600000
		cmd="mv \"table.csv@s=${stock.code}.${stock.exchange}&a=${beginDate.month}&b=${beginDate.day}&c=${beginDate.format("yyyy")}&d=${endDate.month}&e=${endDate.day}&f=${endDate.format("yyyy")}\" ${stock.code}.${stock.exchange}.dat\r\n"
		fileRenameBatch.append(cmd)

		println " 增量: ${stock.code} ${stock.name} ${beginDate.format("yyyy-MM-dd")} ${endDate.format("yyyy-MM-dd")}"
	}else{
	//全量下载
		
		url="http://ichart.yahoo.com/table.csv?s=${stock.code}.${stock.exchange}\r\n"
		fileUrlList.append(url)
		//table.csv@s=600000
		cmd="mv \"table.csv@s=${stock.code}.${stock.exchange}\" ${stock.code}.${stock.exchange}.dat\r\n"
		fileRenameBatch.append(cmd)
		
		println " 全量: ${stock.code} ${stock.name}"
	}
}


0 请登录后投票
   发表时间:2011-09-14  
基本上分析的不靠铺
0 请登录后投票
   发表时间:2011-09-14  
这是什么语言啊?
0 请登录后投票
   发表时间:2011-09-14  
langhua9527 写道
这是什么语言啊?

Groovy
0 请登录后投票
   发表时间:2011-09-14  
我宁可研究一下大智慧的选股公式了,还可以图形化输出。
0 请登录后投票
   发表时间:2011-09-14  
一切分析都是浮云。
0 请登录后投票
   发表时间:2011-09-14  
一切分析都是辅助,程序只是工具,用来减轻负担,缩小范围,个人看法
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics