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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 金字塔vba数据库交互

   

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


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

主题:金字塔vba数据库交互

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


加好友 发短信 czt
等级:蜘蛛侠 帖子:1445 积分:6114 威望:0 精华:3 注册:2012/1/16 10:31:19
金字塔vba数据库交互  发帖心情 Post By:2012/11/13 23:07:24 [只看该作者]

金字塔vba指标调用数据库教程
本教程主要用于帮助初学用户熟悉在vba中进行数据库的相关操作,主要包含以下三部分内容:
第一节,数据库的准备工作
第二节,数据库的实际操作,主要涉及到的知识点
1) 创建表,字段
2) 插入数据-当前周期数据,跨周期
3) 索引和读取数据
4) 删除表,字段
第三节,使用建议和注意事项
一、 数据库的准备工作(vba使用数据库首先我们需要连接数据库)
在金字塔的高级编程区中新建一个窗体,双击窗体进入写代码部分;以下例子需要在金字塔安装根目录下建立一个test.mdb数据库,建立完成后我们事先准备工作就已经完成了,接着在金字塔vba里就可以直接对表,字段进行操作了。

二、 数据库操作方法(具体代码和注释<使用时选取需要的代码只要稍许修改>)
2.1 连接数据库
此段代码是以下每个操作都要使用到的,已经标注了在哪里插入代码,只要将操作代码粘贴到红色位置中就可以实现相应操作(2.2-2.6都是操作代码,附图)

'定义一个函数,供vba开始运行时调用
sub DataInsert()
'设置对象adoConn,进行连接
Set adoConn=CreateObject("Adodb.Connection")
'连接数据库(数据指向是金字塔安装目录下的test.mdb,也可以自己更改想要的路径)
adoConn.Open"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source="&Application.AppPath&"\test.mdb"
//
此位置插入具体功能模块代码
//
'数据库启动时调用
sub application_vbastart()
    call DataInsert()
    '调试
    'call application.MsgOut("11")
end sub

2.2 创建表
strSqlcre="create table if00"
adoConn.Execute(strSqlcre)
'插入字段
strSqlalt1="alter table if00 add stockdate double"
strSqlalt2="alter table if00 add vclose double"
adoConn.Execute(strSqlalt1)
adoConn.Execute(strSqlalt2)
2.3 插入数据
'调入其他周期数据
set qtzq= marketdata.GetHistoryData("if00","Zj",5)
'调试数据调入是否成功
'call application.MsgOut(qtzq.close(qtzq.Count-1))

'插入数据(最新价)并且利用一个for循环遍历插入前N日的收盘价
'取得中金所if00合约价格
Set Report1=MarketData.GetReportData("if00","zj")
for i=2 to 5
strSqlins="INSERT INTO if00 (stockdate, vclose) VALUES ('"&Report1.NewPrice&"', '"&qtzq.close(qtzq.Count-i)&"')"
adoConn.Execute(strSqlins)
next


2.4 检索和读取数据
'检索并且更新数据
strSqlupd1="select stockdate from if00 "
strSqlupd2="update if00 set stockdate=0 where vclose=2249"
adoConn.Execute(strSqlupd1)
adoConn.Execute(strSqlupd2)

'读取数据
strSqlread="select stockdate from if00 where vclose =2249 "
'strSqlread=strSqlread&"where vclose =2249"
'ADO Recordset 对象用于容纳一个来自数据库表的记录集。
Set rstTmp=CreateObject("ADODB.RecordSet")
rstTmp.open strSqlread,adoConn
aa=rstTmp("stockdate")
call application.MsgOut(aa)

2.5 删除字段
strSqldel="delete from if00 where vclose =2249"
adoConn.Execute(strSqldel)

2.6 删除表
strSqldro="drop table if00"
adoConn.Execute(strSqldro)
adoConn.Close
End sub

三、 注意事项
? 1 .使用的时候将数据库关闭,不然可能导致出错
? 2 .以上只是抛砖引玉,整理了一些基本使用,如果大家要用于实践的话可以参照sql的例子及各类文献


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


加好友 发短信 czt
等级:蜘蛛侠 帖子:1445 积分:6114 威望:0 精华:3 注册:2012/1/16 10:31:19
  发帖心情 Post By:2012/11/13 23:08:02 [只看该作者]


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


加好友 发短信 czt
等级:蜘蛛侠 帖子:1445 积分:6114 威望:0 精华:3 注册:2012/1/16 10:31:19
  发帖心情 Post By:2012/11/13 23:17:41 [只看该作者]

金字塔vba交互数据库整理

    首先,感谢guotx2010和董小球二位版主基于细节方面的支持,非常感谢。

    其次,整理这个文档的目的是:1 最近有较多客户在论坛或者客服群内对链接数据库感兴趣,并有疑问。

                                           2 希望通过抛砖引玉的方式来让更多高手在论坛给予金字塔更多的支持。

                                           3 想通过整理的文档帮助刚接触金字塔的客户尽快上手。

    最后,这个文档只不过是个开始,接着本人会在金字塔策略区发布一些pel交互数据库的交互和改编一些vba策略。


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


