以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 表示连接成功
相关范例 Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType) |
-- 作者: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事件。
|