以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- 能够自定义函数再调用么 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=13377) |
-- 作者:Marcus -- 发布时间:2012/7/31 0:38:13 -- 能够自定义函数再调用么 文档没看完,不好意思直接问各位大虾了。 看金字塔自动向QQ发送消息实例,公式可以加载VB函数,我自己VBS写了一个 Function GetPosition(sStrategy,sContract) 调试能通过 现在在公式系统里想调用函数 GetPosition, PositionCount:=GetPosition(\'TEST\',\'IF08\'); 编译没通过这句,是不是要先注册? 怎么注册呢? |
-- 作者:guotx2010 -- 发布时间:2012/7/31 8:16:19 -- 使用公式编辑器上的,左边的自定义函数,右键“建立自定义函数”增加函数,然后把你上面的代码复制到向导生成的自定义函数体中。 |
-- 作者:Marcus -- 发布时间:2012/7/31 11:14:45 -- 依样画葫芦写了Function,结果后台预警系统表示GetPosition永远返回0,而且SetPosition根本不会写入仓位到文件,事实上连文件都没创建。 求指点。 Function GetPosition(Formula,sStrategy,sContract) GetPosition=0 file = "Z:\\" & sStrategy & "_" & sContract & ".txt" Set fs = CreateObject("Scripting.FileSystemObject") if fs.fileexists(file) then Set a = fs.OpenTextFile(file, 1) GetPosition = cint(a.ReadLine()) a.Close end if Set fs = Nothing End Function Function SetPosition(Formula,sStrategy,sContract,iPosition) SetPosition=0 file = "Z:\\" & sStrategy & "_" & sContract & ".txt" Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.OpenTextFile(file, 2, True) a.WriteLine(iPosition) a.Close Set fs = Nothing End Function |
-- 作者:admin -- 发布时间:2012/7/31 11:23:18 -- 调用 APPLICATION.MSGOU 函数,打印消息输出,看看语句的执行情况 |
-- 作者:Marcus -- 发布时间:2012/7/31 13:39:05 -- 我在预警公式系统里调用函数是这么写的: PositionCount:=GetPosition(\'TEST\',\'IF08\'); SetPosition(\'TEST\',\'IF08\',PositionCount); 结果: 1. application.msgout显示在预警模式下函数GetPosition被频繁调用,调用频率远大于1次每秒,汗! 2. GetPosition输出两个参数sStrategy和sContract值分别为1,2 3. SetPosition没有任何输出,正确的说法是整个预警系统在调用SetPosition后停止了,再也没有任何application.msgout |
-- 作者:Marcus -- 发布时间:2012/7/31 13:45:25 -- 申明,现在用的还是 V2.75。 不知道是版本问题还是自己的用法有问题。 |
-- 作者:Marcus -- 发布时间:2012/7/31 14:14:23 -- 以下是引用Marcus在2012-7-31 13:39:05的发言: 修正最后一行,预警系统应该还在运行,只是没有任何application.msgout更新
我在预警公式系统里调用函数是这么写的: PositionCount:=GetPosition(\'TEST\',\'IF08\'); SetPosition(\'TEST\',\'IF08\',PositionCount); 结果: 1. application.msgout显示在预警模式下函数GetPosition被频繁调用,调用频率远大于1次每秒,汗! 2. GetPosition输出两个参数sStrategy和sContract值分别为1,2 3. SetPosition没有任何输出,正确的说法是整个预警系统在调用SetPosition后停止了,再也没有任何application.msgout |
-- 作者:admin -- 发布时间:2012/7/31 15:49:54 -- PositionCount:=GetPosition(\'TEST\',\'IF08\'); 初步看了一下,是有问题的,因为金字塔的自定义函数只能传输数字,是不能传输字符串的 |
-- 作者:Marcus -- 发布时间:2012/8/1 10:02:39 -- 今天早上在V2.9上试验了一下,调用GetPosition(10,10000) 发现第一个参数的确被传进去了,是10,第二个参数丢失,也就sContract被设置为空。??? 不明白怎么会这样的 另外,依旧无法SetPosition,文件也创建不了。 |
-- 作者:Marcus -- 发布时间:2012/8/1 11:11:53 -- 我的本意是只想在后台预警模式下记录当前策略的逻辑仓位,哪知道实现过程会这么波折。 用过全局变量,失败;用文件记录,失败;用自定义函数,参数不对又失败; 不了解内部运行框架无异于盲人摸象,不停地试错。 有几个问题: 1. 金字塔的后台预警,每个周期是否逐K线从头到尾运行一次?如果为真,我调用EXTGBDATA/SETGBDATA也是不是从头到尾读/写,相当于策略每个周期运行一次,然后最后才确定当前仓位? 2. 在提前N秒运行的模式下,N秒中每一秒都会逐K线头到尾运行一次么?如果信号不稳定,某秒开仓某秒平仓,金字塔怎么判断并最后选用那个周期的信号?注意如果每秒运行一次,每个周期逻辑仓位可能被反复擦写N次!这样很容易导致逻辑混乱。 |