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

标题: 公式编写常见问题Q&A [打印本页]

作者: 小米    时间: 2011-12-5 11:19:23     标题: 公式编写常见问题Q&A

本帖最后由 小米 于 2017-6-17 13:48 编辑

客户在编写公式及使用的过程中常常会出现一些问题,本章节我们把一些出现频率较高的问题集中起来,以Q & A的形式整理出来,以供大家参考。

Q1:为什么公式的开平仓不受条件的限制,每一个K线上都有开、平仓的动作?
A1:在if( ......)条件判断语句的后面不小心加上分号,就会导致后面的执行不受条件的控制了。注意一定要把if(......); 后面这里的“;”去掉。

Q2:自己建的公式没有编译,但在公式编辑器中不能编译啊,编译按钮是灰的,该怎么做?
A2:您只需要在公式代码中任意位置加入一个空格,然后再删掉这个空格,就可以进行编译了。这是因为该公式 以前被保存了过,如果代码没有被修改过,就不能触发进行校验保存的编译。

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

Q4:为什么出现最终目标文件编译错误?
A4:目前发现有以下几种情况会导致这个问题出现:
1、有中文字符的存在,特别是一些细节的不容易发现的中文标点符号。
1、公式管理器中存在未通过编译的,有严重逻辑错误的公式,需删掉这些有错误的公式。
2、用了一些C++的关键字来命名变量,比如switch,case,int,Public,protected,class,long,double....有好几百个,可以考虑加上一些前缀,比如My****,这样就可以了。

Q5:总是报“锁定编译目标文件超时”是什么原因?
A5:有以下可能:
1、已经打开的图表调用了技术指标或交易指令,并且行情更新较快,导致编译时覆盖旧文件失败。这个时候,您可以关闭先所有的图表窗体在试试看。
2、可能是公式的写法有问题,是系统现在还不能识别的错误。您可以另外写一个简单的公式看看能不能编译通过,如果能通过,那就证明是这个公式有问题。如果不是,那我也不知道具体原因。(您可以考虑导出您自己的公式,然后删掉安装目录下User目录下您所在用户名的formula,然后再复制一个干净的formula进去。)

Q6: 为什么已经设置了启动多帐户全自动交易,结果只有一个帐户进行了交易的动作?
A6:首先检查确认是否有关联多个交易帐户且这些帐户都处于联机状态。其次,查看多帐户设置里是否对所需交易的帐户均勾选上了。另外,查看公式代码里发出指令的函数,如果是使用A_sendorder所编写的公式,则不可以启动多帐户自动交易。您可以打开多个超级图表,调用同一个合约同一个公式策略,再分别关联不同的交易帐户进行自动交易即可。

Q7:同一品种不同超级图表上的交易指令是否相互作用?
A7:不会相互作用。现在即使同一个超级图表上,指令之间都不会相互作用的。

Q8:Time与CurrentTime的区别在于哪里?
A8:Time 是Bar数据的时间,在交易开拓者中,是以当前Bar所开始的那个时间做为bar的Time,每一个Bar上的time是确定且唯一的。如果是日线的Bar上,Time则是为0。 而CurrentTime则是电脑操作系统的时间,基本上与北京时间是接近一致的。

Q9:如何记录开仓价格?
A9:有多种方法可以尝试,下面例出几种方法以供参考:
1.        使用现有的系统函数:entryprice 、lastentryprice、 avgentryprice;
2.        声明一个序列变量,在开仓时,将开仓价格赋值给此序列变量,并将此值传递下来;
3.        可以使用全局变量记录下开仓价格,以备随时取用。




待续。。。。。。
作者: fybhwsx    时间: 2011-12-8 13:53:43

账户数据中有现成的开仓均价,为什么不添加这样一个账户函数呢?
作者: tiansuan    时间: 2012-3-1 19:06:46

我新安装的开拓者就不能编译最终为目标,这是怎么回事啊?
作者: 双手插口袋    时间: 2012-3-25 13:49:49

