求问 OrderClose()为什么有时不能执行?

 
for(int h=0;h<5;h++) //对a数组的每一行遍历。
{
for(int l=2;l<7;l++) //对a数组的每一行的每一列遍历。
{

if(a[h][l]!=0) //a数组的每一行的2~6列存的是已经开仓的订单号。0~1列是价格。a数组是double型的5行7列的数组。

{ if( z-10*Point<=Bid && Bid<=z ) //Bid符合条件就平仓
{
int close_a=MathFloor(a[h][l]); //得到一个订单号
close=OrderClose(close_a,lots,Bid,25,Magenta);

if(close==1) { printf("OrderClose 平仓成功") ; }
if(close!=1) { printf("OrderClose 平仓失败") ; }  } } } }

为什么同样是Bid达到了指定价位  有时结果是"OrderClose 平仓成功"  有时结果"OrderClose 平仓失败"?
 

把Bid改成OrderClosePrice()

close=OrderClose(close_a,lots,OrderClosePrice(),25,Magenta);
 
可是 我开仓的单子都是买单呀 没开过卖单的 卖单的程序我还没写
 
jocojohn:
for(int h=0;h<5;h++) //对a数组的每一行遍历。
{
for(int l=2;l<7;l++) //对a数组的每一行的每一列遍历。
{

if(a[h][l]!=0) //a数组的每一行的2~6列存的是已经开仓的订单号。0~1列是价格。a数组是double型的5行7列的数组。

{ if( z-10*Point<=Bid && Bid<=z ) //Bid符合条件就平仓
{
int close_a=MathFloor(a[h][l]); //得到一个订单号
close=OrderClose(close_a,lots,Bid,25,Magenta);

if(close==1) { printf("OrderClose 平仓成功") ; }
if(close!=1) { printf("OrderClose 平仓失败") ; }  } } } }

为什么同样是Bid达到了指定价位  有时结果是"OrderClose 平仓成功"  有时结果"OrderClose 平仓失败"?

不要之平仓一次,可以写个while,循环平仓,直至成功。

任何涉及开仓平仓修改订单的模块都应该这么处理。

 
enbo lu:

不要之平仓一次,可以写个while,循环平仓,直至成功。

任何涉及开仓平仓修改订单的模块都应该这么处理。

我加了这几行代码

                       int tic=0;
                              
                       while(tic!=1)           
                       {
                      
                       tic=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20,Magenta);
                      
                       if(tic==1) {  printf("OrderClose 平仓成功") ; }
                       if(tic!=1) {  printf("OrderClose 平仓失败") ; }             
                     
                       }

结果有的单子出现“OrderClose 平仓成功”  有的单子不停的出现“OrderClose 平仓失败”  为什么??
                   

 
jocojohn:

我加了这几行代码

                       int tic=0;
                              
                       while(tic!=1)           
                       {
                      
                       tic=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20,Magenta);
                      
                       if(tic==1) {  printf("OrderClose 平仓成功") ; }
                       if(tic!=1) {  printf("OrderClose 平仓失败") ; }             
                     
                       }

结果有的单子出现“OrderClose 平仓成功”  有的单子不停的出现“OrderClose 平仓失败”  为什么??

看下日志或者在平仓失败后边加上GetLastError(),目测代码没有大问题,可能是错误130

 

又试了几天 还是不行。“平仓失败”时日志却显示正常平仓。加上GetLastError()没有出现任何信息。在 tic=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20,Magenta)之前加了printf("OrderTicket()=%d,OrderLots()=%f,OrderClosePrice()=%f",OrderTicket(),OrderLots(),OrderClosePrice())     运行时出现了比如OrderTicket()=224308378   OrderLots()=0.010000   OrderClosePrice()=0.643890  但是tic=OrderClose一句就是没有正常平仓。不知为什么。

 
jocojohn:

又试了几天 还是不行。“平仓失败”时日志却显示正常平仓。加上GetLastError()没有出现任何信息。在 tic=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20,Magenta)之前加了printf("OrderTicket()=%d,OrderLots()=%f,OrderClosePrice()=%f",OrderTicket(),OrderLots(),OrderClosePrice())     运行时出现了比如OrderTicket()=224308378   OrderLots()=0.010000   OrderClosePrice()=0.643890  但是tic=OrderClose一句就是没有正常平仓。不知为什么

平仓失败后边加getlasterror后显示是“平仓失败0”吗?这从逻辑上是不可能的啊。要是“平仓失败”加任何一个数字那就是错误信息了

 
alex wu:

平仓失败后边加getlasterror后显示是“平仓失败0”吗?这从逻辑上是不可能的啊。要是“平仓失败”加任何一个数字那就是错误信息了

加了GetLastError()以后,“平仓失败”后面没有任何数字呀

 
jocojohn:

加了GetLastError()以后,“平仓失败”后面没有任何数字呀

GetLastError()是一定会返回一个异常代码的,没有错误的时候返回的是0,而只要平仓失败,它必然会反馈一个非零的错误代码来提示平仓失败原因