欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 利用数据库扩充金字塔的数据存放及分析能力

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有28911人关注过本帖树形打印复制链接

主题:利用数据库扩充金字塔的数据存放及分析能力

帅哥哟,离线,有人找我吗?
admin
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
利用数据库扩充金字塔的数据存放及分析能力  发帖心情 Post By:2009/12/8 15:41:51 [只看该作者]

数据库技术以其简单的操作和优异的跨平台性能,早已经广泛应用于各行各业中。配合金字塔强大的数据库支持能力,一定会让用户如虎添翼。
金字塔中使用数据库主要有如下两点好处:
1、扩充数据存储能力,虽然金字塔支持自定义数据功能,但使用数据库操作和维护显然要比他方便的多。
2、数据库技术已经是一热门成熟技术,用户可以通过自己或很多第三方软件来维护数据,实现与金字塔的数据交流。采用与数据库结合的方式,大大增强了公式系统的灵活性,用户可以将一些非常复杂的计算使用外部专用的分析软件来做,最后将分析结果放到数据库中,再由公式系统来进行绘制。
公式系统支持如下几个数据库函数:
? DATABASE 连接数据库.用法:DATABASE(STRING),STRING为数据库ADO连接字符串
例如:
(1)连接ACCESS数据库:DATABASE('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test.mdb')表示连接d:\Test.MDB数据库文件.
(2)通过DSN数据源对任何支持ODBC的数据库进行连接:DATABASE('Data Source=adotest;UID=sa;PWD=1234;')其中adotest是数据源名称,sa为登陆用户,1234为登陆密码
(3)不通过DSN对SQL SERVER数据库进行连接: DATABASE('driver={SQL Server};Server=127.0.0.1;DATABASE=test;UID=sa;PWD=1234')其中Server是127.0.0.1服务器的名称或IP地址,test是数据库的名称
(4)不通过DSN对Oracle数据库进行连接: DATABASE('provider=MSDAORA;Data Source=servername;User ID=sa;Password=1234;')其中servername是服务器名称或IP地址
? DBTABLE 检索记录集,使用SQL语句检索记录集,用法:DBTABLE(SQL),SQL为检索记录集字符串.例如:DBTABLE('Select * From @Code@ Order By StockDate'),表示从品种代码表中选择全部字段数据,并按照StockDate字段类型从小到达排序.StockDate为一个日期型字段,数据库中必须要有此字段,否则系统将无法工作.@Code@在运行中会被系统替换成品种的具体品种代码,例如SH600215。
? DBVALUE 取数据库中数值数据,用法:DBVALUE(S),S为字段名称,数据必须为浮点类型,例如:DBVALUE('STOCKCLOSE')表示取数据库中的STOCKCLOSE字段数据.
? DBSTRING 取数据库中字符串数据,用法:DBSTRING(S),S为字段名称,数据必须为字符类型,例如:DBVALUE('STOCKNAME')表示取数据库中的STOCKNAME字符串数据.
? DBREADTYPE 数据读取模式,用法:DBREADTYPE(N),N取0或1,默认为0,当N=0时如果DBVALUE或者DBSTRING找不到当日数据,那么取其之前数据。不然这两个函数将返回0值。

公式示例:
//连接d:\test.mdb数据库
DATABASE('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test.mdb');
//检索数据库表
DBTABLE('Select * From @Code@ Order By StockDate');
//读取STOCKCLOSE字段数据
cc:DBVALUE('STOCKCLOSE');

完整公式示例及数据库请在 http://www.weistock.com/download/dbdemo.zip 下载,做为示例,数据库仅包含600000品种的日线数据
为了方便用户操作,系统还提供GUI的数据库开发助手,使用该助手可以使用户更加快捷方便的为您的公式支持数据库。操作步骤如下:
? 在公式编辑界面上单击“插入”菜单,然后选择“数据库支持”。
金字塔的表(动态显示牌)技术也非常强大,同时也支持数据库功能,用户可以在表上面显示某个数据库的字段内容,使用方法也非常简单,用户可以在表高级编辑和表头定制这两个地方来实现功能.

 

