以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  请问,VBS如何得知发生断网或服务器断线的情况?  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=138565)

--  作者:emtfemtf
--  发布时间:2016/8/24 19:12:27
--  请问,VBS如何得知发生断网或服务器断线的情况?
请问,VBS如何得知发生断网或服务器断线的情况?
发生断网或服务器断线时,金字塔软件立刻就会得知情况并报警重新连接网络,那么我的在里面编写的VBS程序如何能收到发生断网或服务器断线的消息?从而做出相应的操作。

--  作者:yukizzc
--  发布时间:2016/8/25 9:13:38
--  

这个没法做的,都断网了你让软件怎么发出信号呢,何况重新连接这个。。。

方便的话你直接配合我们的手机监控助手就行了,里面可以直接去监控行情,还有交易账户是否异常

如果出现状况手机端马上就能收到警报


--  作者:王锋
--  发布时间:2016/8/25 9:41:16
--  

 

vba 的Order对象中的 事件同样能收到账户的连接以及断线消息的,我们VBA的教程中没有写,后面会补上

 

Connected       表示连接成功
Disconnected   表示连接失败

 

相关范例

Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
 Application.MsgOut status
End Sub


--  作者:emtfemtf
--  发布时间:2016/8/25 15:52:06
--  
谢谢!
那么,比如网络中断了十几分钟,恢复后,金字塔就会很快的自动下载并显示出来这缺失的十几根K线(假设正打开的是某品种1分钟K线图)。

 我想问的是,如果我用Call MarketData.RegReportNotify("RB10","SQ")注册了一个品种,网络恢复时,当我在Sub MarketData_ReportNotify(ReportData)事件中,收到第一个Tick时,此时缺失的十几根K线的数据金字塔是否已经补充好了?
也就是说,金字塔是先补充缺失的数据,再发出第一个Tick,还是,补数据和发Tick是两个独立的线程,时间上没有先后关系?

之所以问这个问题,是因为我自己的代码维护K线的话,新收到第一个Tick,就认为网络恢复了,这时我会用marketdata.GetHistoryData()或者 Grid.GetHistoryData() 方法读取这缺失的十几根K线,而此时如果金字塔K线数据还没有补好,那我读回来的数据也就有问题。

另外,marketdata.GetHistoryData()或者 Grid.GetHistoryData()哪一个执行快一些?高级教程上说marketdata.GetHistoryData()是读取本地硬盘的数据,如果我只要缺失的十几根K线,还要等金字塔存了盘后,我才从盘里读出来,岂不是很慢?
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

--  作者:王锋
--  发布时间:2016/8/25 16:07:20
--  

断网重连后,是很快就会下载缺失的K线,但是你必须是品种已经加载到图表上的品种才可以,金字塔虽然是全推数据,但是是全推即时数据,历史数据还是需要点播的。没有在图表上加载的品种是不会自动补充缺失数据的。

是先接收到最新一笔的TICK报价,补充数据是随后另外的线程补充的,这个过程视你的缺失数据多少而不同。

 

不清楚你为何非要自己维护K线,如果你希望有个稳定的网络质量,家庭网络这种肯定是不靠谱的,建议你租用云服务器


--  作者:emtfemtf
--  发布时间:2016/8/25 16:27:43
--  
“”云服务器“”我在调研一下。。。

我是想用VBS实现自己的策略,那么策略计算就需要正确的K线数据。读金字塔的K线当然可以,可是marketdata.GetHistoryData()或者 Grid.GetHistoryData()执行起来是不是会都太慢?我不知道。我自己逐个Tick去维护K线当然是最实时最快的。可是,断线恢复后,历史的十几根缺失的K线数据就只好从金字塔中读取,这是,上面的问题就来了。

我看到,application.PostMessage(),有个:查看菜单->刷新    编号是:32883。我是否可以先执行一个这个,强制金字塔刷新一下再读取?

或者我看到Grid对象有个ReInitData 方法:重新初始化数据,再配合上Frame的CalcDataed 事件:当窗格计算完毕数据后发生。然后用 Grid.GetHistoryData()读取,可行吗?


--  作者:王锋
--  发布时间:2016/8/25 17:36:34
--  

当然是Grid.GetHistoryData()更快一些,因为这是从图表上直接读取已经加载计算过的数据,marketdata.GetHistoryData() 这个还需要从新从硬盘加载。作为程序员你应该懂得哦。

不建议你自己维护数据,你就是再怎么快,也没有金字塔直接帮你计算好快的


--  作者:emtfemtf
--  发布时间:2016/8/26 13:41:11
--  
好的。
那就直接从Grid里读取吧。

我试了下,当一个Tick来到时, Sub MarketData_ReportNotify事件、Sub Technic_CalcData(Grid, DataCount)事件和Sub Technic_CalcDataed(Grid)事件的发生顺序。发现是:
第一: Sub MarketData_ReportNotify事件
第二: Sub Technic_CalcData(Grid, DataCount)
第三:Sub Technic_CalcDataed(Grid)事件
由此不难推测,如果发生服务器或者网络故障,数据缺失后,当故障恢复时,新Tick的事件会先于数据补充动作。

那么,我想,对于很多使用图表自动化交易,或者后台自动化交易的人,也许会发生:新Tick导致交易动作,而后续补充的数据回来后,又发现这个交易信号是错误的。
建议金字塔考虑下这个漏洞,毕竟短时的断网和断服务器的情况,对于一般交易者,还是较易发生的。可以设个选项:新数据补齐后再发生新的Tick事件。