参考课程链接: TBQuant简单数组应用20190613
https://www.tbquant.net/train/150.html
策略单元/源码无法上传附件...(如果需要发策略单元,请告知一声,QQ或者邮件发送)
策略单元, 2000根日线 品种:ru000 rb000 cu000 ta000 (测试时间 2022年12月3日18:23:04)
【信号闪烁 信息】
时间 消息类型 消息级别 内容
2022-12-03 18:14:57.610 策略运行 警告 图表交易,图表-测试@K线@1发生信号闪烁,合约:TA000.CZCE,上次执行信号个数:2,本次执行信号个数:0,发生Bar时间:20141223.000000,发生Bar=65
源码:
Params
//此处添加参数
Numeric lots(1);
Vars
//此处添加变量
Numeric i;
Global Integer r; // 图层遍历
Global Array<Numeric> arr1;
Global Array<Integer> id1;
Global Array<Numeric> arr2;
Global Array<Integer> id2;
Events
//此处实现事件函数
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
For i = 0 To DataCount() - 1
{
// arr1[i] = Data[i].Close[1];
arr1[i] = (Data[i].Close[1] - Data[i].Open[1]) / Data[i].Close[1] * 100;
id1[i] = i;
}
Na1Sort2(arr1, id1, 0, (DataCount()-1), False);
Commentary(Text(CurrentBar()));
For i = 0 To DataCount() - 1
{
Commentary("图层[" + Text(i) + "]涨跌系数 = " + Text(Round(arr1[i], 2)));
Commentary("下标[" + Text(i) + "] = " + Text(id1[i]));
}
If(Weekday == 1)
{
Range[r=0 : DataCount-1]
{
Commentary("range: " + Text(r));
If(id1[0] == r )
{
If(MarketPosition <> 1)
{
Buy(lots, Open);
}
}
Else If(id1[DataCount-1] == r )
{
If(MarketPosition <> -1)
{
SellShort(lots, Open);
}
}
Else
{
Sell(0, Open);
BuyToCover(0, Open);
}
}
}
}
策略单元示意:
【信号闪烁 信息】
时间 消息类型 消息级别 内容
2022-12-03 18:14:57.610 策略运行 警告 图表交易,图表-测试@K线@1发生信号闪烁,合约:TA000.CZCE,上次执行信号个数:2,本次执行信号个数:0,发生Bar时间:20141223.000000,发生Bar=65