- 精华
- 0
- 在线时间
- 19 小时
- UID
- 249443
- 积分
- 9
- 帖子
- 5
- 阅读权限
- 10
- 注册时间
- 2017-3-30
- 最后登录
- 2021-9-27
- 精华
- 0
- UID
- 249443
- 积分
- 9
- 帖子
- 5
- 主题
- 2
- 阅读权限
- 10
- 注册时间
- 2017-3-30
- 最后登录
- 2021-9-27
|
发表于 2019-8-20 09:58:56
|显示全部楼层
以下是部分源代码,当连续50根400均线多头排列时 判断为多头市场做开多单准备 当连续50根400均线为空头排列时取消开多准备。
Params
Numeric n(50);
Numeric LengthC(400);
Vars
NumericSeries i(1);
BoolSeries EntryFlag1;
NumericSeries ma1;
NumericSeries ma;
Begin
ma=AverageFC(Close,LengthC);
PlotNumeric("MA",AverageFC(Close,LengthC),0,White);
// 判断大的趋势方向
While(ma[i]>ma[i+1])
{
If (i<n)
{
i=i+1;
}
If(i==n)
{
EntryFlag1=True;
Break;
}
}
While(ma[i]<ma[i+1])
{
If (i<n)
{
i=i+1;
}
If(i==n)
{
EntryFlag1=False;
Break;
}
}
这段程序经过回测没有问题,但我想进一步优化时出现了问题,代码如下:
Params
Numeric n1(50);
Numeric LengthC1(400);
Numeric n2(50);
Numeric LengthC2(400);
Vars
NumericSeries i(1);
BoolSeries EntryFlag1;
NumericSeries ma;
NumericSeries ka;
Begin
ma=AverageFC(Close,LengthC1);
ka=AverageFC(Close,LengthC2);
// 判断大的趋势方向
While(ma[i]>ma[i+1])
{
If (i<n1)
{
i=i+1;
}
If(i==n1)
{
EntryFlag1=True;
Break;
}
}
While(ka[i]<ka[i+1])
{
If (i<n2)
{
i=i+1;
}
If(i==n2)
{
EntryFlag1=False;
Break;
}
}
程序修改后当参数1和参数2对应的值一样时就是优化前的代码,回测及运行都没问题。而一旦准备优化参数值时就会当机,或者把参数2的值修改与参数1不一样也会当机。 不知道是不是陷入死循环了。望大神们帮忙找找原因。
下面是个简单的全代码,测试用:
Params
Numeric n1(50);
Numeric LengthC1(400);
Numeric n2(50);
Numeric LengthC2(400);
Vars
NumericSeries i(1);
BoolSeries EntryFlag1;
NumericSeries ma;
NumericSeries ka;
Begin
// 集合竞价过滤
If(!CallAuctionFilter()) Return;
ma=AverageFC(Close,LengthC1);
ka=AverageFC(Close,LengthC2);
// 判断大的趋势方向
While(ma[i]>ma[i+1])
{
If (i<n1)
{
i=i+1;
}
If(i==n1)
{
EntryFlag1=True;
Break;
}
}
While(ka[i]<ka[i+1])
{
If (i<n2)
{
i=i+1;
}
If(i==n2)
{
EntryFlag1=False;
Break;
}
}
// 开仓
If(Marketposition == 0 and EntryFlag1[1]==True )
{
Buy(0, Open);
}
if ( EntryFlag1[1]==False and MarketPosition==1)
{
sell(0,Open);
}
End |
|