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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 能够自定义函数再调用么

   

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


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

主题:能够自定义函数再调用么

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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
能够自定义函数再调用么  发帖心情 Post By:2012/7/31 0:38:13 [显示全部帖子]

文档没看完,不好意思直接问各位大虾了。

金字塔自动向QQ发送消息实例,公式可以加载VB函数,我自己VBS写了一个
Function GetPosition(sStrategy,sContract)
调试能通过

现在在公式系统里想调用函数 GetPosition,
PositionCount:=GetPosition('TEST','IF08');

编译没通过这句,是不是要先注册?
怎么注册呢?

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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By: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


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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By:2012/7/31 13:45:25 [显示全部帖子]

 申明,现在用的还是 V2.75。
不知道是版本问题还是自己的用法有问题。

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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By:2012/7/31 14:14:23 [显示全部帖子]

以下是引用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

修正最后一行,预警系统应该还在运行,只是没有任何application.msgout更新

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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By:2012/8/1 10:02:39 [显示全部帖子]

 今天早上在V2.9上试验了一下,调用GetPosition(10,10000)
发现第一个参数的确被传进去了,是10,第二个参数丢失,也就sContract被设置为空。???
不明白怎么会这样的
另外,依旧无法SetPosition,文件也创建不了。


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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By:2012/8/1 11:11:53 [显示全部帖子]

我的本意是只想在后台预警模式下记录当前策略的逻辑仓位,哪知道实现过程会这么波折。
用过全局变量,失败;用文件记录,失败;用自定义函数,参数不对又失败;

不了解内部运行框架无异于盲人摸象,不停地试错。

有几个问题:
1. 金字塔的后台预警,每个周期是否逐K线从头到尾运行一次?如果为真,我调用EXTGBDATA/SETGBDATA也是不是从头到尾读/写,相当于策略每个周期运行一次,然后最后才确定当前仓位?
2. 在提前N秒运行的模式下,N秒中每一秒都会逐K线头到尾运行一次么?如果信号不稳定,某秒开仓某秒平仓,金字塔怎么判断并最后选用那个周期的信号?注意如果每秒运行一次,每个周期逻辑仓位可能被反复擦写N次!这样很容易导致逻辑混乱。

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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By:2012/8/1 16:20:17 [显示全部帖子]

谢谢指正!
 我现在用V2.90,默认的逐K线运行模式,估计后者是主要差别吧。

逐K线运行+仅刷最后一根K线,跟序列模式有啥区别?

我心里有个疑问,就是我要用到“提前N秒下单”的方法,同时在预警选项里选择了“走完一根K线以后”,那么序列模式从逻辑上理解可能有问题,不知道在这样的情况下是否要选择   逐K线运行+仅刷最后一根K线   这种模式呢?
[此贴子已经被作者于2012-8-1 16:25:34编辑过]

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


加好友 发短信
等级:论坛游民 帖子:216 积分:1283 威望:0 精华:0 注册:2009/8/30 14:14:47
  发帖心情 Post By:2012/8/1 22:17:17 [显示全部帖子]

 谢谢版主,调试已经通过了,可以在序列模式下调试通过,明天再做实盘预警测试。

不过奇怪的是,在逐K线模式下SetPosition没被成功调用,因为没有任何调试语句输出;
作为对比,同样在在逐K线模式下GetPosition工作正常并输出调试语句。

 回到顶部