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

标题: 求解,关于多公式组合策略在数据源上的运算 [打印本页]

作者: baggiobatistuta    时间: 2019-10-21 14:39:23     标题: 求解,关于多公式组合策略在数据源上的运算

我在TBQ的帮助文档里看到“为了使用的方便,以及降低使用门槛, TB 公式系统支持将现有的多个公式应用按照一定的顺序组合为一个交易策略
交易策略执行时按照公式设置的顺序依次串行执行,公式间持仓共享,公式信号单独显示。
相当于把每个公式看成是一个函数,在交易策略内依次执行各个函数,整个策略共享一个 MarketPosition。”

然后我在后面例子中看到,把5个公式加载到一个策略单元,也没有特别的设置。我看每个公式的买入信号都会判断marketposition,我就有点疑问,既然共享marketposition,那第一个公式如果买入了,第二个公式就不会买入了,如果达到例子里说的3个公式中的2个公式买入之后再停止呢,请帮忙给解释一下,谢谢



作者: 小米    时间: 2019-10-21 15:03:06

第一个公式买入后,后面的公式是否继续交易,取决于后面公式开仓条件里写法。
如果第二个公式的开仓条件并没有要求限制marketposition必须等于0的,那么就条件满足就要可以继续开仓。类似于加仓。
而第三个人公式的开仓条件里做marketposition==0的限制的话,则不会开仓了。
作者: baggiobatistuta    时间: 2019-10-21 15:15:36

公式应用 1: Average_Buy
Params
Numeric percent(0.002); //大于日均价幅度
Vars
Begin
If(MarketPosition<>1 && (Close[1] > Q_AvgPrice *(1 + percent)))
{
Buy(1,Open);
}
End
公式应用 2: Dual_Buy
Params
Numeric FastLength(5);
Numeric SlowLength(20);
Vars
NumericSeries AvgValue1;
NumericSeries AvgValue2;
Begin
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
// 集合竞价和小节休息过滤
If(!CallAuctionFilter()) Return;
If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
{
Buy(1,Open);
}
End
公式应用 3: High_Buy
Vars
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice; // 开仓价格,例中为开仓均价,可设置为某次入场价
Numeric AddSet(2); // 大于最高价跳数
Begin
If(!CallAuctionFilter()) Return;
MinPoint = MinMove*PriceScale;
If(MarketPosition<>1 && (Close > Q_High + AddSet*MinPoint))
{
Buy(1,Open);
}
End
公式应用 4: Average_Sell
Params474
Numeric percent(0.01); //小于日均价幅度
Vars
Begin
If(!CallAuctionFilter()) Return;
If(MarketPosition==1 && (Close < Q_AvgPrice *(1 - percent)))
{
Sell(1,Open);
}
End
公式应用 5: Dual_Sell
Params
Numeric FastLength(5);
Numeric SlowLength(20);
Vars
NumericSeries AvgValue1;
NumericSeries AvgValue2;
Begin
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
// 集合竞价和小节休息过滤
If(!CallAuctionFilter()) Return;475
If(MarketPosition == 1 && AvgValue1[1] < AvgValue2[1])
{
Sell(1,Open);
}
End

这是例子的5个公式,例子里说“上面 3 个开仓公式,任何 2 个先到达开仓条件,则由于仓位达到最大头寸 2,另外一个开仓公式将不会执行。上面任何 1 个平仓公式达到平仓条件平掉所有的仓位,则另外一个平仓公式不会执行。”,说只要按顺序加载这5个公式,就可以达到上面的效果,我不太理解如何实现目的的
作者: 小米    时间: 2019-10-22 15:43:11

本帖最后由 小米 于 2019-10-22 16:08 编辑
baggiobatistuta 发表于 2019-10-21 15:15
公式应用 1: Average_Buy
Params
Numeric percent(0.002); //大于日均价幅度


这段代码说明是有些问题的, 不足以参考 。。
先不要看这个说明,后面会更新相关说明文档的。

可以先看软件里--TB量化学院--TBL语言--公式运行机制--多公式组合策略在数据源上的运算。这里面的内容说明与代码是正确的。




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