设为首页收藏本站

 找回密码
 注册
查看: 673|回复: 0
打印 上一主题 下一主题

回测时程序产生了一个buy动作,CurrentContracts获得的持仓却是0 [复制链接]

Rank: 1

精华
0
UID
197558
积分
19
帖子
5
主题
4
阅读权限
10
注册时间
2014-11-23
最后登录
2020-7-4
跳转到指定楼层
1#
发表于 2020-7-2 11:36:29 |只看该作者 |倒序浏览
Vars   
  Numeric a;// 循环用参数   
  Numeric aa(0);// 循环用参数  
  Numeric b(0);// 计数用参数
  Numeric bb(0);// 计数用参数
Numeric ba(0);// 计数用参数
Numeric bd(0);// 计数用参数




  NumericSeries Ma60;//60日均线
  NumericSeries Ma90;//90日均线
  NumericSeries Ma1600;//1600日均线
  NumericSeries Ma4800;//1600日均线
  NumericSeries Ma7200;//1600日均线
  

  Numeric buymoney(0);//买花的总钱数
  Numeric sellmoney(0);//卖花的总钱数
  Numeric   lirun;//卖花的总钱数
  Numeric PositionProfit; //获得当前持仓位置的浮动盈亏
  Numeric MinPoint; // 一个最小变动单位, 也就是一跳
  Numeric DT(0); // 定义多头状态
  Numeric GD(0); // 定义过渡状态
  Numeric DTYL(0); // 定义过渡状态
  Numeric HC20(0); // 定义回踩20线
  Numeric HC90(0); // 定义回踩90线
  Numeric CurrentEntries; // 定义当前开仓次数
  Numeric MarketPosition; // 定义持仓状态
  Numeric CurrentContracts;//定义当前持仓量 多头2  返回2  空头3返回-3
  Numeric MINN(0);//比小用的中间变量
  Numeric MAXX(0);//比大用的中间变量

  
  
  
  
  
  Begin   

Ma60 = AverageFC(Close,60);//(60)天移动平均
Ma90 = AverageFC(Close,90);//(90)天移动平均
Ma1600 = AverageFC(Close,1600);//(60)天移动平均
Ma4800 = AverageFC(Close,4800);//(90)天移动平均
Ma7200 = AverageFC(Close,7200);//(60)天移动平均


    PlotNumeric("MA1",Ma60);
        PlotNumeric("MA2",Ma90);
        PlotNumeric("MA3",Ma1600);
        PlotNumeric("MA4",Ma4800);
    PlotNumeric("MA5",Ma7200);








MAXX=Max(Ma4800,Ma7200);
MINN=MIN(Ma4800,Ma7200);






for a=1 to 40      

{
If( Low[a]>Max(Ma1600,MAXX)) b=b+1; // 当开盘价、收盘价均高于short天均线 且  当开盘价、收盘价均高于long天均线


If(b==40) DT=1;

}

for a=6 to 12  
  
{
If(High[a]>Min(Ma60,ma90)) aa=1; // 当开盘价、收盘价均高于short天均线 且  当开盘价、收盘价均高于long天均线


}

for a=1 to 5  
  
{If(High[a]<Min(Ma60,ma90)) bb=bb+1; // 当开盘价、收盘价均高于short天均线 且  当开盘价、收盘价均高于long天均线

}


If(aa==1&&bb==5&&PositionProfit>0)     DTYL=1;//定义  在多头趋势穿越盈利

If(C<ma1600&& C>max(ma4800,ma7200))    HC20=1;//定义  在多头趋势中回踩2H  20线


If( C<min(ma1600,MINN) )      HC90=1;//定义回踩2H  20 60 90最小的那根线
  

for a=1 to 120        

{
If(HIGH[a]<Max(Ma1600,MAXX) ) ba=ba+1; // 当开盘价、收盘价均高于short天均线 且  当开盘价、收盘价均高于long天均线

}

for a=1 to 120      

{
If(LOW[a]>MIN(Ma1600,MINN) ) bd=bd+1; // 当开盘价、收盘价均高于short天均线 且  当开盘价、收盘价均高于long天均线

}

If(ba==120&&bd==120) SetGlobalVar(0,2); //设置第一个全局变量为1
GD=GetGlobalVar(0);


If( DT==1 && CurrentEntries<=0 && PositionProfit==0) Buy(1,open);//当处于多头趋势,并且盈利次数小于等于0并且持仓为0    开仓,只开一次


If( HC20==1 && CurrentEntries<=1 && PositionProfit==0)    Buy(1,open);//当处于多头趋势,并且盈利次数小于等于1并且持仓为0    开仓。当第一次回踩2h  20线做多 盈利后平仓 次数盈利次数变为2   交易停止 以后即使再跌穿20线 也不开仓了


If( HC90==1 && CurrentEntries<=1 && MarketPosition==1)    Buy(1,open);//当处于多头趋势,并且盈利次数小于1并且持仓为1开仓 持有多仓的意思是之前回踩20线  没能涨起来赚钱出来 或者2h 刚转势 没转好  又跌下来了 做这个回踩60就是为了摊薄成本  及时平仓出来


If( DTYL==1 && PositionProfit>0) sell(CurrentContracts,0);//在3分钟k下穿60  90线的情况下,盈利即走,有几手多平几手

//If( GD==2 && PositionProfit>0)  sell(CurrentContracts,0);//只要过渡状态出现过,这里出现过就算,不赔钱就出来。

If( CurrentContracts==2&&PositionProfit>0)  sell(CurrentContracts,0);//触发了90线的摊薄平仓机制,不赔钱就出来。有了上面那句 这一句可能永远也不会触发了。




commentary("DT="+text(DT));
commentary("GD="+text(GD));
commentary("HC20="+text(HC20));
commentary("HC90="+text(HC90));
commentary("DTYL="+text(DTYL));
commentary("ba="+text(ba));
commentary("bd="+text(bd));
commentary("持仓手数="+text(CurrentContracts));
commentary("浮动盈亏="+text(PositionProfit));






End
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-20 08:22

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部