- 精华
- 0
- 在线时间
- 49 小时
- UID
- 111878
- 积分
- 96
- 帖子
- 46
- 阅读权限
- 30
- 注册时间
- 2012-8-4
- 最后登录
- 2013-3-22
- 精华
- 0
- UID
- 111878
- 积分
- 96
- 帖子
- 46
- 主题
- 12
- 阅读权限
- 30
- 注册时间
- 2012-8-4
- 最后登录
- 2013-3-22
|
本帖最后由 慕容表哥 于 2013-2-7 14:49 编辑
您好,使用MtBar函数做原型,修改为mtbar1函数,希望转换data1的数据,和mtbar配合做套利用。但是在mtbar函数里面添加data1.后编译无法通过,反馈return语句返回值类型与公式定义的返回值不符?求救
Params
Numeric TimeFrame(1440);
// 目标时间周期:月线=40320,周线=10080,日线=1440,4小时线=240
// 其他1小时内的周期等于相应的分钟数,如:1小时=60, 30分钟=30。。。
// 支持不规则分钟数,如3分钟,8分钟,之类都行
Numeric BarsBack(1);
// 目标时间周期BAR偏移:
// 1--表示将目标时间周期下的前1根K线数据作为与当前Bar对应的目标时间周期下的K线数据
// 0--表示将目标时间周期下的截止到目前为止的数据转换为与当前BAR对应的目标时间周期下K线数据
NumericRef oCurBar; // 目标时间周期下的Bar索引
NumericRef oOPenHT; // 目标时间周期下的开盘价
NumericRef oHighHT; // 目标时间周期下的最高价
NumericRef oLowHT; // 目标时间周期下的最低价
NumericRef oCloseHT; // 目标时间周期下的收盘价
NumericRef oVolHT; // 目标时间周期下的成交量
NumericRef oOpenIntHT; // 目标时间周期下的持仓量
Vars
NumericSeries barCnt;
NumericSeries CurBar;
NumericSeries barCntSum;
NumericSeries OpenHT;
NumericSeries HighHT;
NumericSeries LowHT;
NumericSeries CloseHT;
NumericSeries VolHT;
NumericSeries OpenIntHT;
Numeric CurTime;
Numeric PreTime;
bool condition(false);
Numeric i;
Begin
If (TimeFrame == 40320) // 月线
{
CurTime = Data1.Month;
PreTime = Data1.Month[1];
}
Else If (TimeFrame == 10080) // 周线
{
CurTime = IntPart(DateDiff(19700105,Data1.Date)/7);
PreTime = IntPart(DateDiff(19700105,Data1.Date[1])/7);
}
Else // 其他时间周期
{
CurTime = IntPart((DateDiff(19700105,Data1.date)*1440 + Data1.Hour*60 + Data1.Minute)/TimeFrame);
PreTime = IntPart((DateDiff(19700105,Data1.date[1])*1440 + Data1.Hour[1]*60 + Data1.Minute[1])/TimeFrame);
}
condition = CurTime != PreTime;//1分钟转化得到的bar索引和当前时间周期的不同?
If (Data1.CurrentBar==0) // 如果是第一根Bar, CurBar=0
{
barCnt = 0;
CurBar = 0;
OpenHT = Data1.Open;
HighHT = Data1.High;
LowHT = Data1.Low;
CloseHT = Data1.Close;
VolHT = Data1.Vol;
OpenIntHT = Data1.OpenInt;
}
Else
{
If(Condition)
// 如果在目标周期下,属于另一根K线,则CurBar加1,
{
barCnt = 1;
CurBar = CurBar[1] + 1;//1分钟转化过来的的周期慢了一个bar?
OpenHT = Data1.Open;
HighHT = Data1.High;
LowHT = Data1.Low;
VolHT = Data1.Vol;
}Else
// 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加
{
barCnt = barCnt[1] + 1;//累计小时间周期的bar数量?
CurBar = CurBar[1];
OpenHT = OpenHT[1];
HighHT = Max(HighHT[1],Data1.High);
LowHT = Min(LowHT[1],Data1.Low);
VolHT = VolHT[1] + Data1.Vol;
}
// 收盘价和持仓量总是取最新值
CloseHT = Data1.Close;
OpenIntHT = Data1.OpenInt;
}
// 上面的程序,在每根小周期的K线上,记录了它所属的大时间周期下的开高低收等值的变化。
// 接下来,要把在大的时间周期级别上,属于同一根K线的开高低收这些数据,记录在这一组小周期K线的最后一根上。
barCntSum = barCnt ;
If(BarsBack == 0)
// 如果Bar偏移参数为0,则取每根小周期K线上保留的大时间周期截止到这根小周期K线为止的BAR数据
{
barCntSum = 0 ;
}Else If(BarsBack == 1)
// 如果Bar偏移参数为1,则取大时间周期的上一根K线的BAr数据
{
barCntSum = barCnt ;
}Else
// 如果BAR偏移参数为其他,则取大时间周期的指定偏移后的那根K线的BAR数据
{
For i = 2 To BarsBack
{
barCntSum = barCntSum + barCnt[barCntSum];
}
}
// 最后将相应的K线数据作为引用参数返回
oCurBar = CurBar;
oOpenHT = OpenHT[barCntSum];
oHighHT = HighHT[barCntSum];
oLowHT = LowHT[barCntSum];
oCloseHT = CloseHT[barCntSum];
oVolHT = VolHT[barCntSum];
oOpenIntHT = OpenIntHT[barCntSum];
Return barCnt;
End |
|