开拓者期货期权程序化系统交易论坛

标题: TB公式之常见问题(Q&A)! [打印本页]

作者: tradeblazer    时间: 2007-11-8 16:14:33     标题: TB公式之常见问题(Q&A)!

Q1: 如何在公式编辑器中快速显示系统函数帮助?

A1:
1、在公式编辑器中,用鼠标选中系统函数;
2、点击工具栏的帮助按钮,将会打开对应的帮助文件。




Q2: 我自己建的公式没有编译,但在公式编辑器中不能编译啊,编译按钮是灰的,我该怎么做?

A2:
您只需要在公式代码中任意位置加入一个空格,然后再删掉这个空格,就可以进行编译了。
这是因为该公式以前被保存过,如果代码没有被修改过, 就不能触发进行保存编译。

Q3:保存公式的时候,需要时间很长是为什么?

A3:
保存公式的时候,需要做大量的编译工作,所以会比较慢,请耐心等待几秒钟。

Q4:如何快捷的在公式编辑器中跳转到调用的用户函数中?

A4:鼠标双击函数名,选中,点工具栏的一个按钮,就可以转到用户函数的代码中。



Q5:我的公式死活编译不过,还没有任何提示?

A5:有两种情况可能导致这样的问题:
1、应该是公式的简称里面有中文,TB公式不支持中文的函数或公式名称,所以您只能删掉这个公式,重新建一个,不要用包含中文的名字。
2、您的公式里面可能有中文的符号,或者其它不可显示的字符,您需要仔细检查一下代码。也可以采取一行一行加注释的方式来排除问题。

Q6:总是报“锁定编译目标文件超时”是什么原因?

