设为首页收藏本站

 找回密码
 注册
查看: 4098|回复: 6

请教成交记录查询问题 [复制链接]

Rank: 9Rank: 9Rank: 9

精华
3
UID
2459
积分
14058
帖子
179
主题
19
阅读权限
150
注册时间
2008-9-26
最后登录
2015-12-3
发表于 2010-2-22 15:49:08 |显示全部楼层
初衷是:一个账户内实现分品种资金管理,每个品种使用单独的资金,每天需要根据各品种成交记录计算各自的盈亏,以作为该品种下次开仓头寸大小的计算依据;
但由于以下代码无法调试成功,工作进行不下去了,请各位高手帮忙看看出啥问题了?
以下代码功能:通过委托单查询成交单类型、成交数量、价格等
做单次查询时(不用for循环语句,只查询某次委托单)是可以输出文本的,但使用for语句做查询时不能正确输出文本信息,连Commentary("nCount:"+Text(nCount));也无法显示信息
  1. Vars
  2.     Numeric i;
  3.         Numeric nCount;
  4.         Numeric nStatus;
  5.         Numeric nBuyOrSell;
  6.         Numeric nEntryFlag;
  7.         Numeric OrderFilledPrice;
  8.         Numeric OrderFilledLot;
  9.         Numeric j(0);//买开序号
  10.         Numeric m(0);//买平序号
  11.         Numeric n(0);//卖开序号
  12.         Numeric p(0);//买平序号
  13.         String myFileName;
  14.         Numeric tmp1;
  15. Begin
  16.     tmp1=GetGlobalVar(0);
  17.         If (BarStatus==0 And tmp1==InvalidNumeric) tmp1=0;
  18.     If (A_AccountID=="") Return;
  19.     myFileName="C:\\tb_"+FormulaName+"_"+DateToString(date)+".txt";
  20.     nCount = A_GetOrderCount();
  21.         Commentary("nCount:"+Text(nCount));
  22. //        If (tmp1==0 And nCount>0)
  23.         If (nCount>0)
  24.         {
  25.             For i = 1 To nCount
  26.         {
  27.             nStatus = A_OrderStatus(i);
  28.                     nBuyOrSell = A_OrderBuyOrSell(i);
  29.                     nEntryFlag = A_OrderEntryOrExit(i);
  30.                     OrderFilledLot = A_OrderFilledLot(i);
  31.             OrderFilledPrice = A_OrderFilledPrice(i);
  32.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Buy And nEntryFlag==Enum_Entry)
  33.                     {
  34.                         j=j+1;
  35.                             FileAppend(myFileName,"第"+Text(j)+"笔买开单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  36.                     }
  37.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Sell And nEntryFlag==Enum_ExitToday)
  38.                     {
  39.                         m=m+1;
  40.                             FileAppend(myFileName,"第"+Text(m)+"笔卖平今单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  41.                     }
  42.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Sell And nEntryFlag==Enum_Entry)
  43.                     {
  44.                         n=n+1;
  45.                             FileAppend(myFileName,"第"+Text(n)+"笔卖开单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  46.                     }
  47.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Buy And nEntryFlag==Enum_ExitToday)
  48.                     {
  49.                         p=p+1;
  50.                             FileAppend(myFileName,"第"+Text(j)+"笔买平今单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  51.                     }
  52.                 }
  53.                 tmp1=1;
  54.         }
  55.         SetGlobalVar(0,tmp1);
  56.         Commentary("tmp1:"+Text(tmp1));
  57. End
复制代码

Rank: 9Rank: 9Rank: 9

精华
3
UID
2459
积分
14058
帖子
179
主题
19
阅读权限
150
注册时间
2008-9-26
最后登录
2015-12-3
发表于 2010-2-22 17:06:40 |显示全部楼层
NND,终于调试通过了,新代码如下,供各位朋友参考
  1. Vars
  2.     Numeric i;
  3.         Numeric nCount;
  4.         Numeric nStatus;
  5.         Numeric nBuyOrSell;
  6.         Numeric nEntryFlag;
  7.         Numeric OrderFilledPrice;
  8.         Numeric OrderFilledLot;
  9.         Numeric j(0);//买开序号
  10.         Numeric m(0);//买平序号
  11.         Numeric n(0);//卖开序号
  12.         Numeric p(0);//买平序号
  13.         String myFileName;
  14.         Numeric tmp1;
  15. Begin
  16.     tmp1=GetGlobalVar(0);
  17.         If (BarStatus==0 And tmp1==InvalidNumeric) tmp1=0;
  18. If (BarStatus==2 And A_AccountID!="")
  19. {
  20.     myFileName="C:\\tb_"+FormulaName+"_"+DateToString(date)+".txt";
  21.     nCount = A_GetOrderCount();
  22.         Commentary("nCount:"+Text(nCount));
  23.     FileAppend(myFileName,"If (nCount>0)前");
  24.         If (tmp1==0 And nCount>0)
  25.         {
  26.         FileAppend(myFileName,"for前");
  27.             For i = 1 To nCount
  28.         {
  29.                         FileAppend(myFileName,"第"+Text(i)+"次循环"+"for第一句");
  30.             nStatus = A_OrderStatus(i);
  31.                     nBuyOrSell = A_OrderBuyOrSell(i);
  32.                     nEntryFlag = A_OrderEntryOrExit(i);
  33.                     OrderFilledLot = A_OrderFilledLot(i);
  34.             OrderFilledPrice = A_OrderFilledPrice(i);
  35.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Buy And nEntryFlag==Enum_Entry)
  36.                     {
  37.                         j=j+1;
  38.                             FileAppend(myFileName,"第"+Text(j)+"笔买开单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  39.                     }
  40.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Sell And nEntryFlag==Enum_ExitToday)
  41.                     {
  42.                         m=m+1;
  43.                             FileAppend(myFileName,"第"+Text(m)+"笔卖平今单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  44.                     }
  45.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Sell And nEntryFlag==Enum_Entry)
  46.                     {
  47.                         n=n+1;
  48.                             FileAppend(myFileName,"第"+Text(n)+"笔卖开单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  49.                     }
  50.                     If (nStatus==Enum_Filled And nBuyOrSell==Enum_Buy And nEntryFlag==Enum_ExitToday)
  51.                     {
  52.                         p=p+1;
  53.                             FileAppend(myFileName,"第"+Text(j)+"笔买平今单"+" OrderFilledLot:"+Text(OrderFilledLot)+" OrderFilledPrice:"+Text(OrderFilledPrice));
  54.                     }
  55.             FileAppend(myFileName,"第"+Text(i)+"次循环"+"for最后一句");
  56.                         tmp1=1;
  57.                 }
  58.         FileAppend(myFileName,"for后");
  59.         }
  60. }
  61.         SetGlobalVar(0,tmp1);
  62.         Commentary("tmp1:"+Text(tmp1));
  63. End
复制代码

使用道具 举报

Rank: 9Rank: 9Rank: 9

精华
3
UID
2459
积分
14058
帖子
179
主题
19
阅读权限
150
注册时间
2008-9-26
最后登录
2015-12-3
发表于 2010-2-22 17:13:56 |显示全部楼层
原代码中,刚插入指令还没有启动自动交易时,nCount = A_GetOrderCount();返回2147483647,造成for不断循环,形同死循环
新代码用If (BarStatus==2 And A_AccountID!="")控制才能解决这个问题

[ 本帖最后由 hyjok 于 2010-2-22 17:15 编辑 ]

使用道具 举报

Rank: 9Rank: 9Rank: 9

精华
3
UID
2459
积分
14058
帖子
179
主题
19
阅读权限
150
注册时间
2008-9-26
最后登录
2015-12-3
发表于 2010-2-22 22:42:41 |显示全部楼层
之前没弄明白像A_GetOrderCount()这些integer类型变量返回值的无效值InvalidInteger就等于2147483647,还以为是N/A
原代码If (nCount>0)改为If (nCount>0 And nCount!=InvalidInteger)后,调试正常了

使用道具 举报

Rank: 9Rank: 9Rank: 9

精华
0
UID
4790
积分
16241
帖子
401
主题
73
阅读权限
150
注册时间
2009-7-5
最后登录
2020-1-2
发表于 2010-2-23 08:23:03 |显示全部楼层
顶,学习了!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
237756
积分
20682
帖子
120
主题
31
阅读权限
200
注册时间
2016-7-26
最后登录
2020-3-7
发表于 2016-9-20 09:55:56 |显示全部楼层
请教这个代码。如何使用。是单独生成分析指标,还是查到策略里使用。。。学习下。谢谢!

使用道具 举报

Rank: 1

精华
0
UID
282011
积分
1
帖子
1
主题
0
阅读权限
10
注册时间
2019-7-27
最后登录
2019-8-5
发表于 2019-7-27 22:43:56 |显示全部楼层
学习

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-3-29 18:57

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部