回复 3# tiansuan


    下面会有提示错误号吧
如果实在找不到错误问题,可以尝试先导出到文本再导入进公式编译一次
作者: yejiang111    时间: 2012-3-30 10:59:17

开拓者程序中的实数能扩大到千分位吗?只到百分位不够精细哈
作者: 小米    时间: 2012-3-30 11:21:04

回复 5# yejiang111


    参与计算的小位可达六位数。只不过输出后的显示只有两位。
作者: vvind    时间: 2012-5-19 17:53:37

新手起步,慢慢学习中
作者: stewen.net    时间: 2012-7-10 19:54:14

我想实现这样的功能:系统开盘价与昨日结算价的比较,即开盘涨跌幅度,但Q_SETTLEPRICE不能用于历史回溯测试,还有别的办法吗?????
作者: stewen.net    时间: 2012-7-10 20:07:30

如何在5分钟周期中调用AVGTRUERANGE函数,返回日线周期的ATR值?能实现这样的功能吗?
作者: stewen.net    时间: 2012-7-12 11:52:37

怎么这么冷清呀?
作者: 青松    时间: 2012-7-26 11:31:47

论坛太不活跃了   要像文华那样该有多好啊  文华有问有答真乐闹   期盼TB也有那一天。
作者: 期市劫匪    时间: 2012-8-29 00:34:23


作者: tom_8899    时间: 2012-9-13 22:18:43

看的有些晕,有难度,所以人少!
作者: 绿水青山    时间: 2012-10-10 10:09:48

昨天接触TB,向各位前辈学习中.......
作者: 绿水青山    时间: 2012-10-10 10:09:52

昨天接触TB,向各位前辈学习中.......
作者: CHAXINQING    时间: 2012-11-18 16:21:55

有启发  很好
作者: MasterG    时间: 2012-12-15 19:37:38

新手,想知道return什么时候用,怎么用,
怎么有时候发出开/平仓指令后不加return的话可以编译,但一测试TB就崩溃
作者: 小米    时间: 2012-12-17 21:57:52

MasterG 发表于 2012-12-15 19:37
新手,想知道return什么时候用,怎么用,
怎么有时候发出开/平仓指令后不加return的话可以编译,但一测试TB ...

在公式应用中,有需要可以加return,如果不确定何时该加或不该加,就干脆都不加就行。
崩溃应该与你不加return无关的,请从其它方面查找崩 溃的原因。
作者: MasterG    时间: 2012-12-19 11:13:52

小米 发表于 2012-12-17 21:57
在公式应用中,有需要可以加return,如果不确定何时该加或不该加,就干脆都不加就行。
崩溃应该与你不加re ...

谢谢!
作者: wzy9423    时间: 2012-12-29 14:31:26

实盘在双均线能实现自动交易,请问如何在海龟交易系统如何实现自动交易
作者: hreo2013    时间: 2013-1-13 21:23:49

谢谢  学习中
作者: hreo2013    时间: 2013-1-20 12:35:39

学习    谢谢
作者: bjiokn    时间: 2013-3-8 23:24:04

学习了。不错!!
作者: yoyo    时间: 2013-3-23 08:19:34


作者: 纹枰论道    时间: 2013-4-14 22:58:36

有点难,学习中
作者: caobing    时间: 2013-6-27 22:36:35

请问下,哪里可以找到内建函数的详细说明,有些代码过程看得不是很明白,想请教下。
Begin
        MyVal = Price;
        MyBar = 0;
       
        If ( CurrentBar <= Length - 1 || MyBar[1] == Length - 1)
这是求极值函数的开始部分,CurrentBar <= Length - 1是用来判断K线根数小于等于length,然后计算。可是后面的MyBar[1] == Length - 1这个代码是干什么的?
作者: wtowcboy    时间: 2013-8-10 17:01:43