A6:
有两种可能。
1、已经打开的图表调用了技术指标或交易指令,并且行情更新较快,导致编译时覆盖旧文件失败。这个时候,您可以关闭先所有的图表窗体在试试看。
2、可能是公式的写法有问题,是系统现在还不能识别的错误。您可以另外写一个简单的公式看看能不能编译通过,如果能通过,那就证明是这个公式有问题。如果不是,那我也不知道具体原因:(。您可以考虑导出您自己的公式,备份自己的工作区,然后删掉User目录重新登录。

Q7:我新建的用户函数编译提示:Return语句的返回值类型与公式定义的返回值类型不符。我该怎么做?

A7:
您只需要在公式编辑器中打开属性设置对话框,在最后一页[返回类型]中将返回之类型设置为正确的类型。
如果您希望函数返回一个数字,那您可以选择数值型。
如果您希望函数返回一个条件,那您可以选择布尔型。
如果您希望函数返回一个字符串,那您可以选择字符串。

Q8:我建了一个指标,怎样让它在副图上显示,在公式属性里设置,我看到有“主图”和“子图”两个选项,但是是灰色的,不能用

A8:
1、您可以在图表中直接选中该指标,把它拖到图表下面的时间横坐标轴的位置,然后放开鼠标。 这只是暂时解决显示的问题,指标的默认还是主图显示。
2、您可以在公式管理器中,选中技术指标,点属性按钮,在默认页面,设置主图,子图。
3、您也可以在技术指标的公式编辑器中,点属性按钮,进行设置。

以下是相关的内容:
http://www.tradeblazer.net/forum/thread-719-1-3.html

Q9:如何用Commentary进行调试?

A9:
1、代码里面这么写:


2、在图表里面双击鼠标左键:


Q10:为什么出现最终目标文件编译错误?

A10:
目前发现有以下几种情况会导致这个问题出现:
1、整体公式比较多,累计到一定程度,就会出现这个问题,对于这种情况,暂时没法解决,只好先把不用的公式备份出来,然后删掉一些公式。
2、用了一些C++的关键字来命名变量,比如.switch,case,int,Public,protected,class,long,double....有好几百个,可以考虑加上一些前缀,比如My****,这样就可以了。
作者: tradeblazer    时间: 2007-11-8 16:16:33

Q: 如何在交易开拓者中编写技术指标?

A:见下贴:
如何在交易开拓者中编写技术指标?


Q:请详细讲解一下交易系统的创建和使用过程

A:
1、请先参考一下这个帖子:
如何在交易开拓者中编写技术指标?
2、交易指令的创建方式和技术指标类似;
3、Txt文件导入需要在公式编辑器中进行,这和公式的导入/导出是不同的。
4、公式写好之后,需要保存,编译。编译成功之后,就可以在超级图表中调用交易指令了。
5、如果条件合理,交易指令会在图表中显示出相应的讯号,如果讯号出不来,有可能是交易设置中资金太少,或者是最大持仓设置有误。

以下是另外一个帖子,更加详细的解释了如何创建交易系统!
http://www.tradeblazer.net/forum/thread-58-1-14.html
作者: tradeblazer    时间: 2007-11-8 16:18:59

Q1:关于全局变量的处理,能否举例通俗的解释一下 SetGlobalVar和 GetGlobalVar?

A1:
系统公式目前提供50个全局变量。这50个全局变量附着在超级图表上,即一个图表的各个交易指令可以有50个全局变量。
您可以通过这些全局变量在交易指令中进行数据交换。关掉超级图表之后及全部删除,新建一个超级图表,新建出50个初值为无效值的变量。用户自行通过GetGlobalVar,SetGlobalVar进行保存及获取数据的操作。全局变量不会因为当前Bar的变化而变化。

每一个图表的单个技术指标,K线型态,特征走势都有50个全局变量。一个图表的所有交易指令共有50个全局变量。
作者: tradeblazer    时间: 2007-11-8 16:25:32

Q:如何处理讯号出现又消失的情况?

A:有以下两种方式:
1、使用Buy(1,Close,True)这样的格式,将信号延迟到该Bar走完,下一个Bar的第一个Tick出现的时候发送。
这个时候您可以用Buy(1,Close,True),表示的意思是用当前Bar的收盘价在下一个Bar开始时候交易。
您也可以用Buy(1,NextOpen,True),表示用下一个Bar的开盘价交易。
对于上面的这种处理方式,还有另外一种变通的处理,那就是取上一个Bar的条件或数据,只用当前Bar的Open价来进行判断。这样公式会写得更清晰。以下两段代码效果是相同的。
  1. Condition = 您的交易条件;
  2. If(Condition)
  3. {
  4.     Buy(1,NextOpen,True);
  5. }
复制代码

  1. Condition = 您的交易条件;
  2. If(Condition[1])
  3. {
  4.     Buy(1,Open);
  5. }
复制代码


2、第一种处理方式对于时间敏感性不高的系统,是可以采取的,但有些系统,如果选择延迟发送,则会导致比较大的性能下降。
此时我们需要选择另外一种处理方式。使用High,Low,Open这样能够保持住的价格来进行条件判断。
是价格往上的突破形成的交易操作用High来判断。是价格下上的突破形成的交易操作用Low来判断。其他不确定方向的情况最好用Open来判断。
比如,以下两种情况在实时交易方面同样迅速,但后面的就不会出现讯号消失的问题。
  1. AvgClose = AverageFC(Close,10);
  2. If(CrossOver(Close,AvgClose))
  3. {
  4.     Buy(1,AvgClose+MinMove*PriceScale);
  5. }
复制代码

  1. AvgClose = AverageFC(Close,10);
  2. If(CrossOver(High,AvgClose))
  3. {
  4.     Buy(1,AvgClose+MinMove*PriceScale);
  5. }
复制代码

作者: tradeblazer    时间: 2007-11-8 16:27:43

Q1:AverageFC和Average有什么区别?

A1:
1、Average和AverageFC都是内建的用户函数,目的都是用来求N个Bar以来的平均值,您可以直接看到实现的代码。
2、Average和AverageFC有什么不同呢?AverageFC是指FastCalculate,即快速计算。当这两个函数的第二个变量,即N个Bar是常量时,使用AverageFC,提高计算效率。当N是不确定的变量时,则必须使用Average,否则会出现计算问题。
3、系统里面类似的用户函数还有Summation和SumamtionFC,Highest和HighestFC,Lowest和LowestFC等。

Q2:如何区别这几个函数:CurrentCapital,A_CurrentEquity,A_FreeMargin?

A2:见下贴。
http://www.tradeblazer.net/forum/thread-93-1-15.html

另外一个相关的贴:
http://www.tradeblazer.net/forum/thread-181-1-13.html

Q3:请教Close(i)和Close[ i ]有和区别?

A3:见下贴。
http://www.tradeblazer.net/forum/thread-167-1-14.html

Q4:请教关于numerc和numericseries的区别?

A4:
Numeric表达单个变量.
NumericSeries表达与BAR数量等长的数组变量.
定义为序列变量之后就可以用AAA[1]引用以前的数据.

Q5:请教版主,关于文华的Ref和BarsLast,TB对应的是什么?

A5:见下贴
http://www.tradeblazer.net/forum/thread-599-1-7.html
作者: tradeblazer    时间: 2007-11-8 16:29:46

Q:如何修改自动交易测试的开始时间和结束时间?

A: 见下贴。
如何修改自动交易测试的开始时间和结束时间?
作者: tradeblazer    时间: 2007-11-8 16:34:02

Q:关于回溯测试和自动交易同步的处理?

A:见下贴
http://www.tradeblazer.net/forum/thread-423-1-7.html
作者: tradeblazer    时间: 2007-11-8 16:39:27

Q1:怎样在子图指标中加入K线?

A1:
该功能从V3.0.6版已经开始支持,您需要输出至少4条线,并且按照Open.High,Low,Close来命名。例子如下:

新建一个技术指标,假定命名为Demo,该技术指标将当前的高开低收除2输出到指标中。
  1. Begin
  2.     PlotNumeric("Open",Open/2);
  3.     PlotNumeric("High",High/2);
  4.     PlotNumeric("Low",Low/2);
  5.     PlotNumeric("Close",Close/2);
  6. End
复制代码


Q2:如何实现一个线条的多色显示?

A2:下面有两个例子:

1、如何实现双色的成交量指标!
2、实现渐近色指标!
作者: tradeblazer    时间: 2007-11-8 16:42:10

Q: Q_XXXX函数用法?

A:见下贴。
http://www.tradeblazer.net/forum/thread-860-1-2.html
作者: tradeblazer    时间: 2007-11-8 17:06:35

Q:如何获得自今日9:00开始到当前K线的个数?

A:见下贴.
http://www.tradeblazer.net/forum/thread-201-1-13.html
作者: tradeblazer    时间: 2007-11-8 17:11:20

Q:如何在超级图表中叠加商品,并进行价差运算?

A:见下贴.
http://www.tradeblazer.net/forum ... &extra=page%3D1
作者: tradeblazer    时间: 2007-11-8 17:14:12

Q:怎么去掉交易指令讯号显示的文字提示?

A:见下贴。
http://www.tradeblazer.net/forum/thread-276-1-12.html
作者: tradeblazer    时间: 2008-1-25 11:34:30

Q:为什么我的账户管理中持仓页面中出现锁仓的情况,我只用一个系统进行这个品种全自动交易?
A:有以下几种原因,请依次确认。
1、编写的交易指令中可能存在信号消失的情况,具体参见本贴第4楼。
2、编写的交易系统开仓和平仓的时间间隔太短,比如小于5秒以内,这样很容易造成开仓单还没有成交,就去平仓,自然不能成功执行。
3、委托单的价格不能确保成交,此时需要启动交易助手,尽可能让发出去的单尽快成交。
4、使用了A_XXXX,但未能正确同步持仓及委托状态。

另外您可以按F7键,打开消息中心,查看是否下单失败的提示。
作者: 捕快    时间: 2009-5-3 11:25:24

顶                                            出来
作者: 捕快    时间: 2009-5-16 20:38:46

TB公式之常见问题(Q&A)!


Q1: 如何在公式编辑器中快速显示系统函数帮助?

A1:
1、在公式编辑器中,用鼠标选中系统函数;
2、点击工具栏的帮助按钮,将会打开对应的帮助文件。

==
点了,没反应啊
作者: 高架桥    时间: 2009-6-4 20:11:54

点了以后,帮助文件激活了,但是没定位到对应函数!!
作者: nopain    时间: 2009-6-4 20:43:59     标题: 回复 #16 高架桥 的帖子

关掉帮助文件,重新点。
作者: 青岛杨    时间: 2009-9-22 06:49:10

请问能否实现多品种的买卖?
比如我有两个品种,我每天开盘时比较哪一个的昨涨幅大,然后开买昨涨幅大的那个。
比如我已经打开一个图表,并把两个品种分别叠加进去了,一个是Data0,一个是Data1。
  1. If(Data0.Close[1] - Data0.Open[1] > Data1.Close[1] - Data1.Open[1])
  2. {
  3. Buy(1,High);
  4. }
复制代码
这样只能买Data0这个品种,Data1这个品种是不是就得另开一个图表,然后先输入Data1,再输入Data0,再重复上面的步骤?
假如有三个或更多品种,岂不是要开n个图表?
请版主指点,谢谢!

[ 本帖最后由 青岛杨 于 2009-9-22 06:58 编辑 ]
作者: hoodooo    时间: 2009-9-22 11:33:06

楼上的意思是要做所谓的“选股”
作者: nopain    时间: 2009-9-22 11:37:30     标题: 回复 18# 青岛杨 的帖子

可以考虑用A_SendOrder来实现交易。
作者: kgy000    时间: 2009-12-15 11:07:50

SUM(RC,0);

怎么实现?
作者: win5ms    时间: 2010-7-12 11:57:29

原帖由 tradeblazer 于 2007-11-8 16:25 发表
Q:如何处理讯号出现又消失的情况?

A:有以下两种方式:
1、使用Buy(1,Close,True)这样的格式,将信号延迟到该Bar走完,下一个Bar的第一个Tick出现的时候发送。
这个时候您可以用Buy(1,Close,True),表示的意思是用当前Bar的收 ...

这样做了还是不行
作者: jlchinadrag    时间: 2010-10-19 15:41:17

PlotNumeric("开盘价",MyValo,yellow);//画开盘价线
比如今日开盘价MyValo这个值是3000,在图上用上述语句画出了一条水平线,但是如何才能把3000这个值标注到这条水平线上呢?不是显示在顶端位置
作者: Amymylove    时间: 2011-9-30 10:22:51

好东西,学习了
作者: ly030890    时间: 2011-10-18 22:27:35

本帖最后由 ly030890 于 2011-10-18 22:28 编辑

请教版主,在策略编译好加载到超级图标上后发现,在bar柱体很长的情况下,同时发出了买入和卖出的信号。 如何在一根bar上实现“只操作一次买入或者卖出”的指令?注:我用了MarketPosition。 不想在下一根bar的开盘价开仓,这样会损失点数。
作者: 307697143    时间: 2011-11-27 20:49:41

相当深奥
作者: 蔡宛宏    时间: 2011-12-16 17:56:39

谢谢管理员分享
作者: yangedwin99    时间: 2012-2-23 17:33:19

解答了很多疑问。。
作者: CrewsHe    时间: 2012-4-13 12:29:13

学习了

作者: k-i-n-d    时间: 2012-11-15 20:57:11

学习学习,对新手很好的
作者: yiyideer    时间: 2015-1-29 17:09:29

收藏一下
作者: CWQ_dylan    时间: 2015-1-29 21:37:36

分享的很好,很受用,谢谢
作者: gushizhizun    时间: 2015-2-3 15:25:33


作者: EricYang    时间: 2015-4-26 10:46:40

请教个问题,信号出现后2分钟,确认信号还存在后下单,应该怎么去写?或者给个思路用什么函数去实现?谢谢!
作者: win5ms    时间: 2016-11-23 10:15:49

头都大




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2