同样的代码,只有螺纹钢上面在14点55的k线上不执行(信号实时不显示,夜盘开始后才显示),其他品种正常。
截图如下:




想请问,是设置的原因吗?(不记得对几个品种的设置有什么不同)。是代码的原因吗?按理说不应该,否则就不会事后信号还是出现。但值得注意的是,信号肯定没有实时出现,这个情况在国庆假期前就出现了,当时还以为是系统要留仓(当时看k线上没信号),可放假后开盘再看就发现9月30号的14点55分k线上面是有信号的。
信号滞后出现可能是引用了未来数据,但收盘这块是用的时间判断,按理说不该出现引用未来数据导致信号与时间不匹配。还有什么可能出现这种事后才出现信号的情况吗?还请解惑。
请问有人遇到过这种情况吗?如何解决?谢谢!
......
我强调很多遍了,我要的是一个可以执行的完整代码,不是一个局部的代码块。

哪个事件域?开仓逻辑是什么?buy1是什么?这个代码它跑起来能出平仓信号?
鉴于我三番多次请求提供可执行的复现代码,都不能提供,那我只能自行补全这个代码内容让它变成一个完整的内容,至于我补全的内容和原本代码内容之间的差异有没有可能就是造成问题的原因,我不能确认。以下是补全的代码。
Params
numeric lots(1);
Vars
global numeric buy1;
Defs
//此处添加策略函数
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
If(time == 0.1450)
{
buy(lots, open);
}
If(time == 0.1455)
{
if(MarketPosition == 1) sell(lots, open);
if(MarketPosition == -1 ) BuyToCover(lots, open);
buy1 = 0;
return;
}
}谢谢!看到视频了。我出差回去后会按照wgy_king 的提示删掉该品种并重新添加一遍,看看是什么情况。如果还不行,大不了不做上期的品种就是了,其他几个交易所的品种容纳个几个亿的资金也够了。
你的问题应该很简单
只是你没时间去测试
你不会是写在onbarclose事件域里的吧
还有你这个return实在是太扎眼....你确定模型逻辑顺序没问题?
return会直接停止本次驱动。
return只在14点55分这块有,其他模块并没有,就是担心在此模块后继续执行后面的语句,才用的return,应该和在这根k线上信号出不出现没有关系。
这个模块是写在onbar事件域的。
诚心请教,还望帮助解决,否则没法上实盘。
在没有引入未来数据的情况下,信号不在k线bar当时出现,而是在bar过去后才出现。这种情况目前只在螺纹钢一个品种上看到,是因为上期的品种平仓区分平今与平昨吗?还是有别的什么原因?其他时间的平仓目前看都正常执行,只有14点55分这个基于时间的平仓没有执行(而且每次都发生)。
这种代码典型的回溯、测试场景
即使问题解决了
能上实盘?
1、time和K线切割方式有关系
怎么着也得用tradingBeginDateTime这种不受干扰的函数吧,而且==是不是改成>=?
2、MK模式基于单向持仓,本质上是一种对冲机制;如果是单向,信号和账户应该处理机制不一样吧(我没测试过),如果是双向交易,MK就不准确
3、buy/sell映射发单,你应该用的映射,粗暴的扔到账户,然后靠监控同步?
简而言之
纯粹的虚拟回溯的编码方式……
为什么不能上实盘?
1.看上面图片,已经明示了是5分钟图。关于用==而不是>=是因为我记得time函数是精确到小数点后4位,如果用>=反而可能不一定合适,因为还需要框定到收盘时间,否则会错乱影响夜盘交易。
2.没看懂,MK模式指的是?
3.个人觉得映射模式挺好的,以前用这一模式帮人账户实现过几天暴利的操作,没发现有什么不合适的。
4.如果可以的话,希望能够提供些有用的解决方案,如上面说到的tradingbegindatetime,我会去试是否好使。诚心请教,上面说的也不是争论,只是个人感受。
谢谢!
TradingBeginDatetime >= TrueDate(0) + 0.1455
试试就试试
或者
TradingBeginDatetime > TrueDate(0) + 0.145
你这个问题必须直接调试代码才能处理
这两天一直在出差,下个交易日试试这个代码。谢谢!
谢谢!我准备如果代码找不出问题,重装下TB试试。
能行?
补充一句,这种情况在螺纹钢上面基本是每天出现,只有有仓要收盘平就出现。盘中开平信号与实际是匹配的。