如果最后一个订单(false
)在24小时之前完成,我想写出一个返回close
的布尔值。
我尝试使用此代码,但它始终返回false
:
bool OnePerDay()
{
if ( OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY ) )
{
if ( OrderOpenTime() < 24*60*60 ) return( true );
}
return( false );
}
我的目标是每天至少进行一次交易(或其他时间间隔),因此它应该开仓并关闭它,但不会在不到24小时内执行其他订单。
答案 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 );
}
}