同其他跨周期的一样,先需要建立一个用户函数,TransMinsData
代码如下:
Params
NumericSeries Price(1);
Numeric nMinSet(5);
Numeric MinsAgo(2);
Vars
NumericSeries barCnt;
NumericSeries MinData;
Numeric i;
Numeric j;
Numeric nIndex(0);
Begin
If(IntPart((Hour*60+Minute)%nMinSet)==0)
{
barCnt = 1;
}Else
{
barCnt = barCnt[1] + 1;
}
MinData = Price;
If(MinsAgo == 0)
{
return MinData;
}Else
{
For i = 1 To MinsAgo
{
If( i == 1)
{
j = 0;
}Else
{
j = j + BarCnt[j];
}
If (j > CurrentBar ) Return InvalidNumeric;
nIndex = nIndex + BarCnt[j];
}
Return MinData[nIndex];
}
End
再建一个指标,假设命名为preHourClose
Vars
Numeric preHC;
Begin
preHC = TransMinsData(Close,60,1);
PlotNumeric("PHC",preHC);
End
中午11点到11点半半小时 但是在一小时图上是一根K线 还有1点30到2点也是有2根15分钟线 也算1根一小时线
比如现在是13点45分,那么此时想取到的1小时图上上一根K线的收盘价 实际上是11点30分的收盘价,这个时候把函数改一下:
Params
NumericSeries Price(1);
Numeric nMinSet(5);
Numeric MinsAgo(2);
Vars
NumericSeries MinsOfDay;
NumericSeries barCnt;
NumericSeries MinData;
Numeric i;
Numeric j;
Numeric nIndex(0);
Begin
MinsOfDay = (Hour*60+Minute);
If(IntPart(MinsOfDay/nMinSet)!=IntPart(MinsOfDay[1]/nMinSet))
{
barCnt = 1;
}Else
{
barCnt = barCnt[1] + 1;
}
MinData = Price;
If(MinsAgo == 0)
{
return MinData;
}Else
{
For i = 1 To MinsAgo
{
If( i == 1)
{
j = 0;
}Else
{
j = j + BarCnt[j];
}
If (j > CurrentBar ) Return InvalidNumeric;
nIndex = nIndex + BarCnt[j];
}
Return MinData[nIndex];
}
End
求最后一个值和第一个值算法又不一样了
TransMinsData_Open
Params
NumericSeries Price(1);
Numeric nMinSet(5);
Numeric MinsAgo(2);
Vars
NumericSeries MinsOfDay;
NumericSeries barCnt;
NumericSeries MinData;
Numeric i;
Numeric j;
Numeric nIndex(0);
Begin
MinsOfDay = (Hour*60+Minute);
If(IntPart(MinsOfDay/nMinSet)!=IntPart(MinsOfDay[1]/nMinSet))
{
barCnt = 1;
MinData = Price;
}Else
{
barCnt = barCnt[1] + 1;
MinData = MinData [1];
}
If(MinsAgo == 0)
{
return MinData;
}Else
{
For i = 1 To MinsAgo
{
If( i == 1)
{
j = 0;
}Else
{
j = j + BarCnt[j];
}
If (j > CurrentBar ) Return InvalidNumeric;
nIndex = nIndex + BarCnt[j];
}
Return MinData[nIndex];
}
End
关键字:程序化交易, TradeBlazer, 跨周期