分享

【通达信】自编公式指标模板的快速生成法(喜欢折腾指标模板的同学看一下)

 asasww 2016-11-05
最近大盘行情不太好,自行折腾点小玩意。 玩指标少不了折腾模板,指标虽然不是万能的,但离开指标又空荡荡的。相信很多同学都习惯将常用指组合成一个个模板,方便看大盘行情及作出趋势判断。但用过通达信的同学都知道,通达信的模板管理功能很弱的,不能自由组合编辑,并且还有模板数量限制。如果你只是需要几个模板看盘的话,自已动动手,在通达信K线图里组合一下就行了,也不需要看下去了。如果你有大量的用户指标,要不断的生成新模板,删除旧模板的话,就要花不少时间精力去组合模板了,而且很多指标都用不上,你还得删掉,折腾来折腾去,人累不说,连看盘的精力都没了。有没有更好的模板组合方法呢?目前好像没有,下面是自己折腾出的一点小玩法,抛砖引玉,供大家参考一下。
一、原理方法  其实很简单,用一张excel表格(大概65536*256列),将你需要的指标名称放入表格中,(当然,前提是\T0002\prics.datprigs.dat文件中要有这些指标公式,并且名称完全相同),按照主图、副图组合的方式形成一个个指标模板,50个指标模板为一组(与系统限制对应),每个指标模板含一个主图和至多9个副图(与系统限制对应)。这样,在表格里就可以实现指标的自由组合,模板的自由编辑,并且你所有用得着的公式指标统统都可以放进去,即便通达信把你的指标模板整丢了,也可以通过这种方式重新生成原模板,也可以生成新模板。
二、首先通过prigs.xls中的vba代码,从prigs.dat读取所有用户指标公式名称(下图中已经把vba代码设置成菜单选项,呵呵,大家不必去学习vba编程,只看看如何操作就行了)


上图中,中间空白行上面是各主图公式名称,下面是各副图公式名称。
三、接下来打开pripack.xls文件,其中sheet1就是我们需要制作的模板格式,再把前面导出的主、副图公式名称复制到sheet2中,这样的可以在pripack.xls文件中进行各个模板制作了。
下面是一张pripack.xls表格,看看做成的模板是什么样的。


说明一下:
1、
表格中阴影部分是一组指标模板,其第一列数据为该组模板各行的说明兼模板组定位。第2列至51列分别对应该组的1~50个指标模板。52列之外为空白。

2、
各个指标模板的数据结构如下:第一行:模板名称(小于8个汉字或16个字符即可,上图中以数字命名,需手工填写);第二行:指标窗口数(主、副图窗口总和,由程序自动统计);第三行:绑定周期(手工填入);第四行:主图名称(复制,粘贴即可);其余各行为副图名称(复制粘贴即可)。

3、
每组模板数据结构是完全相同的。(只是副图数量不同,行数也不同)

三、表格中各组模板编辑好后,保存一下,下面还要用到。如果是严格按上述格式填入数据的,就不用检查了,否则要一项项检查是否有错。
四、模板写入  通达信只能使用其中一组模板(最多50个指标模板,最新版本好像也有这个限制),因此你可以任意写入一组,其余的作为备用,当然如果需要随时可以再次写入其它模板组,达到短时间切换模板看盘的目的。写入方法:1、先点击任意指标,(如果你编辑没有错误的话),该指标对应的模板组被选中,其背景为阴影(如上图所示)。2、点击自定义菜单的“模板写入”项,这样,选中的模板组就被写到了T0002\pripack.dat当中了。(注:通达信启动时是通过pripack.dat调用用户指标模板的)。说明一下:自定义菜单中有三个菜单项,这里分别给它们编写了三个宏模块,(excel一般都自带vba编辑器,其实你懂点vba的话也可以自行编写相关命令,高手都懂的),分别执行模板检查、模板写入、模板读出功能,三个模块配合运行。各个模块的原码都在附件里。这里就贴一下“模板写入”原码,有点凌乱,感兴趣的同学请自行完善。)
Option Base 1
Sub writing()
Dim temm$, r As Integer, n As Integer, m As Integer, a As Integer, b As Integer, c As Integer, i As Integer
Dim j As Integer, k As Integer, s As Integer, p As Integer, q As Integer, arr() As String
Application.ScreenUpdating = False
If UBound(moban) > 0 And log = True Then
i = ActiveCell.Row
j = ActiveCell.Column
For k = 1 To UBound(moban) - 1
If i >= moban(k) And i < moban(k + 1) Then
p = moban(k): q = moban(k + 1) - moban(k)
r = Application.CountA(Range(Cells(p, 2), Cells(p, 51)))
Exit For
End If
Next k

