MQL4 - 每天一个订单

时间:2017-10-13 12:19:39

标签: mql4

如果最后一个订单(false)在24小时之前完成,我想写出一个返回close的布尔值。

我尝试使用此代码,但它始终返回false

bool OnePerDay()
{
     if (  OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY ) )
     {     

           if (  OrderOpenTime() <  24*60*60 ) return( true );
     }
     return( false );
}

我的目标是每天至少进行一次交易(或其他时间间隔),因此它应该开仓并关闭它,但不会在不到24小时内执行其他订单。

3 个答案:

答案 0 :(得分:1)

OrderOpenTime()datetime变量,这意味着它是大于零的整数,小于2^31-1表示自1970年1月1日以来的秒数。例如,它是9:20: 2017年10月14日上午07点,格式为datetime格式的1507972807。如果您想查看今天或更早的交易是否开放,您需要知道今天的开始日期,例如iTime(_Symbol(),PERIOD_D1,0)TimeCurrent()/(24*60*60)*(24*60*60)即1507939200.如果您需要检查交易持续时间少于24小时 - 要么TimeCurrent()-OrderOpenTime()与24 * 60 * 60进行比较,要么获得应该返回的预期时间是的,并与该日期进行比较。此外,您需要考虑周五开盘时的情况,现在是星期一(因此超过24小时,但您的任务是否合适?)

共:

const int DAY_SECONDS = 24*60*60;
bool isTradeOpenToday(int ticket){//true means trade lasts less then 24h
   datetime now = TimeCurrent();
   datetime now_minus_24h = now - DAY_SECONDS;
   if(OrderSelect(ticket,SELECT_BY_TICKET)){
      return now_minus_24h - OrderOpenTime() < 0;
   }
}

答案 1 :(得分:1)

如何扫描db.POOL

#define aTimeLAST iTime( _Symbol, PERIOD_H1, 23 )  // 24 H1 Bars back at Market
     // aTimeLAST  Time() - 24*60*60               // 24 hours since this Bar

void OnTick(){

     if   WasNoTradeWithinLAST( aTimeLAST ) {
          ...
     }
}

bool WasNoTradeWithinLAST( const datetime aClosestAllowedTIME ) {

     for (  int anOrdinalNUM  = 0;
                anOrdinalNUM <  OrdersTotal();
                anOrdinalNUM++
                ) {
            if ( !OrderSelect( anOrdinalNUM; SELECT_BY_POS; MODE_HISTORY ){
                  PrintFormat( "OrderSelect( %d ) failed. Will continue.", anOrdinalNUM );
            }
            else {

                  if (  OrderCloseTime() >= aClosestAllowedTIME
                     || OrderOpenTime()  >= aClosestAllowedTIME
                        )
                        return( false ); // WELL, XTO WAS WITHIN LAST 24HRS
            }
     }
     return( true );  // NONE XTO HAS BEEN PERFORMED DURING LAST 24HRS
 }

答案 2 :(得分:0)

找到一种写出bool函数的方法,请阅读定义的注释。

解决方案是在订单选择的for循环中正确枚举闭合顺序,因此只有在超过24小时之前执行最后一个关闭订单时,此布尔才返回true。

int orhito () { return OrdersHistoryTotal(); } // number of closed  orders
int orto () {   return OrdersTotal();        } // number of pending orders

//+------------------------------------------------------------------+
bool onePerTime() { /* boolean that should return true
                               if the last close order
                               was performed more than 24 hours before */

     if (  orhito() == 0 ) return ( true );
     else{
           for ( int i = orhito(); i >= 0 ; i-- ) { 
                 if (  OrderSelect( i, SELECT_BY_POS, MODE_HISTORY ) ) { 
                       if (  TimeCurrent() - OrderCloseTime()  < 24*60*60 )
                             return( false );
                 } 
           }
           return( true );
     }
}