设为首页收藏本站

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

为啥编译出现大括号不匹配的问题 [复制链接]

Rank: 1

精华
0
UID
121692
积分
26
帖子
14
主题
2
阅读权限
10
注册时间
2013-7-24
最后登录
2013-10-27
跳转到指定楼层
1#
发表于 2013-7-25 10:18:39 |只看该作者 |倒序浏览
本帖最后由 人外有人 于 2013-7-25 10:25 编辑

Params
        Numeric Length(14);
                Numeric Lots(1);

Vars
        NumericSeries sADX;
        NumericSeries sVolty;
        Numeric PlusDM;//+DM1
        Numeric MinusDM;//-DM1
        Numeric UpperMove;
        Numeric LowerMove;
        Numeric SumPlusDM;
        Numeric SumMinusDM;
        Numeric SumTR;
        NumericSeries AvgPlusDM;//+DM14
        NumericSeries AvgMinusDM;//-DM14
        Numeric SF;                        // smoothing factor
        NumericSeries SAR;
        Numeric i;
        NumericSeries TRValue;
                NumericSeries AvgPlusDI;//+DI14
                NumericSeries AvgMinusDI;//-DI14
                Numeric k;
                Numeric ReversalTime;//记录止损点
                Numeric NewHigh;//新高
                Numeric EP;
                Numeric Newlow;//新低
                Numeric ReversalPoint;//记录反转的时间
                Numeric TradeNumber;//记录已发生的交易数
                Numeric TradeTime;//记录开始交易两次内交易的日期
        Numeric oADX;
        Numeric oADXR;
        Numeric oVolty;
                Numeric a;//代表的是SAR[2]
                Numeric b;//代表的是SAR[1]
