设为首页收藏本站

 找回密码
 注册
查看: 2809|回复: 7
打印 上一主题 下一主题

是文档表述错误还是我的理解错误 [复制链接]

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
跳转到指定楼层
1#
发表于 2009-10-22 12:41:56 |只看该作者 |倒序浏览
在A_OpenOrderEntryOrExit函数的描述如下:
说明 返回当前公式应用的帐户下当前商品的某个未成交委托单的开平仓状态。
语法 Integer A_OpenOrderEntryOrExit(Integer nIndex = 0)
参数 nIndex 当日委托单数组的索引值,以1为基值递增。
nIndex = 0 时取最后提交的委托单数据。
备注 返回当前公式应用的帐户下当前商品的某个未成交委托单的开平仓状态,返回值为整型。
该函数返回值可以与Enum_Entry、Enum_Exit等开平仓状态枚举值进行比较,根据类型不同分别处理。
注:不能使用于历史测试,仅适用于交易。  
示例 nCount = A_GetOpenOrderCount();
For i = 1 To nCount
{
nEntryFlag = A_OpenOrderEntryOrExit(i);
If(nEntryFlag == Enum_ExitToday())
...
}

依据函数的参数说明,nIndex:的取值范围应该是 0,1,...,nCount-1。
而不是示例中的For i = 1 To nCount,因此示例应该改为:
For i = 0 To nCount-1
{
nEntryFlag = A_OpenOrderEntryOrExit(i);
If(nEntryFlag == Enum_ExitToday())
...
}

