Вопрос по созданию библиотек

 
Подскажите, пожалуйста!
Как вынести часто используемые функции (на MQL) в отдельный файл, чтобы можно было ссылаться на них из нескольких экспертов?
Я попытался скопировать stdlib.mq4, но что-то, видимо, делаю не так.

Привожу пример кода:

1. Файл эксперта. В самом начале вписываю строчку
#include <mylib.mqh>



mylib.mqh находится в директории include

2. Файл mylib.mqh:

#import "mylib.ex4"
void Report(string strFileName, int nMagic, bool& bReportDone);



3. Файл mylib.mq4 (находится в директории libraries)

#property copyright "Quark"
#property link      ""
#property library

// ------

void Report(string strFileName, int nMagic, bool& bReportDone)
{
	if(Hour() == 0 && Minute() >= nMagic && IsTesting() == false)
	{
		if(bReportDone == false)
		{
			int hFile = FileOpen(strFileName + "_" + Symbol() + "_" + Period() + ".rpt", 
				FILE_BIN | FILE_WRITE, ',');
			
			string str = "CloseDateTime,Type,Profit\r\n";
			FileWriteString(hFile, str, StringLen(str)); 

			for(int nCnt = 0; nCnt < HistoryTotal(); nCnt++)
			{
				OrderSelect(nCnt, SELECT_BY_POS, MODE_HISTORY);	
				if(OrderMagicNumber() == nMagic && OrderType() <= OP_SELL && OrderSymbol() == Symbol())
				{
					str = "";
					str = str + TimeToStr(OrderCloseTime(), TIME_DATE|TIME_MINUTES);
					
					if(OrderType() == OP_BUY)
						str = str + ", buy";
					else
						str = str + ", sell";
					
					str = str + "," + OrderProfit();
					str = str + "\r\n";
					
					FileWriteString(hFile, str, StringLen(str));
				}
			}			

			FileFlush(hFile); 
			FileClose(hFile); 
			
			bReportDone = true;
		}
	}
	else if(Hour() != 0)
		bReportDone = false;
}



При компилляции эксперта выдается ошибка - не могу найти файл (то ли заголовка, то ли библиотеки)


 
К сожалению, не приведены сообщения компилятора.
И идет работа с 3 разными файлами в разных каталогах, хотя нигде нет указания на относительные положения этих файлов.

А вообще, зачем внедрять код EX4, когда можно просто напросто использовать
#include <mylib.mq4> с непосредственным включением исходника
вместо включения заголовочного файла + неизвестно в каком состоянии EX4 файл?
 
К сожалению, не приведены сообщения компилятора.
И идет работа с 3 разными файлами в разных каталогах, хотя нигде нет указания на относительные положения этих файлов.

А вообще, зачем внедрять код EX4, когда можно просто напросто использовать
#include <mylib.mq4> с непосредственным включением исходника
вместо включения заголовочного файла + неизвестно в каком состоянии EX4 файл?


Попробовал. Получил 'mylib.mq4' - cannot open program file C:\Program Files\MetaTrader 4\experts\_Candlestick_Expert.mq4 (1, 1)

Candlestick_Expert - это имя того эксперта, в котором я закомментировал функцию, и в самом верху вставил ссылку на библиотеку.

Также попробовал #include <libraries\\mylib.mq4>, получил 'libraries\\mylib.mq4' - cannot open program file C:\Program Files\MetaTrader 4\experts\_Candlestick_Expert.mq4 (1, 1)

Наконец, на #include "libraries\\mylib.mq4", равно как на #include "libraries\\mylib.mq4" получил
')' - wrong parameters count C:\Program Files\MetaTrader 4\experts\_Candlestick_Expert.mq4 (215, 21)

И наконец, перенес mylib.mq4 в директорию экспертов, все тот же cannot open program file

Как вообще ссылаться на файл из #include?
 
Попробуйте все упростить и повторить снова.

К сожалению, Вы привели не тот код, на который выдается ошибка:
Получил 'mylib.mq4' - cannot open program file C:\Program Files\MetaTrader 4\experts\_Candlestick_Expert.mq4


#import "mylib.ex4"

Означает, что файл mylib.ex4 должен лежать в том же каталоге.

Как вообще ссылаться на файл из #include?

Попробуйте на листочке бумаги нарисовать каждый включаемый и зависимый файл, чтобы самостоятельно разобраться.
Пока все напоминает ситуацию, когда Вы заблудились в трех соснах.
 
Попробуйте все упростить и повторить снова.

К сожалению, Вы привели не тот код, на который выдается ошибка:
Получил 'mylib.mq4' - cannot open program file C:\Program Files\MetaTrader 4\experts\_Candlestick_Expert.mq4


#import "mylib.ex4"

Означает, что файл mylib.ex4 должен лежать в том же каталоге.

Как вообще ссылаться на файл из #include?

Попробуйте на листочке бумаги нарисовать каждый включаемый и зависимый файл, чтобы самостоятельно разобраться.
Пока все напоминает ситуацию, когда Вы заблудились в трех соснах.


1. Частично Вы оказались правы. С ошибкой ')' - wrong parameters count я разобрался.
2. Работает (спасибо за идею, я понял, как это сделать) включение mq4 файла, лежащего в директории экспертов. Но все-таки, хотелось бы его в libraries...

Есть директория experts, есть ее поддиректория libraries. Что писать в ссылке по include, сколько ставить обратных слэшей, в какие кавычки (обычные, угловые) заключать? Я перепробовал все варианты. Не работает.
 
Так все-таки, как в include сослаться на поддиректорию?
 
читайте описание. если include <...>, то чтение идёт из стандартной директории, то есть из experts\include
если inlude "...", то чтение идёт из текущей директории, то есть, из experts. но вы можете указать include "include\..." тогда чтение идёт из experts\include
Причина обращения: