以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  请帮忙看看问题出在什么地方  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=90115)

--  作者:chendong
--  发布时间:2016/1/15 12:27:27
--  请帮忙看看问题出在什么地方
公式:DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA  := EMA(DIFF,9);
MACD1 := 2*(DIFF-DEA);

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);

KDJbuyCOND:=count(cross(k,d),10)>=1;
MACDbuyCOND:=count(cross(DIFF,DEA),3)>=1 and MACD1>0;

KDJsellCOND:=count(cross(d,k),10)>=1;
MACDsellCOND:=count(cross(DEA,DIFF),3)>=1 and MACD1<0;

KaiDuoCond:KDJbuyCOND and MACDbuyCOND;
KaiKongCond:KDJsellCOND and MACDsellCOND;


macd30:=MACD1;
macd30b:=REF(macd30,1);
macd30b2:=REF(macd30,2);

PingDuoCond:macd30b>macd30 and macd30b2>macd30b;
PingKongCond:macd30b<macd30 and macd30b2<macd30b;


Sub MARKETDATA_ReportNotify(ReportData) \'行情触发时的操作
NewPrice = ReportData.NewPrice \'application.MsgOut cdate(time) & (NewPrice>(TraderForm_adjustPrice.value-5) and NewPrice<(TraderForm_adjustPrice.value+5)) NewBuyPrice=ReportData.BuyPrice1 NewSellPrice=ReportData.SellPrice1 \'stkLable=ReportData.Label Set Formula=marketdata.STKINDI(Tcode,Tmarket,"TradeCond",0,17) KaiDuoCond=Formula.GetBufData("KaiDuoCond",Formula.DataSize-1) PingDuoCond=Formula.GetBufData("PingDuoCond",Formula.DataSize-1) KaiKongCond=Formula.GetBufData("KaiKongCond",Formula.DataSize-1) PingKongCond=Formula.GetBufData("PingKongCond",Formula.DataSize-1) 
 application.MsgOut "KaiDuoCond:" & KaiDuoCond 
 application.MsgOut "KaiKongCond:" & KaiKongCond 
 application.MsgOut "PingDuoCond:" & PingDuoCond 
application.MsgOut "PingKongCond:" & PingKongCond 
 set Formula=nothing
后面还有一些代码,在此省略
End Sub

问题:打印的PingKongCond的值与公式在图表中显示的值不一样,比如,公式的值已经变成0,在VBA中打印的值还是1,为何呢?



--  作者:chendong
--  发布时间:2016/1/15 12:30:37
--  
是否是行情触发的时间间隔太短导致MARKETDATA_ReportNotify事件中的代码未能执行到?

那,一般情况要达到在MARKETDATA_ReportNotify事件中的代码能确定完全地执行,该如何处理呢?

--  作者:admin
--  发布时间:2016/1/15 13:31:02
--  

你贴的代码没写明PingKongCond这个变量你是如何取得的


--  作者:chendong
--  发布时间:2016/1/15 15:39:11
--  
PingKongCond=Formula.GetBufData("PingKongCond",Formula.DataSize-1) 
--  作者:admin
--  发布时间:2016/1/15 15:55:28
--  
Formula 对象你是怎么获取的
--  作者:chendong
--  发布时间:2016/1/15 21:28:30
--  
Set Formula=marketdata.STKINDI(Tcode,Tmarket,"TradeCond",0,17) 
--  作者:chendong
--  发布时间:2016/1/15 21:29:15
--  
公式贴过来时,有点乱,没有断行



--  作者:chendong
--  发布时间:2016/1/15 21:33:38
--  
Sub MARKETDATA_ReportNotify(ReportData) \'行情触发时的操作

Set Formula=marketdata.STKINDI(Tcode,Tmarket,"TradeCond",0,17) 
KaiDuoCond=Formula.GetBufData("KaiDuoCond",Formula.DataSize-1) 
PingDuoCond=Formula.GetBufData("PingDuoCond",Formula.DataSize-1) 
KaiKongCond=Formula.GetBufData("KaiKongCond",Formula.DataSize-1) 
PingKongCond=Formula.GetBufData("PingKongCond",Formula.DataSize-1) 

application.MsgOut "KaiDuoCond:" & KaiDuoCond 

application.MsgOut "KaiKongCond:" & KaiKongCond 

application.MsgOut "PingDuoCond:" & PingDuoCond 

application.MsgOut "PingKongCond:" & PingKongCond 

set Formula=nothing

后面还有一些代码,在此省略
End Sub

Tcode,Tmarket是已经赋值的全局变量。值可以取出来,只是不会同步,公式中的值已经变化好久了,可VBA中打印出来,且没变


--  作者:admin
--  发布时间:2016/1/15 22:31:29
--  

你这么调用Set Formula=marketdata.STKINDI(Tcode,Tmarket,"TradeCond",0,17)

不能保证你的参数和数据和图表上是严格一致的,导致结果不同也算正常,你试试直接取图表上的Formula对象看看

 

Set Grid = Technic.GetGridByName("Main")
Set Formula = Grid.GetFormulaByIndex(1)

 

框架和窗口根据你自己的实际情况修改


--  作者:chendong
--  发布时间:2016/1/18 14:23:39
--  
我把Set Formula=marketdata.STKINDI(Tcode,Tmarket,"TradeCond",0,17)放在一个定时器中运行,取到的值就是一致的