以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  金字塔vba数据库交互  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=30622)

--  作者:rushtaotao
--  发布时间:2012/11/13 23:07:24
--  金字塔vba数据库交互

金字塔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
--  发布时间:2012/11/13 23:08:02
--  

附上word版本下载链接

 

http://www.weistock.com:8080/downloads/Manual/vba交互数据库初稿.doc


--  作者:rushtaotao
--  发布时间:2012/11/13 23:17:41
--  

金字塔vba交互数据库整理

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

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

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

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

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


--  作者:rushtaotao
--  发布时间: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
--  发布时间:2012/11/16 17:16:52
--  
我顶,我太想找这方面的资料了。
--  作者:bebeter
--  发布时间:2012/12/1 19:28:00
--  
这例子也太过简单了

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

难道怕用户都学会吗?

--  作者:clivelong
--  发布时间:2012/12/17 13:10:09
--  
 在程序化路上已经走过两个年头了,全自动的程序化整整的一年,这其中的苦和乐只有在其中的人能体会。谈不上坎坷,谈不上写一长卷,但足够些一本程序化的专辑了!

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

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

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

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

有以下优势:

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


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


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


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


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