因为我发现在公式编辑器里直接使用sendmail函数真的好卡好卡 所以我想把我需要的信息都写入到具有发邮件功能的自定义函数里面,然后再公式里直接执行。
因为刚开始接触金字塔,以前也没学过VBA,所以对金字塔的对象的一些用法还不是很熟悉 麻烦斑竹帮我看看
Function jf_mail(Formula,n)
If Formula.WorkMode = 0 Then
Exit Function
End If
jf_mail=0
Set jfmainGrid = GetMainGrid ’获得当前指标的主图对象
symbol=jfmainGrid.StockName ’获取主图对象的品种名称
prperio=jfmainGrid.CycType ’获得主图当前周期属性 并且在下面的select case函数里得到实际的周期数值
Select Case prperio
Case 0
perio=1
Case 1
perio=5
Case 2
perio=15
Case 3
perio=30
Case 4
perio=60
Case 5
perio=240
Case Else
perio=0
End Select
Set jfHistory = Grid.GetHistoryData() ’获取当前指标窗体对象
now_j=jfHistory.j(jfHistory .Count-1) ’获取当前kdj的 j 值
if jfHistory.j(jfHistory .Count-2)>=now_j ’对比j值 看是上升还是下降,上升则赋值con1字符到kdj_dk,下降则赋值kdj_dk为con2
Then kdj_dk="con1"
else kdj_dk="con2"
mailcont= symbol + "M" + prperio + " KDJ." + kdj_dk + "." + now_j ’将获取到的数值都加起来赋值给mailcont
’下面是发邮件的部分
Set smtpmail=CreateObject("jfmail.smtpmail")
smtpmail.sendername="111"
smtpmail.senderaddress="111@126.com"
smtpmail.subject="预警邮件"'
Call smtpmail.addreceiver("1","111@126.com") '前面第一个参数不知道是什么
Call smtpmail.addtextcontent(mailcont)
Call smtpmail.sender("smtp.126.com","111@126.com","111")
End Function
想确认的是
1 获得主窗体的品种名,当前周期, 获得指标窗口(假设是KDJ指标)的J值并对比与前一根k对应的J值 方法是否正确,如果不对该怎么写
2 发邮件就这样子写就可以了吗
[此贴子已经被作者于2016-7-7 1:23:59编辑过]
我的目的是在公式里的某个条件成立的时候执行这个函数,并且让这个函数里有指标和当前品种的几个信息
没反应、、、、
Function jfma(Formula,n)
jfma=0
d=0
MsgBox d
End Function
新建了这个一个自定义函数
然后我在公式里写
aaa:if(ref(c,2)!=ref(c,1),JFMA(0),0);
这样子也没反应
自己调试一下,看看到底这个自定义函数被你的PEL公式调用了没有
在试啊, 我不是重新写了4楼的这样子的自定义函数嘛,就是想一步一步来边调边写, 只可惜直接倒在起跑线上了,一个messagebox都弹不出来
[此贴子已经被作者于2016-7-7 11:23:53编辑过]
我是发现了 公式完全就没有调用自定义函数的感觉
Function zhouq(Formula,n)
d=3
zhouq=d
End Function
我都写成这样子了,但是公式里得不到返回值
晕死 好像又可以了, 我试了下调用自带的自定义函数那个ma,调用完后 再调用我写的 就出来了 也弹窗了
今天总算有点成果
Set jfmainGrid = Formula.ParentGrid 这才是获取当前指标的主图对象的方法
now_j = Formula.GetBufData("j",formula.DataSize-1) 这是获取当前指标某变量值的方法
Set smtpmail=CreateObject("WWSCommon.SmtpMail") 还有就是邮件对象中接口写错了