大家帮帮忙!当这根K线上已完成一次平仓,则这根K线上不许开仓,程序代码应如何写?

 

谢谢您呢!我这这样的写法不知道正确否?

int  kongdan()
{
int a;
datetime time0;
if(OrderSelect(0,SELECT_BY_POS ,MODE_HISTORY)==TRUE)
  {
  time0=iTime(NULL,PERIOD_H1,0);
  if(time0!=OrderCloseTime())a=1;
  }
return a ;
}如果kongdan()==1则可以下单,否则不能下单?这样做有没有问题?

 
alf_ssm:

谢谢您呢!我这这样的写法不知道正确否?

int  kongdan()
{
int a;
datetime time0;
if(OrderSelect(0,SELECT_BY_POS ,MODE_HISTORY)==TRUE)
  {
  time0=iTime(NULL,PERIOD_H1,0);
  if(time0!=OrderCloseTime())a=1;
  }
return a ;
}如果kongdan()==1则可以下单,否则不能下单?这样做有没有问题?

bool kongdan(int magic)
{
     static int tf =PERIOD_H1;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--){
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
             if(OrderMagicNumber()==magic&&OrderSymbol()==Symbol()){
              if(iBarShift(NULL,tf,OrderCloseTime())==0)return(true);
            }
         }         
     }
     return(false);
}
 

我是这样写的orderselect中的第一个参数应该是total -1。然后用当前的时间与最后一次交易时间做比较,如果大于一个周期的时间那就说明不在一个线上,如果小于一个周期的时间则要考虑是小于多少,分为2种情况。

code不在身边所以没法贴出来。

 

获取历史订单要注意,如果用户改变了历史订单列表的时间段,可能造成获取错误。

 
enbo lu:

获取历史订单要注意,如果用户改变了历史订单列表的时间段,可能造成获取错误。

的确说的非常有道理!
原因: