- 精华
- 0
- 在线时间
- 32 小时
- UID
- 1563
- 积分
- 167
- 帖子
- 36
- 阅读权限
- 40
- 注册时间
- 2008-4-30
- 最后登录
- 2008-6-3
- 精华
- 0
- UID
- 1563
- 积分
- 167
- 帖子
- 36
- 主题
- 14
- 阅读权限
- 40
- 注册时间
- 2008-4-30
- 最后登录
- 2008-6-3
|
我需要让程序判断条件成立,平掉所持有空仓并马上开多仓,运行在tick周期上,请问下面三种方式那种速度最快,并保证正确
执行。
1。
- If(....)
- {
- .....
- Temp_SellPosition=A_SellPosition();
- If(Temp_SellPosition>0)
- {
- A_SendOrder(Enum_Sell,Enum_Exit,Temp_SellPosition,Close );
- }
- A_SendOrder(Enum_Buy,Enum_Entry,InitLots,Close );
- .....
- }
复制代码
2。
- If(....)
- {
- .....
- BuyToCover(0,Close);
- Buy(InitLots,0);
- ......
- }
复制代码
3。
- If(....)
- {
- .....
- Buy((InitLots,0);
- .....
- }
复制代码
现在用的是第1种,但终是不能正确地平仓,跟踪发发出的指令不正常。是否是因为A_SellPosition()查询占用了时间)
BuyToCover和Buy运行的过程是否和第一种不同,不需要查询返回持仓量,而是直接提交到你们的服务器端执行,第二种方式这两个指令连在一起是否会出现问题
因为BuyToCover平掉所有的空仓位,而Buy会从复平掉所有的空仓位这部分动作,是否有问题。还是会忽略掉后面buy发出的平仓部分指令
第三种方式如何控制平仓的价格和开仓的价格,因为希望可以保证平掉所有的空仓位,价格要设很高,但开多仓要限定价格。
还有我下面的代码有错误吗?总是不能达到预期的效果。希望的效果是,第一次的运行初始化,平掉之前所有的持仓,但log文件中没有出现平仓的纪录(成功还是不成功都没有),而后面的初始化纪录有。但可以肯定地是由持仓,按理应该要执行的,不管成功与否。
跟踪了一下,发现A_BuyPosition()会返回无效的值InvalidNumeric,是因为选的周期太小,而A_BuyPosition()有延时的原因吗?
- 。。。。。。。。
- Temp_BuyPosition=A_BuyPosition(); //平掉前一天持有的多单
- If(Temp_BuyPosition>0)
- {
- If(A_SendOrder(Enum_Buy,Enum_Exit,Temp_BuyPosition,close )
- {
- FileAppend("C:\\chushihua.log",TimeToString(Ctime)+"平掉前一天持有的多单");
- }Else
- {
- FileAppend("C:\\chushihua.log",TimeToString(Ctime)+"平掉前一天持有的多单 不成功");
- }
- Return; //反复执行直到前一天持有的多单全部平掉
- }
- FileAppend("C:\\chushihua.log",DateToString(Date)+" "+TimeToString(Ctime)+" 每天一次的初始化");
复制代码
[ 本帖最后由 soro 于 2008-6-1 11:45 编辑 ] |
|