不知我的理解是否正确?

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
2#
发表于 2009-10-22 13:07:04 |只看该作者
文档表述的没有错误
分两种情况
1)最后发的单,标记0
2)计算所有委托单数从1开始标记
示例中不包括最后的委托单

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
3#
发表于 2009-10-22 22:12:19 |只看该作者
(1) 那如果要将所有未成交的委托单统计一遍,是否表述为:
nCount = IIF(AccountDataExist,A_GetOpenOrderCount,0);
For i = 0 To nCount
{
nEntryFlag = A_OpenOrderEntryOrExit(i);
If(nEntryFlag == Enum_ExitToday())
...
}
(2) 如果 nCount 为1,则究竟有几个未成交的委托单?

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
4#
发表于 2009-10-22 22:21:55 |只看该作者
我的程序如下:但日志发现nCount为1,表明有一个未成交委托单(与买入委托实际相符),但记录发现A_OrderFilledLot(i)和A_OpenOrderFilledLot(i)的值均为0,与A_GetOpenOrderCount==1不符,请问是何原因?
我要用 A_OrderFilledLot(i) - A_OpenOrderFilledLot(i)来得到所有未成交委托单的未成交委托手数,是否表述正确?
谢谢版主!

                nCount = IIF(AccountDataExist,A_GetOpenOrderCount,0); //当前未成交的委托单数
                If (nCount>0 && GetGlobalVar(10)>=5) //委托单超过3秒未成交,则撤销所有委托单
                {        //统计所有四种未成交委托的未成交量
                        SetGlobalVar(20,0); //EnterBuy 的未成交量
                        SetGlobalVar(21,0); //EnterSell的未成交量
                        SetGlobalVar(22,0); //ExitBuy  的未成交量
                        SetGlobalVar(23,0); //ExitSell 的未成交量
                        FileAppend("C://MyATM1.Log",TimeToString(CurrentTime)+" nCount: "+Text(nCount));
                        For i = 1 To nCount
                        {        If (A_OpenOrderEntryOrExit(i)==Enum_Entry && A_OpenOrderBuyOrSell(i)==Enum_Buy)
                                {        SetGlobalVar(20,GetGlobalVar(20)+A_OrderFilledLot(i)-A_OpenOrderFilledLot(i));
FileAppend("C://MyATM1.Log",Text(i)+" "+TimeToString(CurrentTime)+" G20");
FileAppend("C://MyATM1.Log",text(A_OrderFilledLot(i))+" G20");
FileAppend("C://MyATM1.Log",text(A_OpenOrderFilledLot(i))+" G20");
FileAppend("C://MyATM1.Log",Text(GetGlobalVar(20))+" GV20");

} //累计未成交量
                                If (A_OpenOrderEntryOrExit(i)==Enum_Entry && A_OpenOrderBuyOrSell(i)==Enum_Sell)
                                {        SetGlobalVar(21,GetGlobalVar(21)+A_OrderFilledLot(i)-A_OpenOrderFilledLot(i));
FileAppend("C://MyATM1.Log",Text(i)+" "+TimeToString(CurrentTime)+" G21");
FileAppend("C://MyATM1.Log",text(A_OrderFilledLot(i))+" G21");
FileAppend("C://MyATM1.Log",text(A_OpenOrderFilledLot(i))+" G21");
FileAppend("C://MyATM1.Log",Text(GetGlobalVar(21))+" GV21");
}
                                If (A_OpenOrderEntryOrExit(i)==Enum_Exit && A_OpenOrderBuyOrSell(i)==Enum_Buy)
                                {        SetGlobalVar(22,GetGlobalVar(22)+A_OrderFilledLot(i)-A_OpenOrderFilledLot(i));
FileAppend("C://MyATM1.Log",Text(i)+" "+TimeToString(CurrentTime)+" G22");
FileAppend("C://MyATM1.Log",text(A_OrderFilledLot(i))+" G22");
FileAppend("C://MyATM1.Log",text(A_OpenOrderFilledLot(i))+" G22");
FileAppend("C://MyATM1.Log",Text(GetGlobalVar(22))+" G22");
}
                                If (A_OpenOrderEntryOrExit(i)==Enum_Exit && A_OpenOrderBuyOrSell(i)==Enum_Sell)
                                {        SetGlobalVar(23,GetGlobalVar(23)+A_OrderFilledLot(i)-A_OpenOrderFilledLot(i));
FileAppend("C://MyATM1.Log",Text(i)+" "+TimeToString(CurrentTime)+" G23");
FileAppend("C://MyATM1.Log",text(A_OrderFilledLot(i))+" G22");
FileAppend("C://MyATM1.Log",text(A_OpenOrderFilledLot(i))+" G22");
FileAppend("C://MyATM1.Log",Text(GetGlobalVar(23))+" G22");
                                }
                        }
                        A_DeleteOrder(); //撤销所有委托单
                        SetGlobalVar(10,0); //Tick1计数回0,需等待5个Tick,使撤单指令完成后方可重新委托

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
5#
发表于 2009-10-23 00:03:00 |只看该作者
(3)如果A_GetOpenOrderCount的值为N/A ,那 If (A_GetOpenOrderCount>0)为T还是F?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
6#
发表于 2009-10-23 11:04:01 |只看该作者
1) nCount = IIF(AccountDataExist,A_GetOpenOrderCount,0);
For i = 1 To nCount      // 如果用0时,就直接取得最后一个委托单
{
nEntryFlag = A_OpenOrderEntryOrExit(i);
If(nEntryFlag == Enum_ExitToday())
...
}

2)nCount 为1只有一个
3)A_GetOpenOrderCount的值为N/A,if结果是F

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
7#
发表于 2009-10-23 23:10:03 |只看该作者
谢谢版主解答!
今天我测试的结果还是nCount==1,表明有一个未撤销的委托单(是我有意挂很低的买多单),但实测
A_OrderFilledLot(1)和A_OpenOrderFilledLot(1)的值均为0,我没有办法了。参数改为0,取最后一个委托单两个函数的值还是0,抓狂!
按照文档说明A_OrderFilledLot返回的应该是未成交委托单的委托量,而A_OpenOrderFilledLot应该是部分成交的成交量。对未成交的委托单,这两个值不应该均为0!!
有没有函数能直接返回未成交委托的未成交量?
再次麻烦,谢谢!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
8#
发表于 2009-10-28 11:37:05 |只看该作者
A_OpenOrderLot() - A_OpenOrderFilledLot()   
未成交委托单的委托数量 - 未成交委托单的成交数量
你试一下,应该可以,主要是两个函数所对的委托单索引号要对的上就可以了

使用道具 举报

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

bottom

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

GMT+8, 2024-5-7 20:54

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部