下面这样写, 假如我设置的参数符合ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2, msgout 和 explain 为什么会显示不出来?
runmode: 0; //在逐K线模式下
IF BARPOS>EXTGBDATA('T') THEN//程序运行虽然是逐K线模式下, 但是是每个tick都会运行一次, 只是买卖在K线完成后才运行。 MSGOUT 不是逐K线模式的, 是TICK模式的, 所以才会判断每步运行一次msgout,.
BEGIN
EXTGBDATASET('T',BARPOS);
CC:TIME=093100 OR TIME=143100;
MSGOUT(ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2 ,'输入参数有误,立即停止交易') ;
MSGOUT(C<BELOWPRICE2*0.97 AND CC,'价格低于最低价3%,考虑清楚是否需要止损?');
EXPLAIN(ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2 ,'输入参数有误,立即停止交易');
EXPLAIN(C<BELOWPRICE2*0.97 AND CC,'价格低于最低价3%,考虑清楚是否需要止损?');
END
你是后面整个代码块都 在
IF BARPOS>EXTGBDATA('T') THEN//
这个条件后面吗?
那你在
工具-数据管理-全局变量 这里看下这个全局变量t值是否正常,或者是值过大导致if条件无法满足。
如过你某次把数据拉的特别大,你后面如果数据量少于这个T。if条件都无法满足的。你手工重置下全局变量试下。
应该不会少于T的, 每个合约都已经够长了, 我试了几次, msgout 和 explain 显示不出来。
runmode: 0;
IF BARPOS>EXTGBDATA('T') THEN
BEGIN
EXTGBDATASET('T',BARPOS);
CC:TIME=093100 OR TIME=143100;
MSGOUT(ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2 ,'输入参数有误,立即停止交易') ;
MSGOUT(C<BELOWPRICE2*0.97 AND CC,'价格低于最低价3%,考虑清楚是否需要止损?');
EXPLAIN(ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2 ,'输入参数有误,立即停止交易');
EXPLAIN(C<BELOWPRICE2*0.97 AND CC,'价格低于最低价3%,考虑清楚是否需要止损?');
END
把下面的程序放在外面就能执行了, 这是为什么? IF BARPOS>EXTGBDATA('T') THEN 这个语句之前是你给我的, 为什么不行?
MSGOUT(ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2 ,'输入参数有误,立即停止交易') ;
MSGOUT(C<BELOWPRICE2*0.97 AND CC,'价格低于最低价3%,考虑清楚是否需要止损?');
EXPLAIN(ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2 ,'输入参数有误,立即停止交易');
EXPLAIN(C<BELOWPRICE2*0.97 AND CC,'价格低于最低价3%,考虑清楚是否需要止损?');
你现在情况是所有的品种都共享一个T的值。你白银现在就100个K,但是之前某次你在螺纹你加载了200个K,那么这个T就是200. 此外就是T的值只会增不会变下,你某次在图表上加载了很大的数据量,那么这个T值也会自然保存一个很大的值,导致后续都无法满足。
你在工具-数据管理-全局变量 里面看下T的值。
然后你在图表上输出看下BARPOS。判断下,比较下大小。
这个代码使用很有局限性的,不能多品种共享,也不能随意手工扩大数据量。所以你只能每次使用之前,手工重置下这个全局变量。