- 精华
- 0
- 在线时间
- 3 小时
- UID
- 172610
- 积分
- 4
- 帖子
- 4
- 阅读权限
- 10
- 注册时间
- 2013-9-19
- 最后登录
- 2013-10-5
- 精华
- 0
- UID
- 172610
- 积分
- 4
- 帖子
- 4
- 主题
- 0
- 阅读权限
- 10
- 注册时间
- 2013-9-19
- 最后登录
- 2013-10-5
|
//------------------------------------------------------------------------
// 简称: bamboo
// 名称: bamboo
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
Numeric TimeFrame(1440); // 目标时间周期参数,参数说明参见MtBar
Numeric BarsBack(1); // 目标时间周期BAR偏移参数,说明见MtBar函数
Numeric Length(10); // 均线周期
NumericRef oMA; // 以目标时间周期下的K线数据计算出的移动平均线
Vars
NumericSeries mtBarCnt;
NumericSeries mtClose;
/*
Numeric refCurBar;
Numeric refOpen;
Numeric refHigh;
Numeric refLow;
Numeric refClose;
Numeric refVol;
Numeric refOpenInt;
*/
Numeric oCurBar;
Numeric oOPenHT;
Numeric oHighHT;
Numeric oLowHT;
Numeric oCloseHT;
Numeric oVolHT;
Numeric oOpenIntHT;
Numeric SumValue(0);
Numeric i;
Numeric j(0);
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
//mtBarCnt = MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);
//mtClose = refClose;
If (TimeFrame == 40320) // 月线
{
CurTime = Month;
PreTime = Month[1];
}
Else If (TimeFrame == 10080) // 周线
{
CurTime = IntPart(DateDiff(19700105,Date)/7);
PreTime = IntPart(DateDiff(19700105,Date[1])/7);
}
Else // 其他时间周期
{
CurTime = IntPart((DateDiff(19700105,date)*1440 + Hour*60 + Minute)/TimeFrame);
PreTime = IntPart((DateDiff(19700105,date[1])*1440 + Hour[1]*60 + Minute[1])/TimeFrame);
}
condition = CurTime != PreTime;
If (CurrentBar==0) // 如果是第一根Bar, CurBar=0
{
barCnt = 0;
CurBar = 0;
OpenHT = Open;
HighHT = High;
LowHT = Low;
CloseHT = Close;
VolHT = Vol;
OpenIntHT = OpenInt;
}
Else
{
If(Condition)
// 如果在目标周期下,属于另一根K线,则CurBar加1
{
barCnt = 1;
CurBar = CurBar[1] + 1;
OpenHT = Open;
HighHT = High;
LowHT = Low;
VolHT = Vol;
}Else
// 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加
{
barCnt = barCnt[1] + 1;
CurBar = CurBar[1];
OpenHT = OpenHT[1];
HighHT = Max(HighHT[1],High);
LowHT = Min(LowHT[1],Low);
VolHT = VolHT[1] + Vol;
}
// 收盘价和持仓量总是取最新值
CloseHT = Close;
OpenIntHT = 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;
mtBarCnt = barCnt;
mtClose = oCloseHT;
//SumValue = MtSummation(mtClose,mtBarCnt,Length);
For i = 1 to Length
{
If (mtClose[j] <> InvalidNumeric)
{
SumValue = SumValue + mtClose[j];
j = j + mtBarCnt[j];
}
else Break;
}
oMA = SumValue/Length;
Return mtBarCnt;
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2013/08/08 09:49
// 版权所有 dongtudou
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------ |
|