Форум трейдеров » Торговые роботы, советники, индикаторы » Некоторые секреты МТ4
+ Подписаться
Страница 15 из 35 ПерваяПервая ... 5131415161725 ... ПоследняяПоследняя
  1. 38
    Комментарии
    0
    Темы
    38
    Репутация Pro
     
    Новичок

    2 Медалей
    Цитата Сообщение от EQU Посмотреть сообщение
    Откомпилить, надеюсь, получится?;)
    Спасибо большое :) Хоть оно и работало совсем не так как я хотел, но все равно полезно было для общего развития :) Пока шарился в гугле накопал таки полнофункциональный скрипт, который это делает (собирает тики). выкладываю здесь, если кому надо.

    Код:
    //+------------------------------------------------------------------+
    //|                                                     TickSave.mq4 |
    //|                                      Copyright © 2006, komposter |
    //|                                      mailto:komposterius@mail.ru |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2006, komposter"
    #property link      "mailto:komposterius@mail.ru"
    
    extern string	SymbolList		= "EURUSD,GBPUSD,AUDUSD,USDCAD,USDJPY,USDCHF";
    extern bool		WriteWarnings	= false;
    
    string SymbolsArray[32], strComment; double preBid[32];
    int FileHandle[32], SymbolsCount = 0;
    
    #define strEXPERT_WAS_STOPED  "--------------------------Expert was stoped"
    #define strCONNECTION_LOST    "--------------------------Connection lost  "
    #define strLEN						45
    
    bool preIsConnected = true, nowIsConnected = true;
    
    int init() { start(); return(0); }
    int start()
    {
    	string ServerName = AccountServer();
    	int CurYear = Year();
    	int CurMonth = Month();
    
    	// Извлекаем из строки SymbolList список символов
    	if ( !PrepareSymbolList() ) { return(-1); }
    
    	// Проверяем состояние соединения
    	if ( !ConnectionCheck() ) { return(-1); }
    
    	// Открываем файлы
    	if ( !OpenFiles() ) { return(-1); }
    
    	while ( !IsStopped() )
    	{
    		// Если поменялся сервер, сразу прекращаем запись - для нового сервера будет создана своя папка
    		if ( ServerName != AccountServer()  ) { break; }
    
    		// Если поменялся месяц, сразу прекращаем запись - для нового месяца будет создан свой файл
    		if ( CurYear != Year() ) { break; }
    		if ( CurMonth != Month() ) { break; }
    
    		// Если пропала связь,
    		if ( !IsConnected() )
    		{
    			// записываем предупреждение во все файлы
    			WriteConnectionLost();
    			preIsConnected = false;
    		}
    		// Если связь есть,
    		else
    		{
    			// Записываем поступившие тики
    			WriteTick();
    			preIsConnected = true;
    		}
    		Sleep(100);
    	}
    
    	// Закрываем файлы
    	CloseFiles();
    
    	Comment("");
    
    	return(0);
    }
    
    //+------------------------------------------------------------------+
    //| Извлекаем из строки SymbolList список символов
    //+------------------------------------------------------------------+
    bool PrepareSymbolList()
    {
    	int		curchar = 0, len = StringLen( SymbolList ), curSymbol;
    	string	cur_symbol = ""; SymbolsCount = 0;
    
    	//---- устанавливаем умолчательный размер массива символов
    	ArrayResize( SymbolsArray, 32 );
    
    	//---- перебираем все символы в списке графиков
    	for ( int pos = 0; pos <= len; pos ++ )
    	{
    		curchar = StringGetChar( SymbolList, pos );
    		//---- если текущий символ - не запятая и не последний символ в строке,
    		if ( curchar != ',' && pos != len )
    		{
    			//---- это - один из символов инструмента графика
    			cur_symbol = cur_symbol + CharToStr( curchar );
    			continue;
    		}
    		//---- если текущий символ запятая, или это - последний символ в строке,
    		else
    		{ 
    			//---- значит, в переменной cur_symbol - полное имя символа. Проверяем его:
    			MarketInfo( cur_symbol, MODE_BID );
    			if ( GetLastError() == 4106 )
    			{
    				Alert( "Неизвестный символ ", cur_symbol, "!!!" );
    				return(false);
    			}
    
    			//---- если символ реально существует, проверяем, нет ли такого симола в нашем списке:
    			bool Uniq = true;
    			for ( curSymbol = 0; curSymbol < SymbolsCount; curSymbol ++ )
    			{
    				if ( cur_symbol == SymbolsArray[curSymbol] )
    				{
    					Uniq = false;
    					break;
    				}
    			}
    
    			//---- если такого симола в нашем списке нет, записываем его, и считаем общее количество:
    			if ( Uniq )
    			{
    				SymbolsArray[SymbolsCount] = cur_symbol;
    				SymbolsCount ++;
    				if ( SymbolsCount > 31 )
    				{
    					Alert( "Слишком много символов! Открыть можно максимум 32 файла!" );
    					return(false);
    				}
    			}
    
    			//---- обнуляем значение переменной
    			cur_symbol = "";
    		}
    	}
    
    	//---- если ни один символ не был найден, выходим
    	if ( SymbolsCount <= 0 )
    	{
    		Alert( "Не определено ни одного символа!!!" );
    		return(false);
    	}
    	
    	//---- устанавливаем размер всех массивов под кол-во символов:
    	ArrayResize		( SymbolsArray	, SymbolsCount );
    	ArrayResize		( preBid			, SymbolsCount );
    	ArrayInitialize( preBid			, -1 				);
    	ArrayResize		( FileHandle	, SymbolsCount );
    	ArrayInitialize( FileHandle	, -1 				);
    
    	//---- Выводим информацию:
    	string uniq_symbols_list = SymbolsArray[0];
    	for ( curSymbol = 1; curSymbol < SymbolsCount; curSymbol ++ )
    	{
    		if ( curSymbol == SymbolsCount - 1 )
    		{ uniq_symbols_list = uniq_symbols_list + " и " + SymbolsArray[curSymbol]; }
    		else
    		{ uniq_symbols_list = uniq_symbols_list + ", " + SymbolsArray[curSymbol]; }
    	}
    	strComment = StringConcatenate( AccountServer(), ": обрабатывается ", SymbolsCount, " символ(-а,-ов):\n", uniq_symbols_list, "\n" );
    	Comment( strComment );
    
    	return(true);
    }
    
    //+------------------------------------------------------------------+
    //| Проверяем состояние соединения
    //+------------------------------------------------------------------+
    bool ConnectionCheck()
    {
    	while ( !IsConnected() )
    	{
    		Comment( AccountServer(), ": НЕТ СВЯЗИ С СЕРВЕРОМ!!!" );
    		if ( IsStopped() ) { return(false); }
    		Sleep(100);
    	}
    	return(true);
    }
    
    //+------------------------------------------------------------------+
    //| Открываем файлы, в которые будем записывать тики
    //+------------------------------------------------------------------+
    bool OpenFiles()
    {
    	int _GetLastError;
    	for ( int curSymbol = 0; curSymbol < SymbolsCount; curSymbol ++ )
    	{
    		string FileName = StringConcatenate( "[Ticks]\\", AccountServer(), "\\", SymbolsArray[curSymbol], "_", Year(), ".", strMonth(), ".csv" );
    		FileHandle[curSymbol] = FileOpen( FileName, FILE_READ | FILE_WRITE );
    
    		if ( FileHandle[curSymbol] < 0 )
    		{
    			_GetLastError = GetLastError();
    			Alert( "FileOpen( " + FileName + ", FILE_READ | FILE_WRITE ) - Error #", _GetLastError );
    			return(false);
    		}
    
    		if ( !FileSeek( FileHandle[curSymbol], 0, SEEK_END ) )
    		{
    			_GetLastError = GetLastError();
    			Alert( "FileSeek( " + FileHandle[curSymbol] + ", 0, SEEK_END ) - Error #", _GetLastError );
    			return(false);
    		}
    
    		if ( WriteWarnings )
    		{
    			if ( FileWrite( FileHandle[curSymbol], strEXPERT_WAS_STOPED ) < 0 )
    			{
    				_GetLastError = GetLastError();
    				Alert( "Ticks(" + Symbol() + ") - FileWrite() Error #", _GetLastError );
    				return(false);
    			}
    			FileFlush( FileHandle[curSymbol] );
    		}
    
    		preBid[curSymbol] = MarketInfo( SymbolsArray[curSymbol], MODE_BID );
    	}
    	return(true);
    }
    
    //+------------------------------------------------------------------+
    //| Если пропала связь, записываем предупреждение во все файлы
    //+------------------------------------------------------------------+
    void WriteConnectionLost()
    {
    	int _GetLastError;
    
    	if ( !preIsConnected ) { return(0); }
    	
    	Comment( strComment, "НЕТ СВЯЗИ С СЕРВЕРОМ!!!" );
    
    	if ( !WriteWarnings ) { return(0); }
    
    	for ( int curSymbol = 0; curSymbol < SymbolsCount; curSymbol ++ )
    	{
    		if ( FileHandle[curSymbol] < 0 ) { continue; }
    
    		if ( !FileSeek( FileHandle[curSymbol], -strLEN, SEEK_END ) )
    		{
    			_GetLastError = GetLastError();
    			Alert( "FileSeek( " + FileHandle[curSymbol] + ", -strLEN, SEEK_END ) - Error #", _GetLastError );
    			continue;
    		}
    
    		if ( FileWrite( FileHandle[curSymbol], strCONNECTION_LOST ) < 0 )
    		{
    			_GetLastError = GetLastError();
    			Alert( "FileWrite() Error #", _GetLastError );
    		}
    
    		if ( FileWrite( FileHandle[curSymbol], strEXPERT_WAS_STOPED ) < 0 )
    		{
    			_GetLastError = GetLastError();
    			Alert( "FileWrite() Error #", _GetLastError );
    		}
    
    		FileFlush( FileHandle[curSymbol] );
    	}
    }
    
    //+------------------------------------------------------------------+
    //| Записываем поступившие тики
    //+------------------------------------------------------------------+
    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;
    			}
    		}
    
    		if ( FileWrite( FileHandle[curSymbol], TimeToStr( TimeCurrent(), TIME_DATE | TIME_SECONDS ), 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] );
    	}
    }
    
    //+------------------------------------------------------------------+
    //| Закрываем все файлы
    //+------------------------------------------------------------------+
    void CloseFiles()
    {
    	for ( int curSymbol = 0; curSymbol < SymbolsCount; curSymbol ++ )
    	{
    		if ( FileHandle[curSymbol] > 0 )
    		{
    			FileClose( FileHandle[curSymbol] );
    			FileHandle[curSymbol] = -1;
    		}
    	}
    }
    
    string strMonth()
    {
    	if ( Month() < 10 ) return( StringConcatenate( "0", Month() ) );
    	return(Month());
    }
  2. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от Mathers Посмотреть сообщение
    Пока шарился в гугле накопал таки полнофункциональный скрипт, который это делает (собирает тики). выкладываю здесь, если кому надо.
    смотрится неплохо..;)
    Вот только какую часть тиков он теряет - большУю или бОльшую..:smartass:
    а проверить легко - простенький счётчик тиков прописать и поставить параллельно на другие графики..
  3. 79
    Комментарии
    6
    Темы
    80
    Репутация Pro
     
    В начале пути

    3 Медалей
    А правда, что первый МТ могли себе позволить люди имеющие 7 рабов, так как первый МТ работал на пару и приходилось носить много угля?
    Если покажете чертеж первого МТ буду очень благодарен :)
  4. 1,156
    Комментарии
    4
    Темы
    1189
    Репутация Pro
    Аватар для zerkmax  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от vic_devis Посмотреть сообщение
    А правда, что первый МТ могли себе позволить люди имеющие 7 рабов, так как первый МТ работал на пару и приходилось носить много угля?
    Если покажете чертеж первого МТ буду очень благодарен :)
    нууу это Вам сюда --->> MetaQuotes Software Corp
  5. Цитата Сообщение от E-W Посмотреть сообщение
    Просьба всем.
    Хотела сказать спасибо Найданову за этот совет, а вместо этого случайно сняла ему репутацию (хоть и не блондинка).
    Добавьте от меня, кто может. :)
    Заранее спасибо.
    Спасибо вам, E-W, за отзыв и за то, что потрудились написать этот пост :bow: А также моя благодарность SSSS - за поддержку просьбы E-W. Спасибо за то, что откликнулись! :bow:
  6. 5,302
    Комментарии
    1
    Темы
    5670
    Репутация Pro
    Аватар для alwic  
    Кот Бегемот

    5 Медалей
    вопросы у меня простые

    не вижу я в терминале время - в ордерах время отображается - а на видном месте нет - зашёл к метаквотексам - скачал пару индикаторов показывающие время Cloq и Clock 1.3

    первый рисует Label Label - второй тоже самое рисует и ещё колокольчиком звенит - в опчем - время не пишут оба


    и второй вопрос - в конкурсе новая русская рулетка - локи разрешены - а как их закрыть ?

    или сразу - или встречным

    на других мт было так - открываешь две встречные позы - а када закрыть надо - нажимаешь в появившимся большом окне - где - тип ордера - закрыть встречные ордера и всё закрывается - в терминале от броко у меня этого нет - может что то надо включить ?

    и ещё вопрос

    если открыть демо - то кроме валютных пар - ничего больше нет
    нажимаю обзор рынка - мышкой включаю - показать все символы - и всё равно - кроме валют - ничего больше нет ( а вот в конкурсах - если так сделать - появляются все инструменты) - может быть так и должно быть - или надо что то где то включить ?
  7. 19,796
    Комментарии
    465
    Темы
    20570
    Репутация Pro
    Аватар для Евгений Ляпкин  
    Старожил

    9 Медалей
    Цитата Сообщение от alwic Посмотреть сообщение
    если открыть демо - то кроме валютных пар - ничего больше нет
    нажимаю обзор рынка - мышкой включаю - показать все символы - и всё равно - кроме валют - ничего больше нет ( а вот в конкурсах - если так сделать - появляются все инструменты) - может быть так и должно быть - или надо что то где то включить ?
    ПРОверьте к какому серверу подключется терминал. Если все правильно - переустановите.

    Функции закрыть встречным в МТ4 нет.
    Локи закрываются последовательным закрытием всех ордеров.

    По времни - когда-то видел индикатор, показывающий остаток времени до окончания формирования свечи. Года полтора тому... поищите на codebase
  8. 5,302
    Комментарии
    1
    Темы
    5670
    Репутация Pro
    Аватар для alwic  
    Кот Бегемот

    5 Медалей
    Цитата Сообщение от Евгений Ляпкин Посмотреть сообщение
    ПРОверьте к какому серверу подключется терминал. Если все правильно - переустановите.

    Функции закрыть встречным в МТ4 нет.
    Локи закрываются последовательным закрытием всех ордеров.

    По времни - когда-то видел индикатор, показывающий остаток времени до окончания формирования свечи. Года полтора тому... поищите на codebase
    а вот в этой ветке 33 ( сообщение ) - вот что говорится

    Перекрестные ордера

    --------------------------------------------------------------------------------

    Если закрывать перекрытые ордера не по отдельности, а командой
    "Закрыть перекрытые ордеры" или "Закрыть встречным"
    То вы сэкономите на спреде одного из них.


    ------------------------------------------------------------------------------------------------

    это не тоже самое ?



    сервер -- демовский - вот этот - BroCoInvestments-CurrenexDemo&Contes


    по времени - я и установил два индюка от метаков - не работают
  9. 19,796
    Комментарии
    465
    Темы
    20570
    Репутация Pro
    Аватар для Евгений Ляпкин  
    Старожил

    9 Медалей
    По поводу встречных могу и ошибаться.

    А сервер у Вас неправильный. Это сервер БрокоИнвестора, где только форекс.
    Надо выбрать Broco-Demo
  10. 779
    Комментарии
    9
    Темы
    784
    Репутация Pro
    Аватар для VAGon  
    Кот ДаВинчи

    3 Медалей
    Цитата Сообщение от Евгений Ляпкин Посмотреть сообщение
    Функции закрыть встречным в МТ4 нет.
    Локи закрываются последовательным закрытием всех ордеров.
    Пардон, вмешаюсь: В МТ4 есть функция закрытия встречным, также можно укорачивать позицию.
    Правой кнопой вызываем меню, выбираем "закрыть ордер" в окне выбираем тип ордера, там различные варианты на всякий случай :thumbsup_002:

Вверх
РегистрацияX

чтобы писать, читать, комментировать