加好友 发短信 czt
等级:蜘蛛侠 帖子:1445 积分:6114 威望:0 精华:3 注册:2012/1/16 10:31:19
  发帖心情 Post By:2012/11/14 9:32:38 [只看该作者]

sub DataInsert()
'设置对象adoConn,进行连接
Set adoConn=CreateObject("Adodb.Connection")
'连接数据库
adoConn.Open"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source="&Application.AppPath&"\test.mdb"
'Set Report1=MarketData.GetReportData("if00","zj")
'创建表if00
'strSqlcre="create table if00"
'adoConn.Execute(strSqlcre)
'插入字段
'strSqlalt1="alter table if00 add stockdate double"
'strSqlalt2="alter table if00 add vclose double"
'adoConn.Execute(strSqlalt1)
'adoConn.Execute(strSqlalt2)

'取得中金所if00合约价格
'Set Report1=MarketData.GetReportData("if00","zj")

'调入其他周期数据
'set qtzq= marketdata.GetHistoryData("if00","Zj",5)
'调试
'call application.MsgOut(qtzq.close(qtzq.Count-1))

'插入数据(最新价)
'call application.MsgOut(Report1.NewPrice)
'strSqlins="INSERT INTO if00 (stockdate, vclose) VALUES ('"&Report1.NewPrice&"', '"&qtzq.close(qtzq.Count-1)&"')"
'adoConn.Execute(strSqlins)

'输出前N日的收盘价,利用一个for循环遍历
'for i=2 to 5
'strSqlins="INSERT INTO if00 (stockdate, vclose) VALUES ('"&Report1.NewPrice&"', '"&qtzq.close(qtzq.Count-i)&"')"
'adoConn.Execute(strSqlins)
'next

'调试输出跨周期数据并且更新数据
'strSqlupd1="select stockdate from if00 "
'strSqlupd2="update if00 set stockdate=0 where vclose=2249"
'adoConn.Execute(strSqlupd1)
'adoConn.Execute(strSqlupd2)
'call application.MsgOut(qtzq)

'读取数据

'strSqlread="select stockdate from if00 where vclose =2249 "
'strSqlread=strSqlread&"where vclose =1"
'ADO Recordset 对象用于容纳一个来自数据库表的记录集。
'Set rstTmp=CreateObject("ADODB.RecordSet")
'rstTmp.open strSqlread,adoConn
'aa=rstTmp("stockdate")
'call application.MsgOut(aa)

'删除表和字段
'strSqldel="delete from if00 where vclose =2249 "
'adoConn.Execute(strSqldel)

'strSqldro="drop table if00"
'adoConn.Execute(strSqldro)

 

adoConn.Close

 

End sub


sub application_vbastart()

    call DataInsert()
    '调试
    'call application.MsgOut("11")
end sub

 

 

 

 

 


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 

 

 

 

 

 

 

 

 

 

 

 


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


加好友 发短信
等级:新手上路 帖子:43 积分:250 威望:0 精华:1 注册:2012/7/12 14:05:28
  发帖心情 Post By:2012/11/16 17:16:52 [只看该作者]

我顶,我太想找这方面的资料了。

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


加好友 发短信
等级:新手上路 帖子:53 积分:136 威望:0 精华:0 注册:2010/8/15 16:19:01
  发帖心情 Post By:2012/12/1 19:28:00 [只看该作者]

这例子也太过简单了

好歹搞个有点实际意义的例子

难道怕用户都学会吗?

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


加好友 发短信
等级:论坛游民 帖子:138 积分:494 威望:0 精华:0 注册:2011/9/28 8:36:47
  发帖心情 Post By:2012/12/17 13:10:09 [只看该作者]

 在程序化路上已经走过两个年头了,全自动的程序化整整的一年,这其中的苦和乐只有在其中的人能体会。谈不上坎坷,谈不上写一长卷,但足够些一本程序化的专辑了!

  在程序化一周年之际,想就期货投资特别是程序化操作方面和各位共享一些心得,同时推出程序化账户托管服务,将来也准备成立这样的专门资产账户托管公司。

  期货一向是被认为是高风险的投资,确实如此,很多的朋友被期货所伤。究其原因,我们可以认为赌徒的心里被杠杆所伤是必然的。这就让程序化成为资金稳定必然选择。

  但期货程序化的道路也是崎岖不平,我们要逾越期货交易所和期货公司的手续费屏障以外,额外的增加了软件使用开发以及软件费用。只有这样我们才能达到盈利的目的。

  为了更彻底的执行策略,现推出程序化账户托管。简单说就是你的账户和策略 + 我的执行

有以下优势:

1. 时刻保持策略持仓和真实持仓的一致,100%执行策略!只是因为这边有一套持仓校验系统,不停的做持仓核对。


2. 采用双机备份机制,并且两台服务器都放置电信机房,极大的改善了可获得性和稳定性。


3. 基于linux + CTP开发的委托终端,自有知识产权,速度和稳定性无可挑剔。


4. 策略可以是加密授权,客户需要做的就是告之执行方案:比如A策略在B合约C周期执行... ...


5. 你不需要另外支付其他软件费用如TB 文华财经 金字塔等等,也不需要盯盘,更不需要请人操作,核对!完全的释放自己。

 

 回到顶部