求教与探讨: 复杂策略代码的组织、管理与复用

接触TB不久,一方面感受到了整体功能设计的完备与强大,同时意识到与其它通用编程语言相比, TB还是有一些限制。想请教下老师们都是如何组织管理自己的代码。

想要达到的目的是:

  • 每个用户函数/策略公式里的代码不要过长,实现功能不要太多,便于分开功能调试, 也方便阅读, 然后进行组合
  • 一些常用的功能代码尽可能的可以被复用,比如是放在用户函数里,或者放在独立的策略里加载到同一个策略单元供其它策略使用
  • 实现在同一个策略单元里共享结构较为复杂的数据,比如Map, Dataframe, Series




举个具体例子,想要基于同一个思路编写两个策略,一个用于做多,一个用于做空,大致的逻辑是相似的,但是在做多做空时会有细节处理上的不同, 要实现的功能包含以下几个部分:

  1. 处理分析行情数据的部分,比如分析代表同一个品种不同周期的图层里的行情结构,事件驱动,比如每次barclose执行一次, 为保存处理结果可能会用到多维数组, Dataframe, Map, Series
  2. 根据行情结构寻找交易机会并发出交易信号的代码, 比如说做多是一个策略,做空一个策略,但是都要用到处理分析行情的部分
  3. 控制风险和仓位的部分, 对于发出的交易信号进行统一检查和管理,根据一些风控条件和当前仓位决定哪些发单,哪些不发单





希望可以做到#1部分被#2复用,使用时根据需要加载相应的策略到策略单元里进行组合, 我的问题是:

Q1: 用户函数只能返回基本的数据类型值, 索引参数似乎只支持Array, 如果要传递复杂一些的数据如Map, Dataframe, Series给调用的策略,有什么思路?


Q2: 如果将行情分析处理代码放到一个独立的策略里,如何将处理后的结果通过复杂一些的数据结构共享给在同一个策略单元里负责寻找交易信号的策略?


Q3: 如何实现上面将例子里控制风险和仓位,实现交易信号统一触发的部分放在一个独立的策略里?


希望各位老师不吝赐教,提供些思路和方向,谢谢!


图表策略与A函数策略的衔接
读取账户中 某商品的所有月份合约代码与持仓
请教老师,关于套利,自己系统如何与帮助中的代码结合
XAverage与Average的区别
回测数据与策略数据差别问题
onbarclose 与settriggerbarclose
小白求教,序列变量赋值与回溯的一个问题
策略代码信号控制问题求教
=与==有什么差别
Series<Numeric>与Numeric

这个东西很难几句话就说明白啊,而且每个人的模型是不一样的,怎么设计构造各种模块也是有各自的方法,很难一概而论啊。

第一个问题,map可以加ref后缀,具体能加的在语法手册里应该有。series没必要做引用,直接等于函数结果就好了。

第二个问题,可以通过读写数据库,也可以通过读写基础数据

第三,这个没法回答,这种实操方面的东西都是根据实际情况去设计,而且每个人风格不一样。

这就好比建一栋大楼,不同的人有不同的建法,课程里老师只能教你基本的规则,怎么运用规则去设计建造并没有绝对的约束。

好的,谢谢