以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  下面这样写, 假如我设置的参数符合ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2,  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=183045)

--  作者:OscarDeng
--  发布时间:2020/11/16 16:53:41
--  下面这样写, 假如我设置的参数符合ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2,
下面这样写, 假如我设置的参数符合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

--  作者:FireScript
--  发布时间:2020/11/16 16:56:24
--  
 你是后面整个代码块都 在

IF BARPOS>EXTGBDATA(\'T\') THEN//

这个条件后面吗?

那你在
工具-数据管理-全局变量 这里看下这个全局变量t值是否正常,或者是值过大导致if条件无法满足。

--  作者:FireScript
--  发布时间:2020/11/16 16:59:16
--  
 如过你某次把数据拉的特别大,你后面如果数据量少于这个T。if条件都无法满足的。你手工重置下全局变量试下。
--  作者:OscarDeng
--  发布时间:2020/11/30 11:49:53
--  
应该不会少于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

--  作者:FireScript
--  发布时间:2020/11/30 13:21:02
--  
  你手工重置下全局变量或者把BARPOS>EXTGBDATA(\'T\') 作为变量条件直接输出看下就知道了。另外测试时候把msgout 和explain的条件设为1.  就能判断到底卡在那个环境了。
--  作者:OscarDeng
--  发布时间:2020/12/16 8:45:21
--  
把下面的程序放在外面就能执行了, 这是为什么?  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%,考虑清楚是否需要止损?\');

--  作者:FireScript
--  发布时间:2020/12/16 9:25:26
--  
你现在情况是所有的品种都共享一个T的值。你白银现在就100个K,但是之前某次你在螺纹你加载了200个K,那么这个T就是200.  此外就是T的值只会增不会变下,你某次在图表上加载了很大的数据量,那么这个T值也会自然保存一个很大的值,导致后续都无法满足。

你在工具-数据管理-全局变量  里面看下T的值。
然后你在图表上输出看下BARPOS。判断下,比较下大小。


这个代码使用很有局限性的,不能多品种共享,也不能随意手工扩大数据量。所以你只能每次使用之前,手工重置下这个全局变量。