TB策略编辑器(集成开发环境IDE)分析之一TB代码编译原理

标签:
tb策略c编译财经 |
分类: 证券交易技术 |
TB策略编辑器(集成开发环境IDE)分析之一TB代码编译原理
从2008年开始使用TB算起,已经有近5年的时间了,一直没有仔细看过TB代码的机制。原本一直以为它是解释执行的,直到昨天才心血来潮,看了下TB的安装目录下的文件,纠正了我以前的想法。原来TB代码最终会编译成DLL(Windows下的PE文件)。也就是说TB代码其实就是C++代码,只不过它把它封装了一层,方便策略开发者编写而已,其实质还是C++代码。
下面以TB安装目录的文件结构开始说起:
在SYSTEM/FORMULA/Bin目录下是代码编译的核心文件,说白了其实就是微软的Visual Studio。
http://s6/bmiddle/8a5f025agd0664741bfb5&690
(TB安装目录截图)
上图中的CL.EXE和LINK.EXE分别是:Microsoft® C/C++ Compiler Driver和Microsoft® Incremental Linker。这个就是我们平时在Windows平台下使用Microsoft Visual Studio进行C++开发使用的编译和链接器,通过这两个程序把C++源代码编译成可执行文件。那么在写TB代码的时候,写的并不是C++代码,TB又是怎么把编译的呢?请接着看。
Ø
http://s16/bmiddle/8a5f025agd0664832836f&690
(TB代码集成开发环境IDE截图)
在编写TB策略的时候,就是在上图所示的界面下编写代码。在安装目录的一层目录下有个TBCompiler.dll的文件,该文件就是TB代码集成开发环境IDE的实现(从TBCompiler.dll的导出函数上推断的)。
在上图所示中,新建了一个公式命名为TS_Test_20121208,里面的代码使用了TB默认提供的代码模版。
当点击编译的时候,TB经过如下阶段处理
1.
2.
3.
Ø
1、
如下图所示,TB会自动生成tbs文件夹,该文件夹内只有一个文件,该文件的内容是经过转换后的C++代码,文件命名方式是:<</span>策略名字>.cpp。
http://s10/bmiddle/8a5f025agd06648e9a3e9&690
打开该文件,文件大概有1000多行,其中99%的都是固定的(可以使用公共头文件来include,可能有些原因TB不想公开出来的缘故吧或许是其他因素,所以没有这么做)。
http://s12/bmiddle/8a5f025agd06649d6dc1b&690
上图是TS_Test_20121208.cpp文件内容和TB代码对比。红色框中就是TB代码转换到C++代码的样本。内容几乎完全一样。
2、编译
link.exe
详细使用方式,可以参阅微软的帮助文档。
3、编译后处理
在对应目录下的文件:
Formula/tree
http://s8/bmiddle/8a5f025agd0664af21467&690
Formula/study
http://s8/bmiddle/8a5f025agd0664bba2f47&690
在CMD环境下输入如下命令:dumpbin /EXPORTS
TS_Test_20121208.dll
如下图中黄色箭头所指该DLL导出Execute函数,在策略运行的时候,TB会装载该DLL,并调用Execute函数。
http://s3/bmiddle/8a5f025agd0664d1bc282&690
Ø
http://s6/bmiddle/8a5f025agd0664e524fc5&690
TB代码各段含义与C++代码的对应表:
TB代码 |
C++代码 |
Params |
Exceute函数参数 |
Vars |
Execute函数内临时变量 |
Begin End |
Exceute函数内紧跟临时变量的逻辑代码 |
²
请参看《TB策略编辑器(集成开发环境IDE)分析之二使用C++开发TB策略》
l
上述内容不代码任何观点,仅凭本人兴趣爱好仓促撰写,不保证内容准确性和完整性。