在金字塔里面调用就是在VBA底下输入
Sub Test()
Dim yinyong '创建一个变量
yinyong = CreateObject("zyyh.tianxiasan")
MsgBox(yinyong.ceshi(1, 2))
End Sub
在调用宏里面输入 Test,就好了
这里 如果申明的是一个对象,那么既可以放入 界面 又可以放入线程,还可以放入结构
如果是多个对象,就不用放入线程,但是同时也不可以放入界面,可以设置界面为共享 那样就不再为金字塔内部创建 窗口麻烦了。所有管理手段全部在自己编写的界面下操作,包括开平的操作
在金字塔里面 需要用到的 一些东西 我列出来下
'定时器部分
Sub Application_VBAEnd()'VBA停止事件
Call Application.KillTimer(1)'杀死定时器
End Sub
Sub Application_VBAStart()
Call Application.SetTimer(1, 60000)'启动定时器,并且设置定时器每隔60秒运行一次
End Sub
Sub Application_Timer(ByVal ID)
If ID = 1 Then
'定时器内部操作代码填写处
End If
End Sub
'交易事件部分
Sub Order_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
'具体看参数VBA事件参数 Order对象的事件
End Sub
'数据传输部分,此处是个模块,具体的要对应自己的DLL内容,这里写出来 只是看下该如何写传输模块
Sub ChuanRuShuJu(BanTu,PinZhong,DaZhouQiXuHao,DaZhouQiCount,ZhongZhouQiXuHao,ZhongZhouQiCount,XiaoZhouQiXuHao,XiaoZhouQiCount)
'Call TiShi("开始执行第四步")
'Call TiShi("开始执行第四步的第一项")
Dim Zhou,Zhou_MACD,Ri,Ri_MACD,Shi,Shi_MACD
'处理大周期数据部分
Set Zhou = marketdata.GetHistoryData(pinzhong, bantu, DaZhouQiXuHao) '取M09连续的周线数据
Set Zhou_MACD = marketdata.StkindiByData("MACD(26,12,9)", Zhou)
'Set Zhou_junxian = marketdata.StkindiByData("EXPMA(5,10,20,60,90,120,250,360,4)", Zhou)
If Zhou.Count>= DaZhouQiCount Then'如果数据充足,则载入最新数据,并且限定数据量
For a = Zhou.Count -DaZhouQiCount To Zhou.Count - 1
'Call zyyh.add_Zhou(a, Zhou.Date(a), Zhou.High(a), Zhou.Low(a), Zhou.Open(a), Zhou.Close(a), Zhou_MACD.GetBufData("MACD", a), Zhou_MACD.GetBufData("DIFF", a), Zhou_junxian.GetBufData("M1", a), Zhou_junxian.GetBufData("M2", a), DaZhouQiXuHao)
Call zyyh.add_Zhou(Zhou.Date(a), Zhou.High(a), Zhou.Low(a), Zhou.Open(a), Zhou.Close(a), Zhou_MACD.GetBufData("MACD", a), Zhou_MACD.GetBufData("DIFF", a), Zhou_MACD.GetBufData("DEA", a), DaZhouQiXuHao)
Next
Else'如果数据不足,则载入最新的所有数据
For a = 0 To Zhou.Count - 1
'Call zyyh.add_Zhou(a, Zhou.Date(a), Zhou.High(a), Zhou.Low(a), Zhou.Open(a), Zhou.Close(a), Zhou_MACD.GetBufData("MACD", a), Zhou_MACD.GetBufData("DIFF", a), Zhou_junxian.GetBufData("M1", a), Zhou_junxian.GetBufData("M2", a), DaZhouQiXuHao)
Call zyyh.add_Zhou(Zhou.Date(a), Zhou.High(a), Zhou.Low(a), Zhou.Open(a), Zhou.Close(a), Zhou_MACD.GetBufData("MACD", a), Zhou_MACD.GetBufData("DIFF", a), Zhou_MACD.GetBufData("DEA", a), DaZhouQiXuHao)
Next
End If
'Call TiShi("开始执行第四步的第二项,总数据量:" & Zhou.Count )
Set Zhou=NoThing
Set Zhou_MACD =NoThing
'处理中周期数据部分
Set Ri = marketdata.GetHistoryData(pinzhong, bantu, ZhongZhouQiXuHao)
Set Ri_MACD = marketdata.StkindiByData("MACD(26,12,9)", Ri)
'Set Ri_junxian = marketdata.StkindiByData("EXPMA(5,10,20,60,90,120,250,360,4)", Ri)
If Ri.Count>= ZhongZhouQiCount Then'如果数据充足,则载入最新数据,并且限定数据量
For a = Ri.Count -ZhongZhouQiCount To Ri.Count - 1
'Call zyyh.add_Ri(a, Ri.Date(a), Ri.High(a), Ri.Low(a), Ri.Open(a), Ri.Close(a), Ri_MACD.GetBufData("MACD", a), Ri_MACD.GetBufData("DIFF", a), Ri_junxian.GetBufData("M1", a), Ri_junxian.GetBufData("M2", a), ZhongZhouQiXuHao)
Call zyyh.add_Ri(Ri.Date(a), Ri.High(a), Ri.Low(a), Ri.Open(a), Ri.Close(a), Ri_MACD.GetBufData("MACD", a), Ri_MACD.GetBufData("DIFF", a), Ri_MACD.GetBufData("DEA", a), ZhongZhouQiXuHao)
Next
Else'如果数据不足,则载入最新的所有数据
For a = 0 To Ri.Count - 1
'Call zyyh.add_Ri(a, Ri.Date(a), Ri.High(a), Ri.Low(a), Ri.Open(a), Ri.Close(a), Ri_MACD.GetBufData("MACD", a), Ri_MACD.GetBufData("DIFF", a), Ri_junxian.GetBufData("M1", a), Ri_junxian.GetBufData("M2", a), ZhongZhouQiXuHao)
Call zyyh.add_Ri(Ri.Date(a), Ri.High(a), Ri.Low(a), Ri.Open(a), Ri.Close(a), Ri_MACD.GetBufData("MACD", a), Ri_MACD.GetBufData("DIFF", a), Ri_MACD.GetBufData("DEA", a), ZhongZhouQiXuHao)
Next
End If
'Call TiShi("开始执行第四步的第三项,总数据量:" & Ri.Count )
Set Ri=NoThing
Set Ri_MACD =NoThing
'处理小周期数据部分
Set Shi = marketdata.GetHistoryData(pinzhong, bantu, XiaoZhouQiXuHao)
Set Shi_MACD = marketdata.StkindiByData("MACD(26,12,9)", Shi)
'Set Shi_junxian = marketdata.StkindiByData("EXPMA(5,10,20,60,90,120,250,360,4)", Shi)
If Shi.Count>= XiaoZhouQiCount Then'如果数据充足,则载入最新数据,并且限定数据量
For a = Shi.Count -XiaoZhouQiCount To Shi.Count - 1
'Call zyyh.add_Shi(a, Shi.Date(a), Shi.High(a), Shi.Low(a), Shi.Open(a), Shi.Close(a), Shi_MACD.GetBufData("MACD", a), Shi_MACD.GetBufData("DIFF", a), Shi_junxian.GetBufData("M1", a), Shi_junxian.GetBufData("M2", a),XiaoZhouQiXuHao)
Call zyyh.add_Shi(Shi.Date(a), Shi.High(a), Shi.Low(a), Shi.Open(a), Shi.Close(a), Shi_MACD.GetBufData("MACD", a), Shi_MACD.GetBufData("DIFF", a), Shi_MACD.GetBufData("DEA", a),XiaoZhouQiXuHao)
Next
Else'如果数据不足,则载入最新的所有数据
For a = 0 To Shi.Count - 1
'Call zyyh.add_Shi(a, Shi.Date(a), Shi.High(a), Shi.Low(a), Shi.Open(a), Shi.Close(a), Shi_MACD.GetBufData("MACD", a), Shi_MACD.GetBufData("DIFF", a), Shi_junxian.GetBufData("M1", a), Shi_junxian.GetBufData("M2", a),XiaoZhouQiXuHao)
Call zyyh.add_Shi(Shi.Date(a), Shi.High(a), Shi.Low(a), Shi.Open(a), Shi.Close(a), Shi_MACD.GetBufData("MACD", a), Shi_MACD.GetBufData("DIFF", a), Shi_MACD.GetBufData("DEA", a),XiaoZhouQiXuHao)
Next
End If
'Call TiShi("开始执行第四步的第四项,总数据量:" & Shi.Count)
Set Shi=NoThing
Set Shi_MACD =NoThing
'Call TiShi("结束执行第四步")
End Sub
在VB.NET里面设置对象线程 就跟普通的一模一样,大数据处理才用到这个,小数据计算就不需要
特别 特别注意,VBS不接收结构处理,所以啊,传递过来的结构都不接受,譬如在VB.NET定义结构为
Public Structure 结构_计算
Dim 序号 As Int32
End Structure
在VB.NET内部可以传输 这个结构,但是在VBS里面,这个结构就传输不出来.反正我自己试了很多遍 都没传输出来,
但是可以设置Property的模式,这样就可以设置,譬如底下设置对象属性就是这样的,不允许有Call
zyyh.PingDuoZhuangTai(BanTu, PinZhong,AccountID)=True'设置平多状态为True
zyyh.KaiDuoShuLiang(BanTu, PinZhong,AccountID)=0'设置开多数量为0
读取属性就是这样的
KK=zyyh.PingKongZhuangTai(JiaoYiBanTu, JiaoYiPinZhong, AccountID)'读取平空状态赋值给KK
如果计算数据太大,就需要用线程,涉及到多线程的异步和同步,如果计算数据不是太大,个人建议不要去搞,需要的知识有点多
这次如果还是看不了图片的话,不管球,当自己没写过的,反正也只是分享