- 精华
- 0
- 在线时间
- 96 小时
- UID
- 66209
- 积分
- 128
- 帖子
- 78
- 阅读权限
- 40
- 注册时间
- 2011-9-18
- 最后登录
- 2020-12-20
- 精华
- 0
- UID
- 66209
- 积分
- 128
- 帖子
- 78
- 主题
- 19
- 阅读权限
- 40
- 注册时间
- 2011-9-18
- 最后登录
- 2020-12-20
|
人外有人 发表于 2013-7-25 10:33
是在最后一行的end处,报出大括号不匹配的错误,求小米求救啊
还有很多问题,帮你改了一下。但是- if (OpenIntD-OpenIntD[i+1]<>0)//看是否是上个交易的开始时刻
复制代码 这一句的逻辑明显是错的,不知道你想计算什么?- 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 AF;
- Numeric SF; // smoothing factor
- NumericSeries SAR;
- Numeric i;
- Numeric j;
- NumericSeries TRValue;
- NumericSeries AvgPlusDI;//+DI14
- NumericSeries AvgMinusDI;//-DI14
- Numeric k;
- Numeric ReversalTime;//记录止损点
- NumericSeries NewHigh;//新高
- Numeric EP;
- NumericSeries Newlow;//新低
- Numeric ReversalPoint;//记录反转的时间
- Numeric TradeNumber;//记录已发生的交易数
- Numeric TradeTime;//记录开始交易两次内交易的日期
- Numeric LastTradeBegin;
- 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;
- }
- }
- }Else
- 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
复制代码 |
|