- 精华
- 0
- 在线时间
- 75 小时
- UID
- 49394
- 积分
- 34
- 帖子
- 21
- 阅读权限
- 10
- 注册时间
- 2011-6-24
- 最后登录
- 2021-3-8
- 精华
- 0
- UID
- 49394
- 积分
- 34
- 帖子
- 21
- 主题
- 0
- 阅读权限
- 10
- 注册时间
- 2011-6-24
- 最后登录
- 2021-3-8
|
根据R_breaker模型做了些修改,但运行时开仓与我的意思不同,比如很多时候都是在刚开盘就建仓,但我的意思是想当其价格突破前日波动幅度后建仓。不知道程序哪里出了错误。请各路大虾特别是穿堂风帮忙诊断一下。程序如下:
Params
Numeric PercentOfRange1(0.5);
Numeric PercentOfRange2(0.4);//突破参数N
Numeric ExitOnCloseMins(14.45);//平仓时间
Numeric MinRange(0.004);//最小Range - 0.2%
Numeric LastTradeMins(14.00);//最后交易时间
Numeric BeginTradeMins(9.00);
Numeric Lots(1);
Numeric reverse(0.01);
Vars
NumericSeries DayOpen;
NumericSeries hightoday;
NumericSeries lowtoday;
NumericSeries preDayRange;
Numeric MaxProfit;
Numeric UpperBand1;
Numeric UpperBand2;
Numeric LowerBand1;
Numeric LowerBand2;
Numeric MyPrice;
Numeric i_reverse;
Begin
i_reverse=reverse*OpenD(0)/100;
If(Date != Date[1])
{
//startnow=startnow+1;
DayOpen = OpenD(0);
preDayRange = HighD(1) - LowD(1);
//如果昨日振幅过小,则取设置的最小振幅
preDayRange = max(preDayRange, DayOpen* MinRange);
UpperBand1= DayOpen + preDayRange* PercentOfRange1;
UpperBand2= DayOpen + preDayRange* PercentOfRange2;
LowerBand1 = Dayopen - preDayRange * PercentOfRange1;
LowerBand2 = Dayopen - preDayRange * PercentOfRange2;
hightoday=High;
lowtoday=low;
}
Else
{
DayOpen=DayOpen[1];
preDayRange=preDayRange[1];
If(High>hightoday)
{
hightoday=High;
}
If(Low<lowtoday)
{
lowtoday=low;
}
}
//未开仓时,判断是否需要开仓
if(MarketPosition == 0){
//多头开仓
If(High >= UpperBand1 && Time < LastTradeMins / 100)
{
MyPrice= max(UpperBand1 , open);
Buy(Lots,MyPrice);
Return;
}
//空头开仓
If(Low <= LowerBand1 && Time < LastTradeMins/100)
{
MyPrice=min(LowerBand1,open);
Sellshort(Lots, MyPrice);
Return;
}
If(hightoday>=UpperBand2 And hightoday<UpperBand1 )
{
if(low<=Dayopen+preDayRange* PercentOfRange2*0.618)
{
SellShort(1,Dayopen+(UpperBand2-Dayopen)*0.618);
Return;
}
}
If(lowtoday<=LowerBand2 And LowerBand1<lowtoday )
{
if(High>=Dayopen-(Dayopen-LowerBand2)*0.618)
{
Buy(1,Dayopen-(Dayopen-LowerBand2)*0.618);
Return;
}
}
}
//多头止损
If(MarketPosition == 1){
If(EntryPrice-low>=preDayRange*0.618)
{
Sell(Lots,Min(EntryPrice-preDayRange,low));
Return;
}
}
//空头止损
If(MarketPosition == -1){
If(High-EntryPrice>=preDayRange){
BuyToCover(Lots, Max(EntryPrice+preDayRange,High));
Return;
}
}
//收盘平仓
If(Time >= ExitOnCloseMins / 100){
Sell(Lots, Close);
BuyToCover(Lots,Close);
}
End |
|