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


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

   

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


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

主题:VB自定义函数问题

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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/4/29 11:21:10 [显示全部帖子]

逐K线模式下,P1参数不是序列数组,而是一个单值变量,你这么用所以会报错。



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/4/29 12:33:33 [显示全部帖子]

给你做个计算MA均线的例子,CLOSE参数是要计算的均线数据,N为周期

在PEL语言下使用范例:

ddd:cu_ma3(close,5);

 

下面是VBA代码

Dim data '创建一个外部的全局变量
'创建Array外部对象,将对象实例置变量data中, 用来暂存收盘价,计算均价
Set data = CreateObject("Stock.Array")

Function CU_MA3(Formula,CLOSE,N)
    '系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
   
    '第一个数据清空数组进行初始化
    If Formula.IndexData = 0 Then
     data.RemoveAll
    End if
   
    data.AddBack(Close) '添加数组数据
    If data.Count > N Then '如果数组数据大于5个就删除第一个,保证数组只有5个大小
        data.Removeat(0)
    End If

    CU_MA3=data.Average

End Function



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/4/29 13:32:29 [显示全部帖子]

此外提醒,不要在逐K线仅刷最后K线的模式下使用,因为该模式是最后K线才调用该自定义函数一次,会导致计算出错,仅刷最后K线模式算法需要做特殊更改才行


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/4/29 15:10:57 [显示全部帖子]

编程需要一定的逻辑思维,你的问题该这样解决

 

Function CrossUnder(Formula , P1 , P2, GETTYPE)

 

Array_P1.AddBack(P1)

Array_P2.AddBack(P2)

 

IF GETTYPE = 0 THEN

'处理上穿判断

END IF

 

IF GETTYPE = 1 THEN

'处理下破判断

END IF



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/4/29 20:27:20 [显示全部帖子]

 

这种情况你不会使用2个不同的自定义函数? 里面将数组也分别使用2个分别去统计不就行了?



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部