- 精华
- 0
- 在线时间
- 25 小时
- UID
- 1086
- 积分
- 77
- 帖子
- 7
- 阅读权限
- 30
- 注册时间
- 2008-1-18
- 最后登录
- 2008-9-1
- 精华
- 0
- UID
- 1086
- 积分
- 77
- 帖子
- 7
- 主题
- 3
- 阅读权限
- 30
- 注册时间
- 2008-1-18
- 最后登录
- 2008-9-1
|
Params
NUMERIC RISK(9);
NUMERIC AllBars(250);
Numeric BuyLots(1);
Vars
Numeric val1buffer;
NUMERIC val2buffer;
Numeric up(0);
numeric dn(0);
Numeric x1(70);
Numeric x2(30);
Numeric Value10(10);
NUMERIC bvalue2;
NUMERIC Value1;
NumericSeries Value2;
NUMERIC value3;
NUMERIC value11;
Numeric TrueCount;
Numeric counter;
Numeric MRO1;
Numeric MRO2;
NUMERIC i;
Numeric i1;
numeric Range;
numeric AvgRange;
numeric val1;
numeric val2;
numericseries Table_value2(500);
NUMERIC counted_bars;
numeric shift;
numeric oversold;
BEGIN
value10=3+RISK*2;//风险比较初始中间值
x1=67+RISK;//上限值
x2=33-RISK;//下限值
value11=value10;
iif((counted_bars<0),-1,0);//如果条件成立说明指标调用运行错误。则退出程序。
if(counted_bars>0);
counted_bars=counted_bars-1;
shift = CurrentBar-counted_bars-1;
if (shift > AllBars) shift = AllBars;
while(i>0)
i=shift;
i=i-1;
{
counter=i;
Range=0;
AvgRange=0;
if(counter==i )
counter<=i+9;
counter=counter+1;
{
AvgRange=AvgRange+Abs(High[counter]-Low[counter]);//计算十日内最高最低价差的绝对值
}
Range=AvgRange/10;//计算十日价差绝对值的平均值
counter=i;
TrueCount=0;
while (counter<i+9 && TrueCount<1)
{
if (Abs(Open[counter]-Close[counter+1])>=Range*2.0 )
TrueCount=TrueCount+1;
counter= counter+1;
//从当前K线往历史找到第一个满足 开盘价收盘价差绝对值大于Range*2的K线位置
}
if (TrueCount>=1)
MRO1=counter ;
else
MRO1=-1;
counter=i;
TrueCount=0;
while (counter<i+6 && TrueCount<1)
{
if(Abs(Close[counter+3]-Close[counter])>=Range*4.6)
{TrueCount=TrueCount+1;}
counter=counter+1;
//从当前K线往历史找到第一个满足 前第3日收盘价和当日价收盘价差绝对值大于Range*4.6的K线位置
}
if(TrueCount>=1)
MRO2=counter;
else
MRO2=-1;
if (MRO1>-1)
value11=3; //如果找到则value11赋值为3
else
value11=value10;//如果没找到则value11赋值为第一风险中间值
if (MRO2>-1)
value11=4; //如果找到则value11赋值为4
else
value11=value10;//如果没找到则value11赋值为第一风险中间值
value2=100-Abs(PercentR(value11));//100-威廉指标的绝对值
if(Table_value2==i&&Table_value2[0]==i)
if(Table_value2==value2&&Table_value2[1]==value2)
val1=0;
val2=0;
value3=0;
if (value2<x2 ) // x2 = 30
{
i1=1;
while(Table_value2[i+i1]>=x2 && Table_value2[1]>=x2 &&Table_value2[i+i1]<=x1&&Table_value2[1]<=x1)
{i1=i1+1;}//求出连续第一个满足风险上下限的K线位置
if (Table_value2[i+i1]>x1&&Table_value2[1]>x1)
{
value3=High+Range*0.5;//取得这个位置的K线最高价+Range*0.5
Val1=value3;
}
}
if ( value2>=x1) // x1 = 70
{
i1=1;
while (Table_value2[i+i1]>=x2 && Table_value2[1]>=x2 &&Table_value2[i+i1]<=x1&&Table_value2[1]<=x1)
{i1=i1+1;}//求出连续第一个满足风险上下限的K线位置
if (Table_value2[i+i1]< x2&&Table_value2[1]< x2)
{
value3=Low-Range*0.5;//取得这个位置的K线最高价-Range*0.5
Val2=value3;
} //上面两个K线位置就分别是多空入场的位置。
}
{if (val2!=0 && up==0 )
{i=val1buffer;
val1buffer= val2-1*midPoint;
up=1;
dn=0;
if(shift<=2)
{
Buy(BuyLots,Close);
}
}
if (val1 !=0 && dn==0)
{i=val2buffer;
val2buffer= val1+1*midPoint;
dn=1;
up=0;
if(shift<=2)
{
SellShort(BuyLots,Close);;
}
}
}
}
END
我的想法是把多空入场位的两个地方加入买开仓,卖开仓指令。
老师给看看哪里错了,运行通过,但没有指令。 |
|