策略说明:
当某bar对应参数为14的CCI指标上穿1且收盘价对应cci值大于1时开仓做多单,固定开5手,当后续bar对应参数为14的CCI指标下穿 1时平仓。第一次开仓多单未平仓时,不开新单。
系统要素:
1、参数为14的CCI指标
入场条件:
1、某bar对应参数为14的CCI指标上穿1且收盘价对应cci值大于1
2、当前没有未平仓的多单
出场条件:
1、后续bar对应参数为14的CCI指标下穿 1
注 意:
此公式仅做多
*/
Params
Numeric cciLength(14); // CCI指标参数
Numeric Lots(5); // 交易手数
Vars
Series<Numeric> typicalPrice(0); // 典型价格
Series<Numeric> smaTP(0); // 典型价格的简单移动平均线
Series<Numeric> atrVal(0); // 真实波动幅度均值
Series<Numeric> cciVal(0); // CCI指标值
Bool isOpened(False); // 标记是否已经开仓
Events
OnBar(ArrayRef<Integer> indexs)
{
// 计算典型价格
typicalPrice = (High + Low + Close) / 3;
// 计算典型价格的简单移动平均线
smaTP = Average(typicalPrice, cciLength);
// 计算真实波动幅度均值
atrVal = AvgTrueRange(cciLength);
// 计算CCI指标
cciVal = (typicalPrice - smaTP) / (0.015 * atrVal);
// 画线
PlotNumeric("CCI", cciVal);
// 入场条件判断
If(!isOpened And MarketPosition != 1 And cciVal[1] <= 1 And cciVal > 1 And cciVal > 1)
{
// 开多单
Buy(Lots, Open);
isOpened = True;
}
// 出场条件判断
If(MarketPosition == 1)
{
// 参数为14的CCI指标下穿 1时,平多单
If(cciVal[1] >= 1 And cciVal < 1)
{
Sell(0, Open);
isOpened = False;
}
}
}
//------------------------------------------------------------------------
// 编译版本 GS2014.10.25
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
请大神帮我看下,这段策略代码是哪里出了问题,我要限制开仓,固定开仓,但是模拟测试总是会多次买入超量,Numeric Lots(5); // 交易手数,这句写的有问题么?
这是你的图表,你说的超量买入是什么意思
应该很明显偷价了,用open作为信号价格,但是信号触发并不是在开盘时刻
这个应该要问作者怎么回事,很低级的错误,建议作者再多看看零基础的教程,多研究几个盘中突破模型的案例代码学习一下
我好像根你遇到一样的问题了,管理没人回复
...人家不用下班休息的么?你是奴隶主吗拿鞭子催着人家回你啊?