注意:

   由于JET不提供X64位系统下引擎,因此64位版本金字塔应该使用ACE引擎,数据库连接字符串应该改成

   DATABASE('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\test.mdb');

若您的计算机未安装最新版的ADO.ACE引擎,请在下方地址下载安装:

http://www.weistock.com/download/AccessDatabaseEngine_X64.zip

[此贴子已经被作者于2015/5/11 16:08:58编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
drzwz168
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:63 积分:465 威望:0 精华:0 注册:2009/12/8 10:49:21
  发帖心情 Post By:2009/12/13 14:21:32 [只看该作者]

金字塔的数据库功能很棒!

提几点建议:

1、DBTABLE(SQL)函数中的SQL语句在执行前似乎会被自动转换为大写字母,这对大多数表名、字段名不区分大小写的数据库来说是没有影响的,对于区分大小写的数据库来就要求采用大写的表名、字段名,很不方便!

强烈建议不要对函数中的SQL进行大小写转换(象ADO一样,用户输入什么就传什么)。其中@Code@可改为@CODE@或@code@或@Code。

 

2、"数据库中必须要有stockdate字段"要求用户重新构建数据库或对现有数据库进行调整或在SQL中指定字段名称,不够灵活,而且有些ODBC驱动程序不支持"select old AS new..."命令。

建议:增加一个函数如DBTABLE2(SQL),不要求有stockdate字段,只要求SQL返回结果中第一个字段(不管字段名是什么)必须是日期型而且按从小到大排序。

 

3、建议:增加一个DBEXECUTE(SQL)命令,用于将SQL发送到数据库执行,不返回结果,类似于ADO Connection对象的Execute方法;象DATABSE()函数一样每只证券只执行一次。

 

 

[此贴子已经被作者于2009-12-13 14:40:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2009/12/13 15:08:17 [只看该作者]

建议很好,我们会认真采纳

 回到顶部
帅哥哟,离线,有人找我吗?
drzwz168
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:63 积分:465 威望:0 精华:0 注册:2009/12/8 10:49:21
  发帖心情 Post By:2009/12/13 15:38:42 [只看该作者]

谢谢回复。

 回到顶部
帅哥哟,离线,有人找我吗?
drzwz168
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:63 积分:465 威望:0 精华:0 注册:2009/12/8 10:49:21
  发帖心情 Post By:2010/5/19 14:42:39 [只看该作者]

建议下次升级时修改一下DBTABLE(SQL)函数,不要对DBTABLE(SQL)函数中的SQL语句进行大小写转换(象ADO一样,用户输入什么就传什么)。


 回到顶部
帅哥哟,离线,有人找我吗?
drzwz168
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:63 积分:465 威望:0 精华:0 注册:2009/12/8 10:49:21
  发帖心情 Post By:2010/5/19 14:42:53 [只看该作者]

谢谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/5/21 11:28:42 [只看该作者]

下个版本争取全部按照你要求改进,感谢支持

 回到顶部
帅哥哟,离线,有人找我吗?
wangwatercup
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:103 积分:532 威望:0 精华:0 注册:2010/11/8 18:27:01
  发帖心情 Post By:2011/4/6 0:35:16 [只看该作者]

运行了一下,提示错误如下:

第6行,错误;解释错误

不明白是为什么,因为公式没有任何改动,如下:

//连接d:\test.mdb数据库
DATABASE('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test.mdb');
//检索数据库表
DBTABLE('Select * From SH600000 Order By StockDate');
//读取STOCKCLOSE字段数据
cc:DBVALUE('STOCKCLOSE');

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2011/4/6 10:37:45 [只看该作者]

检查数据库里是否有'STOCKCLOSE'这个字段


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
引力波
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:50 积分:257 威望:0 精华:0 注册:2011/9/11 17:04:57
  发帖心情 Post By:2012/11/3 17:58:07 [只看该作者]

顶一下 

 回到顶部
总数 19 1 2 下一页