以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  tbuyholdingex、tremainqty的变化原理是什么  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=8532)

--  作者:阿火
--  发布时间:2011/10/20 13:49:53
--  tbuyholdingex、tremainqty的变化原理是什么

经过测试发现,

买入开仓后,1手

OrderStatusEx2的Status为"Submitted"和"PreSubmitted" 时,tremainqty(1,\'888888\',stklabel)的值有时候依然为0,按理应该为“1”

OrderStatusEx2的Status为Filled时,tbuyholdingex的值有时候依然为0 ,按理应该为“1”

当然,大部分是同步的

[此贴子已经被作者于2011-10-20 13:50:30编辑过]

--  作者:admin
--  发布时间:2011/10/20 13:57:35
--  
给出日志
--  作者:阿火
--  发布时间:2011/10/20 14:41:32
--  

后台程序,模拟账户800043

程序的动作:涨停价开多1手,16秒后 跌停价卖出平仓,再16秒后 开多,如此循环

检查方法:检查tbuyholdingex(\'800043\',stklabel,1)和 extgbdata(\'kaiping\') 是否一致

 

kaiping的取值来源于OrderStatusEx2

代码如下:

Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
 if filled=1 then
  if kaiping=0 then document.SetExtData "kaiping",1   \'开多,且成交,kaiping置为1
  if kaiping=1 then document.SetExtData "kaiping",0   ’平多,且成交,kaiping置为0

 end if
End Sub

 

后台程序:

if not(islastbar) then exit;
abb:=extgbdata(\'abb\');
buyhold:=tbuyholdingex(\'800043\',stklabel,1);
if buyhold<>extgbdata(\'kaiping\') then debugfile(\'c:\\luntan.txt\',\'no=%.0f\',1);//如果不一致,输出 no=1
if buyhold=0 and abb=16 then begin
 tbuy(1,1,lmt,dynainfo(54),0,\'800043\'),allowrepeat;
 extgbdataset(\'abb\',0);
end

if buyhold>0 and abb=10 then begin
 tsell(1,1,lmt,dynainfo(55),0,\'800043\'),allowrepeat;
 extgbdataset(\'abb\',0); 
end

if abb>16 then extgbdataset(\'abb\',abb-1);
if abb<16 then extgbdataset(\'abb\',abb+1);

 

输出的日志:

2011-10-20 13:38:07.114    no=1
2011-10-20 13:39:57.114    no=1
2011-10-20 13:42:10.114    no=1
2011-10-20 13:42:32.114    no=1
2011-10-20 13:44:44.161    no=1
2011-10-20 13:46:56.161    no=1


--  作者:admin
--  发布时间:2011/10/20 14:43:51
--  

同步时间下单的金字塔日志也提供一下


--  作者:阿火
--  发布时间:2011/10/20 15:03:07
--  

或者这样检测 ,后台每10秒钟开多、平多一直循环

只交易1个品种,只开多,这样 order.Holding2("800043") 为1 就是 持有1手多单,为0就是没有任何持仓

开多成交时,检查order.Holding2是否为1 ,平多成交时,检查order.Holding2是否为0

如果不对,就输出消息。

不知道这样检测是否科学?

 

dim Acc
Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
 if filled=1 then
  if kaiping=0 then acc=1
  if kaiping=1 then acc=0
  if acc<>order.Holding2("800043") then
   application.MsgOut "1"
  end if
 end if
End Sub