-- 作者:rushtaotao
-- 发布时间:2012/11/15 14:42:19
-- pel数据库交互
金字塔PEL指标调用数据库教程 本教程主要用于帮助用户尽快掌握在PEL指标中进行数据库的相关操作,主要包含以下三部分内容: 第一节,数据库的准备工作 第二节,数据库的实际操作,主要涉及到的知识点 1) 创建表,字段 2) 插入数据-当前周期数据,跨周期 3) 索引和读取数据 4) 删除表,字段 第三节,使用建议和注意事项
一、 金字塔使用数据库首先我们需要连接数据库 在金字塔的技术指标编辑中新建一个公式,我们使用以下语句做到与数据库的连接;以下例子需要在d盘的根目录下建立一个test.mdb数据库,这个数据库只能手工建,在金字塔内无法直接建立,建立完成后我们事先准备工作就已经完成了,接着在金字塔里就可以直接对表,字段进行操作了(只有建立数据库需要手动,其他都可以在金字塔内进行)
二、 操作代码模块 用DBEXECUTE函数来进行数据库的操作了;以下代码就包含了数据库的插入,检索,调用(代码均经过测试,可以直接用来使用) (一) 创建表,字段,值方法 v 运行模式用逐k线模式 v 使用主图叠加 v 此指标为技术指标 //连接d:\\test.mdb数据库 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); //创建数据库表,以zjif06表名为例,插入stockdate为日期型,品种为字符型,vclose为双精度型 DBEXECUTE(\'create table zjif06(stockdate date,品种 char,vclose double)\'); //为每个字段插入数据 DBEXECUTE(\'insert into zjif06(stockdate,品种,vclose) values(now(),"\'&STKNAME&\'",\'&numtostr(c,2)&\')\'); (二)结合跨周期调用插入数据 //例子是在1分钟周期下,去调用5分钟数据录入数据库 v //如果要调用数据,记得要把您想调用的数据先进行补充 v //注意这里的stockdate的是当前时间,不是k线数据的时间 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); DBEXECUTE(\'create table zjif06(stockdate date,品种 char,收盘价 double)\'); qq:CALLSTOCK(STKLABEL,vtclose,2); DBEXECUTE(\'insert into zjif06(stockdate,品种,收盘价) values(now(),"\'&STKNAME&\'",\'&numtostr(qq,0)&\')\'); (三)对数据值进行排序 //例子的目的是讲解order by的使用,如此使用会对数据库中收盘价进行一个降序的排列从而输出了收盘价字段中数据最大的值 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); DBTABLE(\'Select * From zjif06 order by 收盘价\'); cc:DBVALUE(\'收盘价\'); (四)对数据值进行检索 //例子的目的是讲解where的使用方法,比如需要在品种这个字段内,品种代码为1000003的收盘价;cc就是品种代码为1000003的收盘价值的输出 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); DBTABLE(\'Select * From zjif06 where 品种="1000003"\'); cc:DBVALUE(\'收盘价\'); (五)对数据值进行更新 //例子的目的是讲解update的使用方法,比如这个例子中,我是需要在品种这个字段内,品种代码为1000003的收盘价赋值为0 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); DBEXECUTE(\'update zjif06 set 收盘价="0" where 品种="1000003"\'); (六)删除某数据值 //例子的目的是讲解update的使用方法,比如这个例子中,我是需要删除品种字段中为1000003这个数据 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); DBEXECUTE(\'delete from zjif06 where 品种="1000003"\'); //如果需要删除表中所有数据,这样表就成了空表 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); DBEXECUTE(\'delete from zjif06 \'); (七)对表进行删除 //例子的目的是讲解drop的使用方法,比如这个例子中,我是需要删除整张表 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.mdb\'); DBEXECUTE( \' drop table zjif06 \');
三、 注意事项 ? 1 .大家最好在使用pel编写的时候用逐k线模式(用序列模式的情况下可能会导致有些只能用常数,不能用变量) ? 2 .使用的时候将数据库关闭,不然可能导致出错 ? 3 .以上只是抛砖引玉,整理了一些基本使用,如果大家要用于实践的话可以在上面这些操作的同时利用pel加上一些if条件限制,下面给大家举个例子 //连接数据库 DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\asset.mdb\'); //如果无效登录账户不做记录 if Taccount(2) = 255 then exit;
//插入数据库记录 记录:DBEXECUTE(\'insert into Asset(stockdate,Asset) values(now(),\'&numtostr(Tasset,2)&\')\');
? 4 .金字塔的数据库里面有个必须要的字段(StockDate),如果没有这个字段会影响金字塔连接数据库,其次使用的模式最好是序列模式(插入一条记录在SH600000数据库表里.处于序列计算模式时,参数SQL只能为常数) ? 5 .注意插入的时候字段都要按顺序插入,当中不要省略某个字段不插入
|