我在尝试使用5分钟K线生成交易信号,然后在1分钟K线上找交易点,但是运行起来却读不出数据,麻烦帮忙检查下原因,到底是代码有问题,还是我操作的不对,具体代码如下:
Params
Numeric boll_period(20); // 布林带周期
Vars
Series<Numeric> boll_mid5; // 5分钟布林带中轨
Series<Numeric> boll_up5; // 5分钟布林带上轨
Series<Numeric> boll_dn5; // 5分钟布林带下轨
Series<Numeric> boll_mid1; // 1分钟布林带中轨
Series<Numeric> boll_up1; // 1分钟布林带上轨
Series<Numeric> boll_dn1; // 1分钟布林带下轨
Bool signal_short; // 做空信号
Events
OnInit()
{
// 订阅不同周期的数据,先订阅大周期
SubscribeBar(Symbol, "5m"); // Data0: 5分钟
SubscribeBar(Symbol, "1m"); // Data1: 1分钟
Range[0:DataCount-1]
{
//=========除权换月相关设置==============
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
}
//=========交易相关设置==============
SetInitCapital(1000000); // 设置初始资金100万
SetMarginRate(0.1); // 设置保证金率
SetBeginBarMaxCount(100); // 设置初始化K线数量
}
OnBar(ArrayRef<Integer> indexs)
{
// 计算5分钟布林带
Range[0:0]
{
boll_mid5 = Average(Data0.Close, boll_period);
boll_up5 = Highest(Data0.High, boll_period);
boll_dn5 = Lowest(Data0.Low, boll_period);
// 绘制5分钟布林带
PlotNumeric("boll_mid5", boll_mid5);
PlotNumeric("boll_up5", boll_up5);
PlotNumeric("boll_dn5", boll_dn5);
// 判断K线是否突破上轨
signal_short = (High > boll_up5);
Commentary("5分钟布林带上轨="+Text(boll_up5));
}
// 在1分钟周期执行交易
Range[1:1]
{
// 计算1分钟布林带
boll_mid1 = Average(Close, boll_period); // 当前周期可以直接用Close
boll_up1 = Highest(High, boll_period);
boll_dn1 = Lowest(Low, boll_period);
// 绘制1分钟布林带
PlotNumeric("boll_mid1", boll_mid1);
PlotNumeric("boll_up1", boll_up1);
PlotNumeric("boll_dn1", boll_dn1);
// 开仓条件:5分钟有信号且1分钟突破上轨
If(MarketPosition == 0) // 无持仓时
{
If(signal_short And High > boll_up1)
{
SellShort(1, Close); // 做空1手
Commentary("开仓:5分钟突破,1分钟确认");
}
}
// 平仓条件:1分钟回归中轨
If(MarketPosition < 0) // 持有空单
{
If(Close <= boll_mid1)
{
BuyToCover(1, Close);
Commentary("平仓:回归中轨");
}
}
// 输出信号信息
Commentary("signal_short="+IIFString(signal_short,"True","False"));
Commentary("1分钟布林带上轨="+Text(boll_up1));
}
}
要分析代码看置顶帖的投稿。
代码问题很多
1、如果直接品种K线图表加载
D0/D1就不是订阅,是SET成5分钟/1分钟
否则就有四个数据源,代码应该操作D2/D3
2、如果是设置策略单元
D0/D1要么手工直接设置
要么把操作品种作为公式参数再订阅
否则订阅谁?
3、close是未来函数,肯定闪烁
……
不一一列举了
还是先看看老师的视频
一步步慢慢来
🤣