- 精华
- 0
- 在线时间
- 40 小时
- UID
- 140858
- 积分
- 43
- 帖子
- 29
- 阅读权限
- 10
- 注册时间
- 2013-7-1
- 最后登录
- 2017-1-31
- 精华
- 0
- UID
- 140858
- 积分
- 43
- 帖子
- 29
- 主题
- 12
- 阅读权限
- 10
- 注册时间
- 2013-7-1
- 最后登录
- 2017-1-31
|
本帖最后由 jrqh116098 于 2013-10-18 14:32 编辑
老师,你好,这组代码是有点小问题,同方向的第二单不能发单,看死也看不出来是怎么回事;虽然这组代码的盈利很差,但就是不死心,想知道哪个地方出了问题。代码如下:
//------------------------------------------------------------------------
// 简称: ATest
// 名称: 测试专用
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
//Numeric n(5); //计算前n天的高点参数
Numeric TotalGrids(4); //设定当日的网格数为TotalGrids(第一格计算在内);
Numeric FirstGrid(15); //第一格的点数
Numeric Multiple(2);
Numeric StartTime(9.20);
Numeric EndTime(15.00);
Numeric OverTime(15.10);
Vars
Numeric i;
NumericSeries TotalHighLow; //n天高低点的和
Numeric AvgHighLow; //n天高低点的均值
NumericSeries GridInterval; //每格的点数
NumericSeries MidLine(0); //中线
NumericSeries UpFirst(0); //线上第一格
NumericSeries UpSecond(0); //线上第二格
NumericSeries UpThird(0); //线上第三格
NumericSeries DownFirst(0); //线下第一格
NumericSeries DownSecond(0); //线下第二格
NumericSeries DownThird(0); //线下第三格
NumericSeries BuyMyRealMp; //多单仓位,为正
NumericSeries SellMyRealMp; //空单仓位,为负
NumericSeries TodayH;
NumericSeries TodayL;
Bool TimeCon;
BoolSeries BuyInGrid;
BoolSeries SellInGrid;
Begin
//BuyMyRealMp=GetGlobalVar(0); //得到全局变量的值
//SellMyRealMp=GetGlobalVar(1); //得到全局变量的值
Commentary("空仓仓位:"+Text(SellMyRealMp));
Commentary("多仓仓位:"+Text(BuyMyRealMp));
If(Date<>Date[1]) //&& BarStatus==2) 加上BarStatus==2语句后,会出现初始化不成功的问题,从逻辑上来说是没有问题的。
{
BuyInGrid=True;
SellInGrid=True;
BuyMyRealMp=0;
SellMyRealMp=0;
TodayH=High;
TodayL=Low;
}
Else
{
If(High>TodayH)
{
TodayH=High;
}
If(Low<TodayL)
{
TodayL=Low;
}
}
If(Time>=StartTime/100 && Time<EndTime/100)
{
TimeCon=True;
}
/*If(Time==0.09 && BarStatus==2 && High==Low)
{
AvgHighLow=((AverageD(3,n+1)-AverageD(4,n+1))*(n+1)-OpenD(0))/n; //AverageD(3,n)取n天(包括当天,故是n+1)来的最高价均值
//AverageD(4,n)取n天(包括当天,故是n+1)来的最低价均值
/*TotalHighLow=Summation(HighD(1)-LowD(1),n);
TotalHighLow=0;
For i=1 To n;
{
TotalHighLow=TotalHighLow+(HighD(i)-LowD(i));
}
}
Else
{
TotalHighLow=TotalHighLow[1];
}
}*/
TotalHighLow=HighD(1)-LowD(1)+HighD(2)-LowD(2)+HighD(3)-LowD(3)+HighD(4)-LowD(4)+HighD(5)-LowD(5);
AvgHighLow=TotalHighLow/5;
//AvgHighLow=Average(HighD(1),n)-Average(LowD(1),n);
Commentary("n天高低点均值:"+Text(AvgHighLow));
GridInterval=(AvgHighLow*Multiple/2-FirstGrid)/(TotalGrids-1);
Commentary("每格的点数:"+Text(GridInterval));
MidLine=OpenD(0);
PlotNumeric("中线",OpenD(0));
UpFirst=OpenD(0)+FirstGrid;
UpSecond=OpenD(0)+FirstGrid+GridInterval;
UpThird=OpenD(0)+FirstGrid+2*GridInterval;
PlotNumeric("正一格",OpenD(0)+FirstGrid);
PlotNumeric("正二格",OpenD(0)+FirstGrid+GridInterval);
PlotNumeric("正三格",OpenD(0)+FirstGrid+2*GridInterval);
//PlotNumeric("正四格",OpenD(0)+FirstGrid+3*GridInterval);
DownFirst=OpenD(0)-FirstGrid;
DownSecond=OpenD(0)-FirstGrid-GridInterval;
DownThird=OpenD(0)-FirstGrid-2*GridInterval;
PlotNumeric("负一格",OpenD(0)-FirstGrid);
PlotNumeric("负二格",OpenD(0)-FirstGrid-GridInterval);
PlotNumeric("负三格",OpenD(0)-FirstGrid-2*GridInterval);
//PlotNumeric("负四格",OpenD(0)-FirstGrid-3*GridInterval);
If(SellMyRealMp==0 && Close[1]>=UpFirst[1] && TimeCon==True && BuyInGrid==True) //建空仓
{
SellShort(1,Open);
SellMyRealMp=SellMyRealMp-1;
//SetGlobalVar(1,SellMyRealMp); //为全局变量赋值
}
If(SellMyRealMp==-1 && Close[1]>=UpSecond[1] && TimeCon==True)
{
SellShort(1,Open);
SellMyRealMp=SellMyRealMp-1;
//SetGlobalVar(1,SellMyRealMp); //为全局变量赋值
}
If(SellMyRealMp==-2 && Close[1]>=UpThird[1]) //空单止损出场
{
BuyToCover(0,Open);
SellMyRealMp=0;
BuyInGrid=False;
//SetGlobalVar(1,SellMyRealMp); //为全局变量赋值
}
If(SellMyRealMp==-2 && Close[1]<UpFirst[1]) //空单止盈
{
BuyToCover(1,Open);
SellMyRealMp=SellMyRealMp+1;
//SetGlobalVar(1,SellMyRealMp); //为全局变量赋值
}
If(SellMyRealMp==-1 && Close[1]<MidLine[1])//空单止盈出场
{
BuyToCover(0,Open);
SellMyRealMp=0;
//SetGlobalVar(1,SellMyRealMp); //为全局变量赋值
BuyInGrid=True;
}
If(BuyMyRealMp==0 && Close[1]<DownFirst[1] && TimeCon==True && SellInGrid==True) //建多仓
{
Buy(1,Open);
BuyMyRealMp=BuyMyRealMp+1;
Commentary("多仓仓位:"+Text(BuyMyRealMp));
}
If(BuyMyRealMp==1 && Close[1]<=DownSecond[1] && TimeCon==True)
{
Buy(1,Open);
BuyMyRealMp=BuyMyRealMp+1;
}
If(BuyMyRealMp==2 && Close[1]<DownThird[1]) //多单止损出场
{
Sell(0,Open);
BuyMyRealMp=0;
SellInGrid=False;
}
If(BuyMyRealMp==2 && Close[1]>DownFirst[1]) //多单止盈
{
Sell(1,Open);
BuyMyRealMp=BuyMyRealMp-1;
}
If(BuyMyRealMp==1 && Close[1]>MidLine[1])
{
Sell(0,Open);
BuyMyRealMp=0;
SellInGrid=True;
}
If(Time>=OverTime/100)
{
Sell(0,Open);
BuyToCover(0,Open);
}
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2013/10/08 22:21
// 版权所有 jrqh116098
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------ |
|