为什么日k线下,必须加入“BarsSinceEntry>1”,而有的公式不加入也没关系,也没影响正常的开仓平仓。

向大神们,求教。

最开始的公式代码执行是正常的。后来为了控制浮亏,加了额外的止损代码部分,如下:

Numeric zs(10);//参数定义

Bool bool_zs_buy;//布尔定义

Bool bool_zs_sell;//布尔定义


bool_zs_buy = close <= EntryPrice *(1-zs/100) and MarketPosition<>-1;//止损条件定义

bool_zs_sell = close >=  EntryPrice *(1+zs/100) and MarketPosition<>1;//止损条件定义

//以下是最开始的止损条件

If( MarketPosition<>-1 and bool_zs_buy )

     {

      Sell(0,close);

     }

If( MarketPosition<>1  and bool_zs_sell )

     {

      BuyToCover(0,close);

     }



在日k线周期下,上述止损代码加入后,原代码止损正常,但是紧跟着的下一次或多次开仓信号下,会出现当根k线(日线周期),当根开当根平(即开即日平)的情况。之后我在“止损条件定义”中加入了“BarsSinceEntry>1”,问题得到解决。但现在的问题是,我没想明白为什么日k线下,必须加入“BarsSinceEntry>1”,而有的公式(比如双均线下的公式)不加入也没关系,也没影响正常的开仓平仓。

如何把技术指标作为开仓判断加入到策略中
建议加入搜索定位功能
onbarclose用于日线图,要不要写if(time == 0) ,是不是不写也没关系
收盘平仓不执行
奇怪的问题 策略单元有信号,而K线没显示出信号标识
碳酸锂没行情了,在别的软件交易为什么也被TB收费
附带我上个帖子也没解决 帮忙看一下
怎么也想不通的关于开平仓的问题
TBQ如何在公式加入限制时间
PlotNumeric 函数影响K线的正常显示问题

原因是,当一根bar上同时出现开仓和平仓信号时,实际上你无法区分到底时开仓条件先发生还是平仓条件县发生。

信号生成是按你程序代码编写顺序结构执行的。

对于历史k线,你先写开仓命令,那么模型按照历史k线收盘状态判断是否满足开仓命令。

开仓命令判断执行完毕后,再判断平仓命令,按照收盘状态判断是否满足平仓命令。程序的顺序结构规定了信号一定是先开再平。

换句话说,历史k线是按照收盘状态来判断是否满足开平命令。

但是实盘的时候就不一样了,你无法确定开平条件的先后顺序。

举个例子。一根k线,开盘价1000,最低价900,最高价1100,收盘价1000。

你的策略是开盘价回落50点开多,然后高于开盘价50点平多。也就是950买入,1050卖出。

如果这根k线的内部走势轨迹是先跌倒900,然后涨到1100,最后回归到1000,那么标记950买入,1050卖出毫无问题。

关键在于,如果走势轨迹是先涨到1100,再跌倒900,最后又涨回1000,你如何做到再950买入,1050卖出?跌到950以后,再也没有涨到1050过,怎么平这个仓呢?

这个问题的关键就是以收盘状态运行模型会导致的无法确定bar内走势轨迹的问题。

1、BarsSinceEntry 如果当日开场不想止损,只能用这个了

2、多次开仓的话

EntryPrice有啥用哩?

AvgEntryPrice这个是平均价

不过问题是 如果用连续合约  AvgEntryPrice,BarsSinceEntry等函数,换月都会出问题

----------------------------------------------------------------------------------------------

一个建议:

诊断问题

可以尝试不同位置

用print打印各项关键值到控制台看看问题所在