请问,要写一个在当前bar之前的bar的平均线,是怎么写啊?比如我设置变量i=1,bar[i]的平均线,应该怎么表示呢?是Average(Close[i],Length)吗?周期为一分钟
作者: hezhusheng01    时间: 2013-8-22 08:22:51

Q9:如何记录开仓价格?
A9:有多种方法可以尝试,下面例出几种方法以供参考:
Q9:如何记录开仓价格?
1.        使用现有的系统函数:entryprice 、lastentryprice、 avgentryprice;
2.        声明一个序列变量,在开仓时,将开仓价格赋值给此序列变量,并将此值传递下来;
3.        可以使用全局变量记录下开仓价格,以备随时取用。


----这里几个系统函数是“委托”的价格,不一定等于实际成交价格,甚至没有成交都会把这个委托价格返回作为开仓价格;怎样才能记录实际的开仓(还有平仓价格呢??
作者: abc00880    时间: 2013-9-23 16:07:50

求助:假定有A、B、C、D等并列条件,不管哪个条件先出现信号,在该信号平仓之前不影响其它信号的出现,即各条件拥有平等的开仓机会。我这样编写,请问有何错误?因为加仓并没有出现。
FirstEntryCon=(Condition_A Or Condition_B Or Condition_C Or Condition_D);
SecondEntryCon=(Condition_A Or Condition_B Or Condition_C Or Condition_D);

//多头进场条件  
If(MarketPosition!=1 && Time>0.091800 && Time<0.150000) //  空仓时
{
      if(FirstEntryCon)
      {
         Buy(2,Open);
         Return;
      }
}
if(MarketPosition==1 && Time>0.091800 && Time<0.150000 && BarsSinceEntry>=1)//加仓
{
      if(SecondEntryCon)
      {
         Buy(1,Open);
         Return;
      }
}
         
作者: 小米    时间: 2013-9-24 16:53:46

abc00880 发表于 2013-9-23 16:07
求助:假定有A、B、C、D等并列条件,不管哪个条件先出现信号,在该信号平仓之前不影响其它信号的出现,即各 ...

也许与代码无关。
看一下全局交易设置里,是否勾选为“允许连接建仓”?
作者: abc00880    时间: 2013-9-24 22:46:38

小米 发表于 2013-9-24 16:53
也许与代码无关。
看一下全局交易设置里,是否勾选为“允许连接建仓”? ...

试了一下,果然如此!您帮了我大忙了,非常感谢!
作者: fengchangying    时间: 2013-11-17 22:40:15

你好:
我写了一个简单的止损,但在运行时导致在同一个bar上出现开仓与平仓动作,不知什么原因想请教:
Pramas
Numeric StopLossSet(3);

Vars
Numeric MyEntryPrice;
Numeric MyExitPrice;
Begin
MyEntryPrice=AvgEntryPrice;
If(MarketPosition==1)
{
If(Low<MyEntryPrice*(1-StopLossSet/100)
MyExitPrice=Low;
If(Open<MyEntryPrice*(1-StopLossSet/100))MyExitPrice=Open;
Sell(0,MyExitPrice);
}
If (MarketPosition==-1)  
{
If(High>MyEntryPrice*(1+StopLossSet/100))
MyExitPrice=High;
If(Open>MyExitPrice*(1+StopLossSet/100))MyExitPrice=Open;
BuyToCover(0,MyExitPrice);
}

End
作者: 小米    时间: 2013-11-18 11:16:32

fengchangying 发表于 2013-11-17 22:40
你好:
我写了一个简单的止损,但在运行时导致在同一个bar上出现开仓与平仓动作,不知什么原因想请教:
Pram ...

是指测试的这段代码吗??
可这段代码里根本没有开仓的语句,应该是没有开仓信号的。
作者: qhd199    时间: 2013-12-5 15:53:34

如果是按固定资金或按资金比例开仓时,开仓手数大于100手时,为了保证能够全部成交,在同一K线上分别按50%、30%、20%分三个批次和三个不同的价格开仓,该怎么写程序?
作者: suncrb    时间: 2014-8-2 14:12:46

新手起步,慢慢学习中
作者: topgun0791    时间: 2015-9-11 12:05:12

昨天接触TB,向各位前辈学习中.......
作者: tsj007    时间: 2015-9-25 17:42:36

为什么我公式设定的判断讯号并未执行
作者: gongtong    时间: 2015-9-28 14:46:18

米米问你个问题呗?

同一个策略在三个不同的账户中跑实盘,信号出来时,为什么只有一个账户自动交易了,其他账户没动静(当然其他账户也有相同信号出现)


作者: 小米    时间: 2015-9-28 15:08:35

gongtong 发表于 2015-9-28 14:46
米米问你个问题呗?

同一个策略在三个不同的账户中跑实盘,信号出来时,为什么只有一个账户自动交易了 ...

1.是哪个函数发出的指令?a_sendorder的指令是不可以多帐户交易的。。
2.如果是buy,sell的指令,查看autotrade的记录里有几个帐户的委托记录?
3.如果autotrade里三个帐户的委托记录都有,则看一下F7里有无相应时间的报错提示?
4.如果autotrade里仅有一个帐户的委托记录,则看一下公式应用设置里多帐户设置里的一些细节设置是否合理了。
作者: gongtong    时间: 2015-9-29 17:15:21

本帖最后由 gongtong 于 2015-9-29 17:17 编辑
小米 发表于 2015-9-28 15:08
1.是哪个函数发出的指令?a_sendorder的指令是不可以多帐户交易的。。
2.如果是buy,sell的指令,查看auto ...


是第3种!下标准单时无法连接周边网关?米米大人,求指教
作者: 小米    时间: 2015-9-30 08:37:25

gongtong 发表于 2015-9-29 17:15
是第3种!下标准单时无法连接周边网关?米米大人,求指教

该帐户是否CTP的帐户?
将当天以及头一天的userop里的操作记录发到邮箱cll@tradeblazer.net
另外将当天F7里的内容也截图发此邮箱
作者: gongtong    时间: 2015-10-8 08:52:38

小米 发表于 2015-9-30 08:37
该帐户是否CTP的帐户?
将当天以及头一天的userop里的操作记录发到邮箱
另外将当天F7里的内容也截图发此 ...

是CTP帐号,小米大人。F7里的内容已经丢失。等待下一次的情况的记录吧。
作者: 小米    时间: 2015-10-8 08:53:58

gongtong 发表于 2015-10-8 08:52
是CTP帐号,小米大人。F7里的内容已经丢失。等待下一次的情况的记录吧。

好的,建议先确认一下F7的设置,需要设置为保存30天的记录。
作者: pengguoanjx    时间: 2017-6-9 13:24:04

Q1:为什么公式的开平仓不受条件的限制,每一个K线上都有开、平仓的动作?
A1:在if( ......)条件判断语句的后面不小心加上分号,就会导致后面的执行不受条件的控制了。注意一定要把if(......); 后面这里的“;”去掉。


我在IF后面没有加分号,但是还是信号不受控制。这个怎么解决?
作者: 小米    时间: 2017-6-9 13:30:24

pengguoanjx 发表于 2017-6-9 13:24
Q1:为什么公式的开平仓不受条件的限制,每一个K线上都有开、平仓的动作?
A1:在if( ......)条件判断语句 ...

从其它地方找原因啊。
作者: xyqh11700348    时间: 2021-3-27 23:13:59

本帖最后由 xyqh11700348 于 2021-3-27 23:15 编辑

各位大神,求帮忙写一个小代码,就是我们平时加在合约指数进行交易,映射到主力合约进行下单交易,但在实际发单时价格偏离较大,是否可以在策略中添加指定,实时获取主力合约的最新价,关在发单时以此价格向系统报价。谢谢




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