If q > 0 Then
ReDim Preserve arr(r, q)
b = 0
For m = 2 To 51
If Cells(p, m).Formula <> "" And b <= r Then
b = b + 1
c = 0
For n = p To p + q - 1
c = c + 1
arr(b, c) = Cells(n, m).Formula
Next n
End If
Next m
End If


Kill path
Open path For Binary As #1
temm = Chr(0)

For m = 1 To r
k = 356
For n = 1 To q
If arr(m, n) <> "" And n <> 2 And n <> 3 Then
arr(m, n) = Trim(arr(m, n))
Put #1, , arr(m, n)
For s = 1 To 32 - LenB(StrConv(arr(m, n), vbFromUnicode))
Put #1, , temm
Next s
k = k - 32
ElseIf n = 2 Then
arr(m, n) = Trim(arr(m, n))
Put #1, , CInt(arr(m, n))
k = k - 2
ElseIf n = 3 And arr(m, n) <> "" Then
arr(m, n) = Trim(arr(m, n))
Put #1, , CInt(arr(m, n))
k = k - 2
ElseIf n = 3 And arr(m, n) = "" Then
Put #1, , temm + temm
k = k - 2
End If
Next n

If k > 0 Then
For s = 1 To k
Put #1, , temm
Next s
End If

Next m
Close #1
Else
MsgBox ("模板有错误,请检查!!!")
End If
Application.ScreenUpdating = True
End Sub

五、接下来看看写入的效果。以上图表格中选中的模板组(阴影部分)写入为例。重启一下通达信,(因为pripack.dat只在通达信启动时才读入内存,不重启新模板是不生效的),如下图

(见截图8)




呵呵,各个指标模板在K线图里已经有了。点击6号模板,看看是不是表格中组合的模板。如下图:
(见截图9)

呵呵,还真的一样,说明写入成功!!!
补充一点,如果你的指标模板不见了,可以将任意一个文件放在T0002\下,重命名为pripack.dat,然后照上述方法重写一下,原来的模板又回来了。(注:T0002\prics.dat是系统自带的,里面是系统公式指标,估计各个版本做得差不多的;T0002\prigs,dat里面是用户自编公式指标,所以prigs,dat和表格是万万不能弄丢的)

喜欢的同学请顶一下,不喜请飘过。
PriGs.rar (17.78 KB)
pripack.rar (30.85 KB)
userini.rar (25.24 KB)
(鉴于重新编辑时间有限,请喜欢的同学跟帖交流。)
简单说下:
prigs.xls用于读取 prigs.dat中的用户指标名称;
pripack.xls用于向pripack.dat读取、写入新模板;
(user.xls用于向user.ini读取,写入50个常用指标名称,也许有的同学用不上。);
各个文件已包含完整原码。
注意备份prigs.dat,pripack.dat,user.ini文件;
注意修改prigs.xls,pripack.xls,user.xls文件中VBA代码所对应的文件路径。
祝大家折腾愉快。

[ 本帖最后由 苏州大王 于 2014-6-24 10:12 编辑 ]股票论坛 www.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多