使用环境:
基本数据源为1分钟,通过DataConvert可以转化为对应的5分钟数据,有些朋友希望能够在1分钟图里面取道5分钟的数据的均线,效果要和单独使用5分钟的均线一样。为此,提供以下函数。
- 新建一个用户函数,TransMinsData,返回值为数值型。
参数1:要计算的数据源。
参数2:想按N分钟来处理,本例是5分钟,不能大于60。
参数3:希望取多少个N分钟前的数据。
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(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
- 新建一个技术指标,用来举例说明如何使用该函数。
本例是取5分钟的均值((O+H+L+C)/4)的10周期移动平均。
Params
Numeric Length(10);
Vars
Numeric MyOpen;
Numeric MyHigh;
Numeric MyLow;
Numeric MyClose;
NumericSeries MyAvgPrice;
Numeric SumValue(0);
Numeric Value1;
Numeric i;
Begin
MyOpen = DataConvert(Open,"min",5,"Open");
MyHigh = DataConvert(High,"min",5,"High");
MyLow = DataConvert(Low,"min",5,"Low");
MyClose = DataConvert(Close,"min",5,"Close");
MyAvgPrice = (MyOpen+MyHigh+MyLow+MyClose)*0.25;
For i = Length-1 DownTo 0
{
Value1 = TransMinsData(MyAvgPrice,5,i);
SumValue = SumValue + Value1;
}
PlotNumeric("AvgPrice",SumValue/Length);
End
关键字:程序化交易, TradeBlazer, 跨周期