void func(int &arr[ ][ ][ ][ ]) { }
struct MyStruct { string Array[]; }; void OnStart() { MyStruct a1,a2; ArrayResize(a1.Array,3); ArrayResize(a2.Array,1); a1=a2; }Ранее в результате вызова такой функции массив "а1" имел размер 3. Теперь он будет иметь размер 1.
ENUM_FP_CLASS MathClassify( double value // вещественное число );Перечисление содержит следующие значения:
if(MathClassify(value)>FP_ZERO) { Print("value is not a valid number"); }
Изменены критерии оптимизации,
в которых учитывалось два показателя — баланс и некий второй фактор.
Теперь в них учитывается только второй фактор, без баланса. Такие
критерии являются более простыми и понятными для анализа.
import sys chart_symbol='unknown' chart_tf=1 if len(sys.argv) == 3: chart_symbol, chart_tf = sys.argv[1:3]; print("Hello world from", chart_symbol, chart_tf) >> Hello world from T.NYSE 15
Для GitHub сразу же доступна возможность скачать исходные файлы. Загрузка осуществляется в отдельный подкаталог папки "Projects", именуемый в соответствии с названием проекта на GitHub.
Обновлена документация.
long DatabaseImport( int database, // хендл базы данных, полученный в DatabaseOpen const string table, // имя таблицы для вставки данных const string filename, // имя файла для импорта данных uint flags, // комбинация флагов const string separator, // разделитель данных ulong skip_rows, // сколько первых строк пропустить const string skip_comments // строка символов, которые определяют комментарии );
long DatabaseExport( int database, // хендл базы данных, полученный в DatabaseOpen const string table_or_sql, // имя таблицы или SQL-запрос const string filename, // имя CSV-файла для экспорта данных uint flags, // комбинация флагов const string separator // разделитель данных в CSV-файле );
long DatabasePrint( int database, // хендл базы данных, полученный в DatabaseOpen const string table_or_sql, // таблица или SQL-запрос uint flags // комбинация флагов );
int FileSelectDialog( string caption, // заголовок окна string initial_dir, // начальная папка string filter, // фильтр расширений uint flags, // комбинация флагов string& filenames[], // массив с именами файлов string default_filename // имя файла по умолчанию );Новая функция позволит реализовать удобное взаимодействие пользователя с MQL5-программой.
#property optimization_chart_mode "3d,InpX,InpY"Используя его, вы можете задать вид графика, открываемого по окончании оптимизации, а также параметры программы для его осей X и Y.
double MathArctan2( double y // y-координата точки double x // x-координата точки );
Добавлен перевод пользовательского интерфейса на панджаби (Индия).
Обновлена документация.
Исправления по крешлогам.
Обновление будет доступно через систему Live Update.
class CFoo { public: struct Item { int x; }; }; //+------------------------------------------------------------------+ class CBar { public: struct Item { int x; }; }; CBar::Item item; // правильное объявление структуры Item из класса Bar Item item; // некорректное объявлениеТакже добавлена поддержка пространства имен (namespace), что дает еще больше свободы при использовании сторонних кодов/библиотек в своих программах.
#define PrintFunctionName() Print(__FUNCTION__) namespace NS { void func() { PrintFunctionName(); } struct C { int x; C() { PrintFunctionName(); }; }; } struct C { int x; C() { PrintFunctionName(); }; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void func() { PrintFunctionName(); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { func(); NS::func(); C c; NS::C ac; }В результате исполнения программа выведет следующие строки:
class A { void operator=(const A &)=delete; // запрещаем оператор копирования объекта }; class B : public A { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { A a1,a2; B b1,b2; a1=a2; b1=b2; }В этом примере для строк "a1=a2" и "b1=b2" компилятор выдаст ошибки:
input group "Signal" input int ExtBBPeriod =20; // Bollinger Bands period input double ExtBBDeviation =2.0; // deviation input ENUM_TIMEFRAMES ExtSignalTF =PERIOD_M15; // BB timeframe input group "Trend" input int ExtMAPeriod =13; // Moving Average period input ENUM_TIMEFRAMES ExtTrendTF =PERIOD_M15; // MA timeframe input group "ExitRules" input bool ExtUseSL =true; // use StopLoss input int Ext_SL_Points =50; // StopLoss in points input bool ExtUseTP =false; // use TakeProfit input int Ext_TP_Points =100; // TakeProfit in points input bool ExtUseTS =true; // use Trailing Stop input int Ext_TS_Points =30; // Trailing Stop in points input group "MoneyManagement" sinput double ExtInitialLot =0.1; // initial lot value input bool ExtUseAutoLot =true; // automatic lot calculation input group "Auxiliary" sinput int ExtMagicNumber =123456; // EA Magic Number sinput bool ExtDebugMessage=true; // print debug messagesПри запуске такого советника в тестере стратегий появляется возможность двойным кликом по имени группы сворачивать и разворачить блок входных параметров, а также одним кликом по чекбоксу группы выделять все её параметры для оптимизации.
#import "lib.dll" int func(); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int func() { return(0); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print( func() ); }Ранее компиляция такого кода выдавала ошибку:
'func' - ambiguous call to overloaded function with the same parameters could be one of 2 function(s) int func() int func()Теперь вместо ошибки по умолчанию будет использоваться встроенная функция MQL, как имеющая больший приоритет. А для вызова импортированной функции необходимо явно указать область видимости:
void OnStart() { Print( lib::func() ); }
if(condition) { //--- }
// до стилизации ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop); // после стилизации ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);
// до стилизации if(x==1&y!=2) { int a=0; } // после стилизации if(x == 1 & y != 2) { int a = 0; }
Добавлен перевод пользовательского интерфейса на 18 новых языков:
В общей сложности интерфейс платформы теперь переведен на 50 языков, в сумме они являются родными для более чем 4 миллиардов человек.
Для переключения интерфейса на свой язык воспользуйтесь меню "Просмотр / Язык" в верхней части терминала.
Обновлена документация.
Исправления по крешлогам.
Обновление будет доступно через систему Live Update.
Python является современным высокоуровневым языком программирования для разработки сценариев и приложений. Содержит множество библиотек для машинного обучения, автоматизации процессов, анализа и визуализации данных.
Пакет MetaTrader для Python предназначен для удобного и быстрого получения биржевой информации через межпроцессное взаимодействие прямо из терминала MetaTrader 5. Полученные таким образом данные можно дальше использовать для статистических вычислений и машинного обучения.
Подключение
Функции
bool TesterDeposit( double money // размер вносимой суммы );
Обновлена документация.
Обновление будет доступно через систему LiveUpdate.
bool CalendarCountryById( const long country_id, // идентификатор страны MqlCalendarCountry& country // описание страны );CalendarEventById — получение описания события по идентификатору.
bool CalendarEventById( const long event_id, // идентификатор события MqlCalendarEvent& event // описание события );CalendarValueById — получение описания значения события по идентификатору.
bool CalendarValueById( const long value_id, // идентификатор значения MqlCalendarValue& value // описание значения );CalendarEventByCountry — получение массива доступных новостей по стране.
bool CalendarEventByCountry( string country_code, // код страны MqlCalendarEvent& events[] // массив событий );CalendarEventByCurrency — получение массива доступных новостей по валюте, на которую они влияют.
bool CalendarEventByCurrency( string currency, // валюта MqlCalendarEvent& events[] // массив событий );CalendarValueHistoryByEvent — получение массива значений за указанный период времени по идентификатору события.
bool CalendarValueHistoryByEvent( ulong event_id, // идентификатор события MqlCalendarValue& values[], // массив значений datetime datetime_from, // начальная дата datetime datetime_to=0 // конечная дата );CalendarValueHistory — получение массива значений по всем событиям за заданный период времени с фильтрацией по стране и/или валюте.
bool CalendarValueHistory( MqlCalendarValue& values[], // массив значений datetime datetime_from, // начало периода datetime datetime_to=0, // конец периода string country_code=NULL, // код страны string currency=NULL // валюта );CalendarValueLastByEvent — получение массива последних значений события по идентификатору. Эта функция позволяет запрашивать только те значения, которые изменились с момента последнего запроса. Для этого используется ее in/out параметр "change_id".
bool CalendarValueHistory( ulong event_id, // идентификатор события ulong& change_id, // идентификатор последнего изменения календаря MqlCalendarValue& values[] // массив значений );CalendarValueLast — получение массива последних значений по всем событиям с фильтрацией по стране и/или валюте. Эта функция позволяет запрашивать только те значения, которые изменились с момента последнего запроса. Аналогично CalendarValueLastByEvent, для запроса используется свойство "change_id".
bool CalendarValueHistory( ulong event_id, // идентификатор события ulong& change_id, // идентификатор последнего изменения календаря MqlCalendarValue& values[], // массив значений string country_code=NULL, // код страны string currency=NULL // валюта );
struct MqlCalendarCountry { ulong id; // идентификатор страны ISO 3166-1 string name; // текстовое название страны string code; // кодовое имя страны ISO 3166-1 alpha-2 string currency; // код валюты страны string currency_symbol; // символ/знак валюты страны string url_name; // имя страны, используемое в URL на сайте mql5.com };MqlCalendarEvent — описание события.
struct MqlCalendarEvent { ulong id; // идентификатор события ENUM_CALENDAR_EVENT_TYPE type; // тип события ENUM_CALENDAR_EVENT_SECTOR sector; // сектор, к которому относится событие ENUM_CALENDAR_EVENT_FREQUENCY frequency; // периодичность публикации события ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // режим публикции события по времени ulong country_id; // идентификатор страны ENUM_CALENDAR_EVENT_UNIT unit; // единица измерения значения события ENUM_CALENDAR_EVENT_IMPORTANCE importance; // важность события ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // множитель значения события uint digits; // количество знаков после запятой в значении события string source_url; // URL источника string event_code; // код события string name; // текстовое имя события на языке терминала };MqlCalendarValue — описание значения события.
struct MqlCalendarValue { ulong id; // идентификатор значения ulong event_id; // идентификатор события datetime time; // время и дата события datetime period; // отчетный период события int revision; // ревизия публикуемого индикатора по отношению к отчетному периоду long actual_value; // актуальное значение события long prev_value; // предыдущее значение события long revised_prev_value; // пересмотренное предыдущее значение события long forecast_value; // прогнозное значение события ENUM_CALENDAR_EVENT_IMPACRT impact_type; // потенциальное влияние на курс валюты };
enum ENUM_CALENDAR_EVENT_FREQUENCY { CALENDAR_FREQUENCY_NONE =0, // не используется CALENDAR_FREQUENCY_WEEK =1, // неделя CALENDAR_FREQUENCY_MONTH =2, // месяц CALENDAR_FREQUENCY_QUARTER =3, // квартал CALENDAR_FREQUENCY_YEAR =4, // год CALENDAR_FREQUENCY_DAY =5, // день }; enum ENUM_CALENDAR_EVENT_TYPE { CALENDAR_TYPE_EVENT =0, // событие(митинг, речь и т.д.) CALENDAR_TYPE_INDICATOR =1, // индикатор CALENDAR_TYPE_HOLIDAY =2, // праздник }; enum ENUM_CALENDAR_EVENT_SECTOR { CALENDAR_SECTOR_NONE =0, // нет CALENDAR_SECTOR_MARKET =1, // рынок CALENDAR_SECTOR_GDP =2, // GDP CALENDAR_SECTOR_JOBS =3, // труд CALENDAR_SECTOR_PRICES =4, // цены CALENDAR_SECTOR_MONEY =5, // деньги CALENDAR_SECTOR_TRADE =6, // торговля CALENDAR_SECTOR_GOVERNMENT =7, // правительство CALENDAR_SECTOR_BUSINESS =8, // бизнес CALENDAR_SECTOR_CONSUMER =9, // потребитель CALENDAR_SECTOR_HOUSING =10, // жилье CALENDAR_SECTOR_TAXES =11, // налоги CALENDAR_SECTOR_HOLIDAYS =12, // праздники }; enum ENUM_CALENDAR_EVENT_IMPORTANCE { CALENDAR_IMPORTANCE_NONE =0, // нет CALENDAR_IMPORTANCE_LOW =1, // низкая CALENDAR_IMPORTANCE_MODERATE =2, // средняя CALENDAR_IMPORTANCE_HIGH =3, // высокая }; enum ENUM_CALENDAR_EVENT_UNIT { CALENDAR_UNIT_NONE =0, // нет CALENDAR_UNIT_PERCENT =1, // проценты CALENDAR_UNIT_CURRENCY =2, // национальная валюта CALENDAR_UNIT_HOUR =3, // количество часов CALENDAR_UNIT_JOB =4, // количество рабочих мест CALENDAR_UNIT_RIG =5, // количество вышек CALENDAR_UNIT_USD =6, // доллары США CALENDAR_UNIT_PEOPLE =7, // число людей CALENDAR_UNIT_MORTGAGE =8, // количество ипотечных кредитов CALENDAR_UNIT_VOTE =9, // число голосов CALENDAR_UNIT_BARREL =10, // количество баррелей CALENDAR_UNIT_CUBICFEET =11, // объем в кубических футах CALENDAR_UNIT_POSITION =12, // количество рабочих мест CALENDAR_UNIT_BUILDING =13 // количество строений }; enum ENUM_CALENDAR_EVENT_MULTIPLIER { CALENDAR_MULTIPLIER_NONE =0, // нет CALENDAR_MULTIPLIER_THOUSANDS =1, // тысячи CALENDAR_MULTIPLIER_MILLIONS =2, // миллионы CALENDAR_MULTIPLIER_BILLIONS =3, // миллиарды CALENDAR_MULTIPLIER_TRILLIONS =4, // триллионы }; enum ENUM_CALENDAR_EVENT_IMPACRT { CALENDAR_IMPACT_NA =0, // неизвестно CALENDAR_IMPACT_POSITIVE =1, // положительное CALENDAR_IMPACT_NEGATIVE =2, // отрицательное }; enum ENUM_CALENDAR_EVENT_TIMEMODE { CALENDAR_TIMEMODE_DATETIME =0, // источник публикует точное время CALENDAR_TIMEMODE_DATE =1, // событие занимает весь день CALENDAR_TIMEMODE_NOTIME =2, // источник не публикует время по событию CALENDAR_TIMEMODE_TENTATIVE =3, // источник не публикует заранее точного времени события, только день, время уточняется по факту наступления события };
ERR_CALENDAR_MORE_DATA =5400, // массив мал для всего результата (отданы значения, которые поместились в массив) ERR_CALENDAR_TIMEOUT =5401, // превышен таймаут ожидания ответа на запрос данных из календаря ERR_CALENDAR_NO_DATA =5402, // данные не обнаружены
bool CharArrayToStruct( void& struct_object, // структура const uchar& char_array[], // массив uint start_pos=0 // начальная позиция в массиве );StructToCharArray — копирует POD-структуру в массив типа uchar.
bool StructToCharArray( const void& struct_object, // структура uchar& char_array[], // массив uint start_pos=0 // начальная позиция в массиве );
ushort MathSwap(ushort value); uint MathSwap(uint value); ulong MathSwap(ulong value);
bool StringReserve( string& string_var, // строка uint new_capacity // размер буфера для хранения строки );StringSetLength — устанавливает для строки указанную длину в символах.
bool StringSetLength( string& string_var, // строка uint new_length // новая длина строки );
bool ArrayRemove( void& array[], // массив любого типа uint start, // с какого индекса начинаем удалять uint count=WHOLE_ARRAY // количество элементов );ArrayInsert — вставляет в массив-приемник из массива-источника указанное число элементов, начиная с указанного индекса.
bool ArrayInsert( void& dst_array[], // массив-приемник const void& src_array[], // массив источник uint dst_start, // индекс в массиве-приемнике для вставки uint src_start=0, // индекс в массиве-источнике для копирования uint count=WHOLE_ARRAY // количество вставляемых элементов );ArrayReverse — разворачивает в массиве указанное число элементов, начиная с указанного индекса.
bool ArrayReverse( void& array[], // массив любого типа uint start=0, // с какого индекса начинаем переворачивать массив uint count=WHOLE_ARRAY // количество элементов );
int CustomBookAdd( const string symbol, // имя символа const MqlBookInfo& books[] // массив с описаниями элементов стакана цен uint count=WHOLE_ARRAY // количество элементов, которые будут использованы );
bool CustomSymbolCreate( const string symbol_name, // имя пользовательского символа const string symbol_path="", // название группы, в которой будет создан символ const string symbol_origin=NULL // имя символа, на основе которого будет создан пользовательский символ );Имя символа, из которого будут скопированы свойства создаваемого пользовательского символа, указывается в параметре "symbol_origin".
Добавлен перевод пользовательского интерфейса на Хорватский язык.
Обновлена документация.
#import "TestLib.dll" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int x=41; TestClass::Inc(x); Print(x); }C# код функции Inc класса TestClass выглядит следующим образом:
public class TestClass { public static void Inc(ref int x) { x++; } }В результате выполнения скрипт вернет значение 42.
struct MqlTick
{
datetime time; // Время последнего обновления цен
double bid; // Текущая цена Bid
double ask; // Текущая цена Ask
double last; // Текущая цена последней сделки (Last)
ulong volume; // Объем для текущей цены Last
long time_msc; // Время последнего обновления цен в миллисекундах
uint flags; // Флаги тиков
double volume_real; // Объем для текущей цены Last c повышенной точностью
};
struct MqlBookInfo { ENUM_BOOK_TYPE type; // тип заявки из перечисления ENUM_BOOK_TYPE double price; // цена long volume; // объем double volume_real; // объем с повышенной точностью };
//+------------------------------------------------------------------+ //| Default packing | //+------------------------------------------------------------------+ struct A { char a; int b; }; //+------------------------------------------------------------------+ //| Specified packing | //+------------------------------------------------------------------+ struct B pack(4) { char a; int b; }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print("sizeof(A)=",sizeof(A)); Print("sizeof(B)=",sizeof(B)); } //+------------------------------------------------------------------+Вывод:
sizeof(A)=5 sizeof(B)=8Более подробная информация о выравнивании в структурах доступно в MSDN.
enum Main { PRICE_CLOSE_, PRICE_OPEN_ }; input Main Inp=PRICE_CLOSE; //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void OnStart() { }Компилятор выдаст предупреждение:
class X { }; void f(int) { } template<typename T> void a(T*) { new T(2); } // ранее в этом месте компилятор выдавал ошибку template<typename T> void a() { f(0); } void OnInit() { a<X>(); }
Обновлена документация.