Begin
        SF = 1/length;
        TRValue = TrueRange;
        If(CurrentBar == Length)
        {
                for i = 0 To Length - 1
                {
                        PlusDM = 0 ;
                        MinusDM = 0 ;
                        UpperMove = High - High[ i + 1 ] ;
                        LowerMove = Low[ i + 1 ] - Low ;
                        if (UpperMove > LowerMove and UpperMove > 0 )
                        {
                                PlusDM = UpperMove;
                        }else if (LowerMove > UpperMove and LowerMove > 0)
                        {
                                MinusDM = LowerMove ;
                        }
                        SumPlusDM = SumPlusDM + PlusDM ;
                        SumMinusDM = SumMinusDM + MinusDM ;
                        SumTR = SumTR + TRValue ;
                }
                AvgPlusDM = SumPlusDM / Length ;
                AvgMinusDM = SumMinusDM / Length ;
                sVolty = SumTR / Length ;
        }Else if(CurrentBar > Length)
        {
                PlusDM = 0 ;
                MinusDM = 0 ;
                UpperMove = High - High[1] ;
                LowerMove = Low[1] - Low ;
                if (UpperMove > LowerMove and UpperMove > 0 )
                {
                        PlusDM = UpperMove;
                }else if (LowerMove > UpperMove and LowerMove > 0 )
                {
                        MinusDM = LowerMove ;
                }
                AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ;
                AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ;
                sVolty = sVolty[1] + SF * ( TRValue  - sVolty[1] ) ;
        }Else
        {
                oADX = InvalidNumeric;
                oVolty = InvalidNumeric;
        }
                AvgPlusDI=AvgPlusDM/sVolty;
                AvgMinusDI=AvgMinusDM/sVolty;
                TradeNumber=0;
                IF (TradeNumber < 2 )//前两次交易用动向交易系统来进行
                {
                                if (MarketPosition==0)//持空仓
                                {
                                                IF (AvgPlusDI[1]<AvgMinusDI[1] and AvgPlusDI>AvgMinusDI)//做多条件
                                                {
                                                                Buy(Lots,close);//买入一手
                                                                ReversalPoint=Low;
                                                                TradeNumber=TradeNumber+1;
                                                                TradeTime=Date;
                                                }
                                                else if (AvgPlusDI[1]>AvgMinusDI[1] and AvgPlusDI<AvgMinusDI)//做空条件
                                                {
                                                                SellShort(Lots,close);
                                                                ReversalPoint=High;
                                                                TradeNumber=TradeNumber+1;
                                                                TradeTime=Date;
                                                }
                                               
                                }
                                else if (MarketPosition==1)//持多头
                                {
                                                if (Low<ReversalPoint)//反转条件
                                                {
                                                                SellShort(Lots,close);
                                                                TradeNumber=TradeNumber+1;
                                                                TradeTime=Date;
                                                }
                                }
                                else//持空头
                                {
                                                if (High>ReversalPoint)//反转条件
                                                {
                                                                Buy(Lots,close);
                                                                TradeNumber=TradeNumber+1;
                                                                TradeTime=Date;
                                                }
                                }
                }
                IF (TradeNumber >= 2 )//之后的交易用抛物式时间价格交易系统
                {
                                if (Date==TradeTime+1)//开始使用抛物式时间价格交易系统的时间点
                                {
                                                if (MarketPosition==1)//持多头
                                                {
                                                                a=10000000;//尽量用大的数,与下面Low比小的时候,使得结果为Low
                                                                k=0;
                                                                for i = 2 To BarCount
                                                                {
                                                                                if (OpenIntD-OpenIntD[i+1]<>0)//看是否是上个交易的开始时刻
                                                                                {
                                                                                                k=k+1;
                                                                                                if (k==1)
                                                                                                {
                                                                                                                LastTradeBegin=i;//得到上个交易的开始时刻
                                                                                                                break;
                                                                                                }
                                                                                }
                                                                }
                                                                for i=2 To LastTradeBegin
                                                                {
                                                                                a=Min(a,Low);//得到上个交易的最低点
                                                                }
                                                                if (a>min(Low[2],Low[3]))
                                                                {
                                                                                a=min(Low[2],Low[3]);//SAR不能超过价格区间
                                                                }
                                                                b=a+0.02*(High[2]-a);//下一个SAR[1]的值
                                                                if (b>min(Low[1],Low[2]))
                                                                {
                                                                                b=min(Low[1],Low[2]);
                                                                }
                                                                if (High>Max(High[1],High[2]))//是否达到新高
                                                                {
                                                                                SAR==b+0.04*(Max(High[1],High)-b);//将因子取成0.04
                                                                }
                                                                else
                                                                {
                                                                                SAR==b+0.02*(Max(High[1],High)-b);//没突破新高,将因子取成0.02
                                                                }
                                                                if (SAR>min(Low,Low[1]))
                                                                {
                                                                                SAR=min(Low,Low[1]);//SAR存放的是第二天的SAR值
                                                                }
                                                }
                                                else
                                                {
                                                                a=High[2];//取初值
                                                                k=0;
                                                                for i = 2 To BarCount
                                                                {
                                                                                if (OpenIntD-OpenIntD[i+1]!=0)//看是否是上个交易的开始时刻
                                                                                {
                                                                                                k=k+1;
                                                                                                if (k==1)
                                                                                                {
                                                                                                                LastTradeBegin=i;//得到上个交易的开始时刻
                                                                                                                break;
                                                                                                }
                                                                                }
                                                                }
                                                                for i=2 To LastTradeBegin
                                                                {
                                                                                a=Max(a,High);//得到上个交易的最高点
                                                                }
                                                                if (a>max(High[2],High[3]))
                                                                {
                                                                                a=max(High[2],High[3]);//SAR不能超过价格区间
                                                                }
                                                                b=a-0.02*abs(Low[2]-a);//下一个SAR[1]的值
                                                                if (b<max(High[1],High[2]))
                                                                {
                                                                                b=max(High[1],High[2]);
                                                                }
                                                                if (Low>Min(Low[1],Low[2]))
                                                                {
                                                                                SAR==b-0.04*abs(Min(Low[1],Low)-b);//将因子取成0.04
                                                                }
                                                                else
                                                                {
                                                                                SAR==b-0.02*abs(Min(Low[1],Low)-b);//没突破新高,将因子取成0.02
                                                                }
                                                                if (SAR<max(High,High[1]))
                                                                {
                                                                                SAR=max(High,High[1]);//SAR存放的是第二天的SAR值
                                                                }
                                                }
                                }
                                else
                                {
                                                if (MarketPosition==1)//持多头
                                                {
                                                                if (Low<SAR[1])//反转条件
                                                                {
                                                                                SellShort(Lots,close);
                                                                                for i=1 To BarCount
                                                                                {
                                                                                                if (OpenIntD<=0)//看是否是上个交易的开始时刻
                                                                                                {
                                                                                                                k=i;//得到上个交易的开始时刻
                                                                                                                break;
                                                                                                }
                                                                                }
                                                                                b=High[1];
                                                                                for i=1 To k-1
                                                                                {
                                                                                                b=Max(b,High);//得到上个交易的最高点
                                                                                }
                                                                                if (b>min(Low[1],Low[2]))
                                                                                {
                                                                                                b=min(Low[1],Low[2]);//SAR不能超过价格区间
                                                                                {
                                                                                SAR=b+0.02*(High-b);//下一个SAR的值
                                                                                ReversalTime=Date;
                                                                }
                                                                if (Low>=SAR[1])//继续持仓条件
                                                                {
                                                                                k=0;
                                                                                for i=Date-ReversalTime-1 DownTo 1
                                                                                NewHigh=High[Date-ReversalTime-1];
                                                                                for j=Date-ReversalTime-1 DownTo i
                                                                                {
                                                                                                NewHigh=Max(NewHigh,NewHigh[j]);
                                                                                }
                                                                                if (High>NewHigh)//求新高的个数
                                                                                {
                                                                                                k=k+1;
                                                                                }
                                                                                EP=Max(NewHigh,High);
                                                                                IF (0.02*k<=0.2)//AF的值不能大于0.2
                                                                                {
                                                                                                AF=0.02*k;
                                                                                }
                                                                                else
                                                                                {
                                                                                                AF=0.2;
                                                                                }
                                                                                SAR=b+AF*(EP-b);//求得SAR
                                                                                IF (SAR>min(Low,Low[1]))
                                                                                {
                                                                                                SAR=min(Low,Low[1]);//SAR存放的是第二天的SAR值
                                                                                }
                                                                }
                                                }
                                                if (MarketPosition<1)//持空头
                                                {
                                                                if (High>SAR[1])//反转条件
                                                                {
                                                                                Buy(Lots,close);
                                                                                for i=1 To BarCount
                                                                                {
                                                                                                if (OpenIntD>=0)//看是否是上个交易的开始时刻
                                                                                                {
                                                                                                                k=i;//得到上个交易的开始时刻
                                                                                                                break;
                                                                                                }
                                                                                }
                                                                                b=Low[1];
                                                                                for i=1 To k-1
                                                                                {
                                                                                                b=Min(b,Low);//得到上个交易的最低点
                                                                                }
                                                                                if (b<max(High[1],High[2]))
                                                                                {
                                                                                                b=max(High[1],High[2]);//SAR不能超过价格区间
                                                                                {
                                                                                SAR=b-0.02*abs(Low-b);//下一个SAR的值
                                                                                ReversalTime=Date;
                                                                }
                                                                if (High<=SAR[1])//继续持仓条件
                                                                {
                                                                                k=0;
                                                                                for i=Date-ReversalTime-1 DownTo 1
                                                                                NewLow=Low[Date-ReversalTime-1];
                                                                                for j=Date-ReversalTime-1 DownTo i
                                                                                {
                                                                                                NewLow=Min(NewLow,NewLow[j]);
                                                                                }
                                                                                if (Low<NewLow)
                                                                                {
                                                                                                k=k+1;//求新高的个数
                                                                                }
                                                                                EP=Min(NewLow,Low);
                                                                                IF (0.02*k<=0.2)//AF的值不能大于0.2
                                                                                {
                                                                                                AF=0.02*k;
                                                                                }
                                                                                else
                                                                                {
                                                                                                AF=0.2;
                                                                                }
                                                                                SAR=b-AF*(EP-b);//求得SAR
                                                                                IF (SAR>max(High,High[1]))
                                                                                {
                                                                                                SAR=max(High,High[1]);//SAR存放的是第二天的SAR值
                                                                                }
                                                                }
                                                }
                                }
                }
End

Rank: 1

精华
0
UID
121692
积分
26
帖子
14
主题
2
阅读权限
10
注册时间
2013-7-24
最后登录
2013-10-27
2#
发表于 2013-7-25 10:24:27 |只看该作者

使用道具 举报

Rank: 1

精华
0
UID
121692
积分
26
帖子
14
主题
2
阅读权限
10
注册时间
2013-7-24
最后登录
2013-10-27
3#
发表于 2013-7-25 10:28:22 |只看该作者

使用道具 举报

Rank: 1

精华
0
UID
121692
积分
26
帖子
14
主题
2
阅读权限
10
注册时间
2013-7-24
最后登录
2013-10-27
4#
发表于 2013-7-25 10:33:18 |只看该作者
是在最后一行的end处,报出大括号不匹配的错误,求小米求救啊

使用道具 举报

Rank: 1

精华
0
UID
121692
积分
26
帖子
14
主题
2
阅读权限
10
注册时间
2013-7-24
最后登录
2013-10-27
5#
发表于 2013-7-25 10:39:13 |只看该作者

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
66209
积分
128
帖子
78
主题
19
阅读权限
40
注册时间
2011-9-18
最后登录
2020-12-20
6#
发表于 2013-7-25 10:40:35 |只看该作者
人外有人 发表于 2013-7-25 10:33
是在最后一行的end处,报出大括号不匹配的错误,求小米求救啊

你在End前漏掉了4个大括号,还有一个变量没声明

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
66209
积分
128
帖子
78
主题
19
阅读权限
40
注册时间
2011-9-18
最后登录
2020-12-20
7#
发表于 2013-7-25 10:46:46 |只看该作者
人外有人 发表于 2013-7-25 10:33
是在最后一行的end处,报出大括号不匹配的错误,求小米求救啊

还有很多问题,帮你改了一下。但是
  1. if (OpenIntD-OpenIntD[i+1]<>0)//看是否是上个交易的开始时刻
复制代码
这一句的逻辑明显是错的,不知道你想计算什么?
  1. Params
  2.         Numeric Length(14);
  3.         Numeric Lots(1);

  4. Vars
  5.         NumericSeries sADX;
  6.         NumericSeries sVolty;
  7.         Numeric PlusDM;//+DM1
  8.         Numeric MinusDM;//-DM1
  9.         Numeric UpperMove;
  10.         Numeric LowerMove;
  11.         Numeric SumPlusDM;
  12.         Numeric SumMinusDM;
  13.         Numeric SumTR;
  14.         NumericSeries AvgPlusDM;//+DM14
  15.         NumericSeries AvgMinusDM;//-DM14
  16.         Numeric AF;
  17.         Numeric SF;                        // smoothing factor
  18.         NumericSeries SAR;
  19.         Numeric i;
  20.         Numeric j;
  21.         NumericSeries TRValue;
  22.         NumericSeries AvgPlusDI;//+DI14
  23.         NumericSeries AvgMinusDI;//-DI14
  24.         Numeric k;
  25.         Numeric ReversalTime;//记录止损点
  26.         NumericSeries NewHigh;//新高
  27.         Numeric EP;
  28.         NumericSeries Newlow;//新低
  29.         Numeric ReversalPoint;//记录反转的时间
  30.         Numeric TradeNumber;//记录已发生的交易数
  31.         Numeric TradeTime;//记录开始交易两次内交易的日期
  32.         Numeric LastTradeBegin;
  33.         Numeric oADX;
  34.         Numeric oADXR;
  35.         Numeric oVolty;
  36.         Numeric a;//代表的是SAR[2]
  37.         Numeric b;//代表的是SAR[1]
  38. Begin
  39.         SF = 1/length;
  40.         TRValue = TrueRange;
  41.         If(CurrentBar == Length)
  42.         {
  43.                 for i = 0 To Length - 1
  44.                 {
  45.                         PlusDM = 0 ;
  46.                         MinusDM = 0 ;
  47.                         UpperMove = High - High[ i + 1 ] ;
  48.                         LowerMove = Low[ i + 1 ] - Low ;
  49.                         if (UpperMove > LowerMove and UpperMove > 0 )
  50.                         {
  51.                                 PlusDM = UpperMove;
  52.                         }else if (LowerMove > UpperMove and LowerMove > 0)
  53.                         {
  54.                                 MinusDM = LowerMove ;
  55.                         }
  56.                         SumPlusDM = SumPlusDM + PlusDM ;
  57.                         SumMinusDM = SumMinusDM + MinusDM ;
  58.                         SumTR = SumTR + TRValue ;
  59.                 }
  60.                 AvgPlusDM = SumPlusDM / Length ;
  61.                 AvgMinusDM = SumMinusDM / Length ;
  62.                 sVolty = SumTR / Length ;
  63.         }Else if(CurrentBar > Length)
  64.         {
  65.                 PlusDM = 0 ;
  66.                 MinusDM = 0 ;
  67.                 UpperMove = High - High[1] ;
  68.                 LowerMove = Low[1] - Low ;
  69.                 if (UpperMove > LowerMove and UpperMove > 0 )
  70.                 {
  71.                         PlusDM = UpperMove;
  72.                 }else if (LowerMove > UpperMove and LowerMove > 0 )
  73.                 {
  74.                         MinusDM = LowerMove ;
  75.                 }
  76.                 AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ;
  77.                 AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ;
  78.                 sVolty = sVolty[1] + SF * ( TRValue  - sVolty[1] ) ;
  79.         }Else
  80.         {
  81.                 oADX = InvalidNumeric;
  82.                 oVolty = InvalidNumeric;
  83.         }
  84.                 AvgPlusDI=AvgPlusDM/sVolty;
  85.                 AvgMinusDI=AvgMinusDM/sVolty;
  86.                 TradeNumber=0;
  87.                 IF (TradeNumber < 2 )//前两次交易用动向交易系统来进行
  88.                 {
  89.                                 if (MarketPosition==0)//持空仓
  90.                                 {
  91.                                                 IF (AvgPlusDI[1]<AvgMinusDI[1] and AvgPlusDI>AvgMinusDI)//做多条件
  92.                                                 {
  93.                                                                 Buy(Lots,close);//买入一手
  94.                                                                 ReversalPoint=Low;
  95.                                                                 TradeNumber=TradeNumber+1;
  96.                                                                 TradeTime=Date;
  97.                                                 }
  98.                                                 else if (AvgPlusDI[1]>AvgMinusDI[1] and AvgPlusDI<AvgMinusDI)//做空条件
  99.                                                 {
  100.                                                                 SellShort(Lots,close);
  101.                                                                 ReversalPoint=High;
  102.                                                                 TradeNumber=TradeNumber+1;
  103.                                                                 TradeTime=Date;
  104.                                                 }
  105.                                                
  106.                                 }
  107.                                 else if (MarketPosition==1)//持多头
  108.                                 {
  109.                                                 if (Low<ReversalPoint)//反转条件
  110.                                                 {
  111.                                                                 SellShort(Lots,close);
  112.                                                                 TradeNumber=TradeNumber+1;
  113.                                                                 TradeTime=Date;
  114.                                                 }
  115.                                 }
  116.                                 else//持空头
  117.                                 {
  118.                                                 if (High>ReversalPoint)//反转条件
  119.                                                 {
  120.                                                                 Buy(Lots,close);
  121.                                                                 TradeNumber=TradeNumber+1;
  122.                                                                 TradeTime=Date;
  123.                                                 }
  124.                                 }
  125.                 }Else       
  126.                 IF (TradeNumber >= 2 )//之后的交易用抛物式时间价格交易系统
  127.                 {
  128.                                 if (Date==TradeTime+1)//开始使用抛物式时间价格交易系统的时间点
  129.                                 {
  130.                                                 if (MarketPosition==1)//持多头
  131.                                                 {
  132.                                                                 a=10000000;//尽量用大的数,与下面Low比小的时候,使得结果为Low
  133.                                                                 k=0;
  134.                                                                 for i = 2 To BarCount
  135.                                                                 {
  136.                                                                                 if (OpenIntD-OpenIntD[i+1]<>0)//看是否是上个交易的开始时刻
  137.                                                                                 {
  138.                                                                                                 k=k+1;
  139.                                                                                                 if (k==1)
  140.                                                                                                 {
  141.                                                                                                                 LastTradeBegin=i;//得到上个交易的开始时刻
  142.                                                                                                                 break;
  143.                                                                                                 }
  144.                                                                                 }
  145.                                                                 }
  146.                                                                 for i=2 To LastTradeBegin
  147.                                                                 {
  148.                                                                                 a=Min(a,Low);//得到上个交易的最低点
  149.                                                                 }
  150.                                                                 if (a>min(Low[2],Low[3]))
  151.                                                                 {
  152.                                                                                 a=min(Low[2],Low[3]);//SAR不能超过价格区间
  153.                                                                 }
  154.                                                                 b=a+0.02*(High[2]-a);//下一个SAR[1]的值
  155.                                                                 if (b>min(Low[1],Low[2]))
  156.                                                                 {
  157.                                                                                 b=min(Low[1],Low[2]);
  158.                                                                 }
  159.                                                                 if (High>Max(High[1],High[2]))//是否达到新高
  160.                                                                 {
  161.                                                                                 SAR==b+0.04*(Max(High[1],High)-b);//将因子取成0.04
  162.                                                                 }
  163.                                                                 else
  164.                                                                 {
  165.                                                                                 SAR==b+0.02*(Max(High[1],High)-b);//没突破新高,将因子取成0.02
  166.                                                                 }
  167.                                                                 if (SAR>min(Low,Low[1]))
  168.                                                                 {
  169.                                                                                 SAR=min(Low,Low[1]);//SAR存放的是第二天的SAR值
  170.                                                                 }
  171.                                                 }
  172.                                                 else
  173.                                                 {
  174.                                                                 a=High[2];//取初值
  175.                                                                 k=0;
  176.                                                                 for i = 2 To BarCount
  177.                                                                 {
  178.                                                                                 if (OpenIntD-OpenIntD[i+1]!=0)//看是否是上个交易的开始时刻
  179.                                                                                 {
  180.                                                                                                 k=k+1;
  181.                                                                                                 if (k==1)
  182.                                                                                                 {
  183.                                                                                                                 LastTradeBegin=i;//得到上个交易的开始时刻
  184.                                                                                                                 break;
  185.                                                                                                 }
  186.                                                                                 }
  187.                                                                 }
  188.                                                                 for i=2 To LastTradeBegin
  189.                                                                 {
  190.                                                                                 a=Max(a,High);//得到上个交易的最高点
  191.                                                                 }
  192.                                                                 if (a>max(High[2],High[3]))
  193.                                                                 {
  194.                                                                                 a=max(High[2],High[3]);//SAR不能超过价格区间
  195.                                                                 }
  196.                                                                 b=a-0.02*abs(Low[2]-a);//下一个SAR[1]的值
  197.                                                                 if (b<max(High[1],High[2]))
  198.                                                                 {
  199.                                                                                 b=max(High[1],High[2]);
  200.                                                                 }
  201.                                                                 if (Low>Min(Low[1],Low[2]))
  202.                                                                 {
  203.                                                                                 SAR==b-0.04*abs(Min(Low[1],Low)-b);//将因子取成0.04
  204.                                                                 }
  205.                                                                 else
  206.                                                                 {
  207.                                                                                 SAR==b-0.02*abs(Min(Low[1],Low)-b);//没突破新高,将因子取成0.02
  208.                                                                 }
  209.                                                                 if (SAR<max(High,High[1]))
  210.                                                                 {
  211.                                                                                 SAR=max(High,High[1]);//SAR存放的是第二天的SAR值
  212.                                                                 }
  213.                                                 }
  214.                                 }
  215.                                 else
  216.                                 {
  217.                                                 if (MarketPosition==1)//持多头
  218.                                                 {
  219.                                                                 if (Low<SAR[1])//反转条件
  220.                                                                 {
  221.                                                                                 SellShort(Lots,close);
  222.                                                                                 for i=1 To BarCount
  223.                                                                                 {
  224.                                                                                                 if (OpenIntD<=0)//看是否是上个交易的开始时刻
  225.                                                                                                 {
  226.                                                                                                                 k=i;//得到上个交易的开始时刻
  227.                                                                                                                 break;
  228.                                                                                                 }
  229.                                                                                 }
  230.                                                                                 b=High[1];
  231.                                                                                 for i=1 To k-1
  232.                                                                                 {
  233.                                                                                                 b=Max(b,High);//得到上个交易的最高点
  234.                                                                                 }
  235.                                                                                 if (b>min(Low[1],Low[2]))
  236.                                                                                 {
  237.                                                                                                 b=min(Low[1],Low[2]);//SAR不能超过价格区间
  238.                                                                                 {
  239.                                                                                 SAR=b+0.02*(High-b);//下一个SAR的值
  240.                                                                                 ReversalTime=Date;
  241.                                                                 }
  242.                                                                 if (Low>=SAR[1])//继续持仓条件
  243.                                                                 {
  244.                                                                                 k=0;
  245.                                                                                 for i=Date-ReversalTime-1 DownTo 1
  246.                                                                                 NewHigh=High[Date-ReversalTime-1];
  247.                                                                                 for j=Date-ReversalTime-1 DownTo i
  248.                                                                                 {
  249.                                                                                                 NewHigh=Max(NewHigh,NewHigh[j]);
  250.                                                                                 }
  251.                                                                                 if (High>NewHigh)//求新高的个数
  252.                                                                                 {
  253.                                                                                                 k=k+1;
  254.                                                                                 }
  255.                                                                                 EP=Max(NewHigh,High);
  256.                                                                                 IF (0.02*k<=0.2)//AF的值不能大于0.2
  257.                                                                                 {
  258.                                                                                                 AF=0.02*k;
  259.                                                                                 }
  260.                                                                                 else
  261.                                                                                 {
  262.                                                                                                 AF=0.2;
  263.                                                                                 }
  264.                                                                                 SAR=b+AF*(EP-b);//求得SAR
  265.                                                                                 IF (SAR>min(Low,Low[1]))
  266.                                                                                 {
  267.                                                                                                 SAR=min(Low,Low[1]);//SAR存放的是第二天的SAR值
  268.                                                                                 }
  269.                                                                 }
  270.                                                 }
  271.                                                 if (MarketPosition<1)//持空头
  272.                                                 {
  273.                                                                 if (High>SAR[1])//反转条件
  274.                                                                 {
  275.                                                                                 Buy(Lots,close);
  276.                                                                                 for i=1 To BarCount
  277.                                                                                 {
  278.                                                                                                 if (OpenIntD>=0)//看是否是上个交易的开始时刻
  279.                                                                                                 {
  280.                                                                                                                 k=i;//得到上个交易的开始时刻
  281.                                                                                                                 break;
  282.                                                                                                 }
  283.                                                                                 }
  284.                                                                                 b=Low[1];
  285.                                                                                 for i=1 To k-1
  286.                                                                                 {
  287.                                                                                                 b=Min(b,Low);//得到上个交易的最低点
  288.                                                                                 }
  289.                                                                                 if (b<max(High[1],High[2]))
  290.                                                                                 {
  291.                                                                                                 b=max(High[1],High[2]);//SAR不能超过价格区间
  292.                                                                                 {
  293.                                                                                 SAR=b-0.02*abs(Low-b);//下一个SAR的值
  294.                                                                                 ReversalTime=Date;
  295.                                                                 }
  296.                                                                 if (High<=SAR[1])//继续持仓条件
  297.                                                                 {
  298.                                                                                 k=0;
  299.                                                                                 for i=Date-ReversalTime-1 DownTo 1
  300.                                                                                 NewLow=Low[Date-ReversalTime-1];
  301.                                                                                 for j=Date-ReversalTime-1 DownTo i
  302.                                                                                 {
  303.                                                                                                 NewLow=Min(NewLow,NewLow[j]);
  304.                                                                                 }
  305.                                                                                 if (Low<NewLow)
  306.                                                                                 {
  307.                                                                                                 k=k+1;//求新高的个数
  308.                                                                                 }
  309.                                                                                 EP=Min(NewLow,Low);
  310.                                                                                 IF (0.02*k<=0.2)//AF的值不能大于0.2
  311.                                                                                 {
  312.                                                                                                 AF=0.02*k;
  313.                                                                                 }
  314.                                                                                 else
  315.                                                                                 {
  316.                                                                                                 AF=0.2;
  317.                                                                                 }
  318.                                                                                 SAR=b-AF*(EP-b);//求得SAR
  319.                                                                                 IF (SAR>max(High,High[1]))
  320.                                                                                 {
  321.                                                                                                 SAR=max(High,High[1]);//SAR存放的是第二天的SAR值
  322.                                                                                 }
  323.                                                                 }
  324.                                                 }
  325.                                 }
  326.                 }
  327. }
  328. }
  329. }
  330. }
  331. End
复制代码

使用道具 举报

Rank: 1

精华
0
UID
121692
积分
26
帖子
14
主题
2
阅读权限
10
注册时间
2013-7-24
最后登录
2013-10-27
8#
发表于 2013-7-25 15:09:09 |只看该作者
leovone 发表于 2013-7-25 10:40
你在End前漏掉了4个大括号,还有一个变量没声明

恩恩,好的,谢谢,谢谢

使用道具 举报

Rank: 1

精华
0
UID
121692
积分
26
帖子
14
主题
2
阅读权限
10
注册时间
2013-7-24
最后登录
2013-10-27
9#
发表于 2013-7-25 15:20:52 |只看该作者
leovone 发表于 2013-7-25 10:46
还有很多问题,帮你改了一下。但是这一句的逻辑明显是错的,不知道你想计算什么? ...

if (OpenIntD-OpenIntD[i+1]<>0)//看是否是上个交易的开始时刻
这句话我想表达的是i天前的仓位减去i+1天前的仓位是不是不等于0.如果其不等于0的话,则表明交易是在i天前进行的,因为只有进行交易了之后才能有仓位的变化。而编译结果表示其包含序列函数,可能存在潜在风险。这我就不知道是什么原因了。你说OpenIntD是表示i天前的仓位吗?
谢谢帮我修改了。感激啊。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
66209
积分
128
帖子
78
主题
19
阅读权限
40
注册时间
2011-9-18
最后登录
2020-12-20
10#
发表于 2013-7-25 15:33:05 |只看该作者
人外有人 发表于 2013-7-25 15:20
if (OpenIntD-OpenIntD0)//看是否是上个交易的开始时刻
这句话我想表达的是i天前的仓位减去i+1天前的仓位 ...

你理解错了吧,OpenInt是K线信息"持仓量",而不是你自己的持仓。CurrentContracts才是你自己的持仓(手数),一般用MarketPosition表示你的持仓方向就可以了。
但是,如果你是要知道自己在哪一个k线上开仓的话,根本不要用For循环这么复杂,费时费力啊

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

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

GMT+8, 2024-5-8 18:04

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部