нужно переписать эксперта

 

Здравствуйте.

В приложении эксперт.

Он пишет в файл тики.

В виде вот таких строк:

2009.09.21 19:14:07;1.4684

а нужно например так: 
2009 09 21 19 14 07 1.4684

кто-нибудь может поправить код? С языком mql не знаком совсем.

Файлы:
ticksave.mq4  10 kb
 

Думаю, можно в Экселе поправить. Не надо для этого ничего переписывать.

_________


Так вот же автор! Не пытались обратиться к нему?

 
Parabellum >>:

Думаю, можно в Экселе поправить. Не надо для этого ничего переписывать.

_________


Так вот же автор! Не пытались обратиться к нему?



Я написал ему письмо. Но тем не менее. Поправить можно где угодно. Но хотелось бы не делать постоянно лишние действия. Хотелось бы чтобы сам файл был таким, чтобы его понимала другая программа, где я и буду разрабатывать алгоритм. Чтобы оставалось только нажимать одну кнопку - и айл прочитан. А не менять его постоянно руками.

 

Попробуйте, не ошибся ли:

//+------------------------------------------------------------------+
//| Записываем поступившие тики
//+------------------------------------------------------------------+
void WriteTick()
{
	int _GetLastError; double curBid; int curDigits;
	Comment( strComment );
	for ( int curSymbol = 0; curSymbol < SymbolsCount; curSymbol ++ )
	{
		if ( FileHandle[curSymbol] < 0 ) { continue; }

		curBid = MarketInfo( SymbolsArray[curSymbol], MODE_BID );
		curDigits = MarketInfo( SymbolsArray[curSymbol], MODE_DIGITS );

		if ( 	NormalizeDouble( curBid - preBid[curSymbol], curDigits ) < 0.00000001 && 
				NormalizeDouble( preBid[curSymbol] - curBid, curDigits ) < 0.00000001 ) { continue; }

		preBid[curSymbol] = curBid;

		if ( WriteWarnings )
		{
			if ( !FileSeek( FileHandle[curSymbol], -strLEN, SEEK_END ) )
			{
				_GetLastError = GetLastError();
				Alert( "FileSeek( " + FileHandle[curSymbol] + ", -strLEN, SEEK_END ) - Error #", _GetLastError );
				continue;
			}
		}
		else
		{
			if ( !FileSeek( FileHandle[curSymbol], 0, SEEK_END ) )
			{
				_GetLastError = GetLastError();
				Alert( "FileSeek( " + FileHandle[curSymbol] + ", 0, SEEK_END ) - Error #", _GetLastError );
				continue;
			}
		}
		
      string sdt = TimeToStr( TimeCurrent(), TIME_DATE | TIME_SECONDS );
      int nchar, npos = 20;
      while (npos > 0)
      {
         npos--;
         nchar = StringGetChar( sdt, npos);
         if (nchar < '0' || nchar > '9')
            StringSetChar( sdt, npos, ' ');
      }
 
		if ( FileWrite( FileHandle[curSymbol], sdt, DoubleToStr( curBid, curDigits ) ) < 0 )
		{
			_GetLastError = GetLastError();
			Alert( "FileWrite() Error #", _GetLastError );
		}

		if ( WriteWarnings )
		{
			if ( FileWrite ( FileHandle[curSymbol], strEXPERT_WAS_STOPED ) < 0 )
			{
				_GetLastError = GetLastError();
				Alert( "FileWrite() Error #", _GetLastError );
			}
		}

		FileFlush( FileHandle[curSymbol] );
	}
}
 
Всем спасибо, тему можно ситать закрытой. Автор помог мне. Если кому интересно в приложении версия скрипта.
Файлы:
ticksave2.mq4  11 kb
 
// old:
//		if ( FileWrite( FileHandle[curSymbol], TimeToStr( TimeCurrent(), TIME_DATE | TIME_SECONDS ), DoubleToStr( curBid, curDigits ) ) < 0 )
//		{
//			_GetLastError = GetLastError();
//			Alert( "FileWrite() Error #", _GetLastError );
//		}

		if ( FileWrite( FileHandle[curSymbol], StringConcatenate( TimeYear( TimeCurrent() ), " ", 
		    str00( TimeMonth( TimeCurrent() ) ), " ", 
		    str00( TimeDay( TimeCurrent() ) ), " ", 
		    str00( TimeHour( TimeCurrent() ) ), " ", 
		    str00( TimeMinute( TimeCurrent() ) ), " ", 
		    str00( TimeSeconds( TimeCurrent() ) ), " ", DoubleToStr( curBid, curDigits ) ) ) < 0 )
		{
			_GetLastError = GetLastError();
			Alert( "FileWrite() Error #", _GetLastError );
		}

Зачем так часто вызывать функцию TimeCurrent. Должен ли компилятор оптимизировать код, чтобы вызов был сделан только один раз, ведь текущее время постоянно меняется?

И если подсчёта секунд TimeCurrent будет вызван, когда минута сменится, то получится (хоть это и маловероятно), что предыдущий записанный тик будет иметь время в секундах большее, а минуты у них будут одинаковы. Будет так примерно: "2009 09 21 19 14 57 1.4684  2009 09 21 19 14 00 1.4685".

Причина обращения: