欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 下面这样写, 假如我设置的参数符合ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2,

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3076人关注过本帖树形打印复制链接

主题:下面这样写, 假如我设置的参数符合ABOVEPRICE1<BELOWPRICE1 OR BELOWPRICE1<BELOWPRICE2,

帅哥哟,离线,有人找我吗?
OscarDeng
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:289 积分:0 威望:0 精华:0 注册:2019/4/29 11:42:41
下面这样写, 假如我设置的参数符合ABOVEPRICE1  发帖心情 Post By:2020/11/16 16:53:41    Post IP:14.145.164.237[只看该作者]

下面这样写, 假如我设置的参数符合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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/11/16 16:56:24    Post IP:58.246.57.26[只看该作者]

 你是后面整个代码块都 在

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

这个条件后面吗?

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


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/11/16 16:59:16    Post IP:58.246.57.26[只看该作者]

 如过你某次把数据拉的特别大,你后面如果数据量少于这个T。if条件都无法满足的。你手工重置下全局变量试下。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
OscarDeng
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:289 积分:0 威望:0 精华:0 注册:2019/4/29 11:42:41
  发帖心情 Post By:2020/11/30 11:49:53    Post IP:202.105.58.92[只看该作者]

应该不会少于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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/11/30 13:21:02    Post IP:58.246.57.26[只看该作者]

  你手工重置下全局变量或者把BARPOS>EXTGBDATA('T') 作为变量条件直接输出看下就知道了。另外测试时候把msgout 和explain的条件设为1.  就能判断到底卡在那个环境了。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
OscarDeng
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:289 积分:0 威望:0 精华:0 注册:2019/4/29 11:42:41
  发帖心情 Post By:2020/12/16 8:45:21    Post IP:113.68.55.10[只看该作者]

把下面的程序放在外面就能执行了, 这是为什么?  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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/12/16 9:25:26    Post IP:58.246.57.26[只看该作者]

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

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


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



命数如织,当如磐石。
 回到顶部