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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 序列模型中的IF

   

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


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

主题:序列模型中的IF

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


加好友 发短信
等级:论坛游侠 帖子:167 积分:0 威望:0 精华:0 注册:2016/11/7 11:22:58
序列模型中的IF  发帖心情 Post By:2018/8/8 9:53:18 [只看该作者]

后台程序化交易中,需要用序列模型。其它语句一般都没问题,但有IF的语句出现之后,都会有提示说“你当前的公式似乎应该使用K线计算模式进行,是否切换到逐K模式”

 

IF TBUYHOLDINGEX( ZH1,PZ1 ,0 )<10 THEN BEGIN
阳线加仓:TBUY(CLOSE>OPEN,2,LMT,CLOSE,0,ZH1,PZ1);
阴线加仓:TBUY(CLOSE<OPEN,1,LMT,CLOSE,0,ZH1,PZ1);
END

IF TIME>=150000 THEN BEGIN
TSELL(1,0,MKT,0,ZH1,PZ1);
END

 


 回到顶部
帅哥哟,离线,有人找我吗?
racky2016
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:167 积分:0 威望:0 精华:0 注册:2016/11/7 11:22:58
  发帖心情 Post By:2018/8/8 9:54:30 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:5555555.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
banzhuan
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:16558 积分:0 威望:0 精华:0 注册:2017/6/1 10:24:09
  发帖心情 Post By:2018/8/8 10:04:12 [只看该作者]

IF语句工作机制是每周期都去执行一次,所以只能用在逐K线模式下

 回到顶部
帅哥哟,离线,有人找我吗?
racky2016
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:167 积分:0 威望:0 精华:0 注册:2016/11/7 11:22:58
  发帖心情 Post By:2018/8/8 10:07:17 [只看该作者]

那改造一下是不是就可以,比如这样写:

CONDSELL2:=time>=150000;
TSELL(CONDSELL2,TBUYHOLDINGEX( ZH1,PZ1 ,0 ),MKT,0,ZH1,PZ1);


 回到顶部
帅哥哟,离线,有人找我吗?
banzhuan
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:16558 积分:0 威望:0 精华:0 注册:2017/6/1 10:24:09
  发帖心情 Post By:2018/8/8 10:16:27 [只看该作者]

可以,把条件加入开平仓语句的第一项参数也行的;

 回到顶部
帅哥哟,离线,有人找我吗?
racky2016
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:167 积分:0 威望:0 精华:0 注册:2016/11/7 11:22:58
  发帖心情 Post By:2018/8/8 10:38:25 [只看该作者]

以下是引用banzhuan在2018/8/8 10:04:12的发言:
IF语句工作机制是每周期都去执行一次,所以只能用在逐K线模式下

谢谢,这个“每周期执行一次”是什么含义呢?

是指每来一个新tick/新K执行一次全部K刷新呢(注1),还是指如果序列模式只有最后1K作为条件不符合要求(注2)?

也就是说,如果只是后者原因,那么作为一个用来控制交易而非回测的后台程序,是不是也可以接受?

注1:

新的tick来时,
序列模式:仅刷最新的K线;
逐K模式:从第一根到最新的一根K线都刷;
逐K模式+仅刷最后一根K线:仅刷最新的K线;

新的K线生成那一刻,
序列模式:仅刷最新的K线;
逐K模式:从第一根到最新的一根K线都刷;
逐K模式+仅刷最后一根K线:从第一根到最新的一根K线都刷;

注2:

序列模式计算时,控制语句条件允许使用序列变量,由于序列模式只执行一次控制语句解析,对于序列变量,仅取最后一个数据做为条件判断。

 


 回到顶部
帅哥哟,离线,有人找我吗?
racky2016
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:167 积分:0 威望:0 精华:0 注册:2016/11/7 11:22:58
  发帖心情 Post By:2018/8/8 10:52:52 [只看该作者]

追问:

像这种语句能不能用序列模式?

IF TTOTALDAYTRADE>=500 THEN EXIT;


 回到顶部
帅哥哟,离线,有人找我吗?
banzhuan
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:16558 积分:0 威望:0 精华:0 注册:2017/6/1 10:24:09
  发帖心情 Post By:2018/8/8 11:18:54 [只看该作者]

抱歉更正一下,IF 在后台程序化中可以在序列模式下使用的,是图表里不能使用在序列模式下

 回到顶部
帅哥哟,离线,有人找我吗?
racky2016
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:167 积分:0 威望:0 精华:0 注册:2016/11/7 11:22:58
  发帖心情 Post By:2018/8/8 14:00:30 [只看该作者]

嗯,问题出在变量选择上。由于IF语句里面用了variable变量,导致编译出错,改为globalvariable就可以通过。

再追问一个问题:下面的解释,“仅刷新最新一根K线的数据”是什么含义?

//GLOBALVARIABLE函数仅刷新最新一根K线的数据,无法进行迭代运算,不支持数组。
使用方法与VARIABLE普通全局变量相同,
运算的效果同EXTGBDATASET函数
唯一不同之处在于GLOBALVARIABLE超全局变量仅作用于当前的单个策略.
EXTGBDATASET可作用于整个金字塔,多策略可同时调用、读写。
注意:
超全局变量一般会在客户停止后台程式化交易或者关闭框架图表后销毁重置。


 回到顶部
帅哥哟,离线,有人找我吗?
banzhuan
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:16558 积分:0 威望:0 精华:0 注册:2017/6/1 10:24:09
  发帖心情 Post By:2018/8/8 14:16:49 [只看该作者]

可以理解为只有最新值的概念; variable用于图表上,globalvariable用在后台程序化;

 回到顶部