为啥这样计算两根K线之间的间距是错的? [开拓者 TB]
- 咨询内容:
我想计算当前bar与满足条件的信号K线bar的索引号差值,即计算出满足条件的K线bar与当前bar间隔有多少根K线。
因为每跟bar的索引值都会变动,所以我想使用一个逻辑变量来过滤满足条件的K线bar的索引值的变动,即出现了信号K线,记录下该K线bar的索引值后,就启用过滤条件,使该信
号K线的索引值不受新出现的K的索引值的影响。设计了以下代码
Vars
Numeric SignalEntryCurrentBar; //记录满足条件K线bar的索引值
Bool EntryCondition; //开仓条件
Bool EntrySignalFilter(False); //开仓信号条件的逻辑过滤变量,初始值为不启用过滤
Numeric i; //记录K线间距的变量
Begin
If(!EntrySignalFilter) //当不启用信号过滤时
{
If(EntryCondition==True) //当满足开仓条件时
{
SignalEntryCurrentBar=CurrentBar; //记录满足开仓条件的K线索引值
EntrySignalFilter=True; //启用信号过滤,目的是使信号条件的K线的索引值固定,不随之后每跟K线的索引值变动而变动
}
}
i=CurrentBar-SignalEntryCurrentBar; //记录当前K线与满足条件信号K线的间距
Commentary("CurrentBar:"+Text(CurrentBar));
Commentary("SignalEntryCurrentBar:"+Text(SignalEntryCurrentBar));
Commentary("i:"+Text(i));
End
我是想记录了信号K线的索引值之后,改变EntrySignalFilter的值,使EntrySignalFilter=True,这样回到If(!EntrySignalFilter)的判断上,就会直接过滤掉中间的代码,但是
这段代码根本起不到想要的作用,不知道哪里出现了问题。 - TB技术人员:
多种方法可以实现。
- vars
- numericseries myflag;
- begin
- if(conditionbuy==true)
- {
- buy;
- myflag = currentbar;
- }
- currentbar - myflag //就可以得到当前bar与信号位置之间间隔了多少K线。
- vars
- numericseries myflag
- begin
- if(conditionbuy)
- {
- buy;
- myflag = 1;
- }else
- {
- myflag = myflag+1;
- }
- vars
- TB客服:
小米 发表于 2015-3-30 08:42
多种方法可以实现。
我就是使用第一种想法,但是没有效果。currentbar会随着每跟bar的更新而更新。比如说,均线的方向向上,这个条件在一定时间内都满足,但不一定就要在这个条件满足时就开始交易,还有其他的条件来控制交易。我是想要从一开始发生均线方向向上的时候,就记录下这个条件的bar的currentbar,然后这个值是固定的,不随着之后出现的bar的索引值的变动而变动(因为均线方向向上可能在第一次发生这个现象后都成立,而如果使用myflag=currentbar,每出现一根bar又满足均线方向的条件,myflag就会随着currentbar的变动而变动),我要用固定的myflag来计算之后的bar到第一次满足均线方向向上的条件的bar的之间的间距。 - 网友回复:
stephen49 发表于 2015-3-30 11:20
我就是使用第一种想法,但是没有效果。currentbar会随着每跟bar的更新而更新。比如说,均线的方向向上, ...
需要多加一个变量来控制记录的起始点就好。- vars
- numericseries myflag;
- numericseries startbar;
- begin
- if(condition==true && myflag==0)
- {
- startbar = currentbar;
- myflag =1;
- }
- //但是要注意,在这段条件结束后,需要将myflag清零的动作。
- vars
- 网友回复:
小米 发表于 2015-3-30 11:23
需要多加一个变量来控制记录的起始点就好。
我从新写了一下代码:
Params
Numeric MAPeriod(10); //定义MA周期
Vars
NumericSeries MAValue; //定义MA变量
Numeric i; //储存K线间距值
Numeric startbar(0);
Bool Condition;
numericseries myflag;
Begin
MAValue=Average(C,MAPeriod);
Condition = MAValue>MAValue[1];
If(Condition==True && myflag==0)
{
startbar=CurrentBar;
myflag=1;
}
i=CurrentBar-startbar;
Commentary("CurrentBar:"+Text(CurrentBar));
Commentary("startbar:"+Text(startbar));
Commentary("i:"+Text(i));
End
我试过了,startbar还是随着每跟bar的变动而变动,i值永远都是0.你可以在图表上试一试。
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容