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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 选择下单

   

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


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

主题:选择下单

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/8/26 9:51:47    Post IP:58.246.57.26[显示全部帖子]

 
如果是相同指标,不同品种的值,可以用hod2函数。下单时候只需要判断当前品种在这个指标上的排名是否满足即可。


求数组按从高到低排序的名次。

用法:
HOD2(X,N,K):求某一周期X数组内N个元素(N <= 最大元素数)的K值依照从高到低排序后为第几个高值,返回值为排序名次。N=0则表示数组全部元素参与计算

例如:
我们根据KDJ的K值由大到小排序,品种为CU,RU,M,CF,IF
1、首先建立数组
VARIABLE: X[5]:=0;
X[1]:=STKINDI('CU00','KDJ.K',0,6,0);
X[2]:=STKINDI('RU00','KDJ.K',0,6,0);
X[3]:=STKINDI('M00','KDJ.K',0,6,0);
X[4]:=STKINDI('CF00','KDJ.K',0,6,0);
X[5]:=STKINDI('IF00','KDJ.K',0,6,0);
2、通过HOD2函数排序
CU排名:HOD2(X,5,X[1]),LINETHICK0;
RU排名:HOD2(X,5,X[2]),LINETHICK0;
M排名:HOD2(X,5,X[3]),LINETHICK0;
CF排名:HOD2(X,5,X[4]),LINETHICK0;
IF排名:HOD2(X,5,X[5]),LINETHICK0;
所属函数组:引用函数


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/8/26 10:09:40    Post IP:58.246.57.26[显示全部帖子]

 是的。涉及到数组的必须这样逐K模式。



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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/8/26 16:43:13    Post IP:58.246.57.26[显示全部帖子]

 不是,只要不存在循环引用即可。可以二次引用。

只是这里,我建议 考虑下用自定义数据做排序。这样省的做很多个跨周期调用。

http://www.weistock.com/bbs/dispbbs.asp?boardid=17&Id=173925

把若干品种纳入到自定义数据统计的一个版块内,然后就可以进行统计了,可以统计指标值,也可以获取排名情况。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/8/27 8:41:26    Post IP:58.246.57.26[显示全部帖子]

 应用错误?截图看下报错的信息。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/8/27 9:03:29    Post IP:58.246.57.26[显示全部帖子]

 那个不是全局变量导致的。就是stkindi用太多了。
1.检查下你的逻辑里面是否存在循环引用。就是是否有形成一个自己引用自己的逻辑。
2.

解除50个引用限制,参考

Setting\Option.ini文件,找到[Settings]组,增加一行

MaxCallStock=50

 

其中50就是限制数值,你任意更改一下即可




主要你看下是不是第1个问题,如果是第一个问题,那么接触限制也没用。





另外如果不是 完整的 跨周期 跨品种 跨指标,可以考虑部分调用换其他方式来进行:

1.

用户函数调用模式,方便客户进行模块化编程
用法:#用户函数.指标线(参数)#
例如:#test01.B1(20,45)#,表示调用test01指标的B1输出线,参数为20和45
使用用户函数模式与跨周期调用模式方法方式类似,但是比扩周期引用更加节省内存,提高运行效率,缺点是无法跨周期使用
所属函数组:控制语句


2.

引用操作符

例如:
"INDIE.VAR"(P1,P2) 引用INDI指标的VAR输出,计算参数为P1,P2。若没有指定公式线,系统将取最后一行公式输出
数据类型有TICK、MIN1、MIN3、MIN5、MIN10、MIN15、MIN30、MIN60、DAY、WEEK、MONTH、YEAR、MULTIDAY、MULTIMIN、MULTISEC、MULTIHOUR、QUARTER、SEMIYEAR、SOLARTERM
"MACD#WEEK"(26,10,5) 引用周线数据的MACD指标最后一行公式输出
"MACD"表示该指标的最后—行公式输出并且使用公式的默认参数。
"000001$CLOSE" 引用品种000001的收盘价
"SZ000001$CLOSE#WEEK" 引用SZ市场的品种000001周线收盘价
"VOL##DAY"引用日线数据的前一周期的VOL指标
引用数据时,需要实现确认被引用品种周期数据齐全,再首次使用或者在不确定时,请手工进行数据补充工作
"DLLNAME@FNCNAME"(P1,P2) 引用DLLNAME.DLL的FNCNAME函数,计算参数为P1,P2
用户函数模式:#用户函数.指标线(参数)#
例如:#test01.B1(20,45)#,表示调用test01指标的B1输出线,参数为20和45,使用用户函数模式比扩周期引用更加节省内存,提高运行效率.
所属函数组:控制语句



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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/10/20 13:22:12    Post IP:58.246.57.26[显示全部帖子]

 那你要重新创建自定义数据。
自定义数据分排序和数值 2种,你现在设置的应该是排序结果。不勾选那个排序的选项,获取的就是数值。




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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2020/10/20 13:27:20    Post IP:58.246.57.26[显示全部帖子]

 是的。一个自定义要么是数值 要么是排序结果。不能在一个里面弄的。


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