Помогите разобраться с OrderCloseTime - страница 2

 
да, это я невнимательно...
но в любом случае надо делать проверку на ошибки после OrderSelect...
Если всё ОК, тогда и клозтайм должен быть правильный.

А если всё равно получаться не будет, попробуй просто попринтить клозтайм в логи, и посмотри, что там пишется..


И, кстати, orderclose у тебя как объявляется? Как datetime?)
 
да, это я невнимательно...
но в любом случае надо делать проверку на ошибки после OrderSelect...
Если всё ОК, тогда и клозтайм должен быть правильный.

А если всё равно получаться не будет, попробуй просто попринтить клозтайм в логи, и посмотри, что там пишется..


И, кстати, orderclose у тебя как объявляется? Как datetime?)


я его по-всякому пробовал: и через присвоение переменной datetime orderclose=OrderCloseTime() и вживую -
if(OrderCloseTime()==0) - один пень - не сравнивается

кстати, если переменную объявить int orderclose то тоже работает... очевидно потому что datetime автоматически конвертится в количество секунд - но всё равно не сравнивает с 0
 
напиши
if(OrderCloseTime()>0) Print( TimeToStr( OrderCloseTime() ) ); 


и посмотри - что там за время.
И вообще - подобные вещи надо сначала самому поотлавливать - вывести инфу в логи, а потом уже с этой инфой - на форум ;)

 
09/08/05
00:48:30 MyExpert EURUSD,H1: Время закрытия ордера 1484852 по символу EURUSD = 1970.01.01
01:00:06 MyExpert EURUSD,H1: Время закрытия ордера 1484856 по символу EURUSD = 0
01:00:08 MyExpert EURUSD,H1: Время закрытия ордера 1484897 по символу EURUSD = 0

то, что ты советуешь, я сделал сразу и ДАВНО (ну я немножко программирую...)
Print("Время закрытия ордера "+DoubleToStr(NOrd,0)+" по символу "+Symbol()+" = "+TimeToStr(orderclose,TIME_DATE));
Print("Время закрытия ордера "+DoubleToStr(NOrd,0)+" по символу "+Symbol()+" = "+DoubleToStr(orderclose,4));
 
1970.01.01 - это как раз нулевое время в unix time (количество секунд с 1970 года).
Мы сегодня специально проверяли сделки (открывая, закрывая) с контролем Close Time и все было абсолютно точно.
 
немножко замечаний ;)

DoubleToStr(NOrd,0) - можно просто NOrd - переменные типа int принтятся нормально.


01:00:06 MyExpert EURUSD,H1: Время закрытия ордера 1484856 по символу EURUSD = 0

а ты говоришь, всегда > 0 - неправда =) или условие срабатывает? тогда можно попробовать принтить без тайм_ту_стр()...

сейчас попробую сам на своих позициях....скажу, что получилось
 
у меня - всё ок.
скрипт для проверки:
int start()
{
	int _OrderTicket = 1111111;
	datetime _OrderCloseTime;

	if ( !OrderSelect( _OrderTicket, SELECT_BY_TICKET ) )
	{
		Print( "OrderSelect = false" );
		return(0);
	}
	else
	{
		_OrderCloseTime = OrderCloseTime();
		if ( _OrderCloseTime > 0 )
		{ Print( "_OrderCloseTime > 0 !!!" ); }
		else
		{ Print( "_OrderCloseTime <= 0 !!!" ); }
		Print( "_OrderTicket = ", _OrderTicket, ", _OrderCloseTime = ", _OrderCloseTime );
	}

return(0);
}



пишешь _OrderTicket = нужный тикет - всё равно, из истории или из открытых позиций, и он тебе говорит, клозтайм больше нуля или нет - смотри логи.