Переход с MQL4 на MQL5
Введение
У большинства разработчиков торговых стратегий накопились целые коллекции индикаторов и советников на языке MQL4. Переход на новую платформу МТ5 без них теряет смысл. Заново всё переписывать очень утомительно. Вот если бы был словарь-переводчик с одной версии языка на другую, да ещё с примерами.
Предлагаю свой вариант такого словаря, построенного как справочник.
1. Периоды графиков
В MQL5 изменились константы периодов (были добавлены новые периоды M2, M3, M4, M6, M10, M12, H2, H3, H6, H8, H12), для конвертации периодов MQL4 можно использовать следующую функцию:
ENUM_TIMEFRAMES TFMigrate(int tf) { switch(tf) { case 0: return(PERIOD_CURRENT); case 1: return(PERIOD_M1); case 5: return(PERIOD_M5); case 15: return(PERIOD_M15); case 30: return(PERIOD_M30); case 60: return(PERIOD_H1); case 240: return(PERIOD_H4); case 1440: return(PERIOD_D1); case 10080: return(PERIOD_W1); case 43200: return(PERIOD_MN1); case 2: return(PERIOD_M2); case 3: return(PERIOD_M3); case 4: return(PERIOD_M4); case 6: return(PERIOD_M6); case 10: return(PERIOD_M10); case 12: return(PERIOD_M12); case 16385: return(PERIOD_H1); case 16386: return(PERIOD_H2); case 16387: return(PERIOD_H3); case 16388: return(PERIOD_H4); case 16390: return(PERIOD_H6); case 16392: return(PERIOD_H8); case 16396: return(PERIOD_H12); case 16408: return(PERIOD_D1); case 32769: return(PERIOD_W1); case 49153: return(PERIOD_MN1); default: return(PERIOD_CURRENT); } }
Следует особо отметить, что в MQL5 численные значения констант периодов графиков (начиная с H1) не совпадают с количеством минут в баре (например, в MQL5 численное значение константы PERIOD_H1=16385, а в MQL4 PERIOD_H1=60). Данное обстоятельство необходимо учитывать при переносе на MQL5, если в программе на MQL4 использовались численные значения для проведения расчетов.
Для того, чтобы узнать количество минут заданного периода графика, нужно значение функции PeriodSeconds разделить на 60.
2. Объявление констант
Не все константы из MQL4 перешли в MQL5, поэтому их надо объявить дополнительно://+------------------------------------------------------------------+ //| InitMQL4.mqh | //| Copyright DC2008 | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "keiji" #property copyright "DC2008" #property link "https://www.mql5.com" //--- Объявление констант #define OP_BUY 0 //Покупка #define OP_SELL 1 //Продажа #define OP_BUYLIMIT 2 //Отложенный ордер BUY LIMIT #define OP_SELLLIMIT 3 //Отложенный ордер SELL LIMIT #define OP_BUYSTOP 4 //Отложенный ордер BUY STOP #define OP_SELLSTOP 5 //Отложенный ордер SELL STOP //--- #define MODE_OPEN 0 #define MODE_CLOSE 3 #define MODE_VOLUME 4 #define MODE_REAL_VOLUME 5 #define MODE_TRADES 0 #define MODE_HISTORY 1 #define SELECT_BY_POS 0 #define SELECT_BY_TICKET 1 //--- #define DOUBLE_VALUE 0 #define FLOAT_VALUE 1 #define LONG_VALUE INT_VALUE //--- #define CHART_BAR 0 #define CHART_CANDLE 1 //--- #define MODE_ASCEND 0 #define MODE_DESCEND 1 //--- #define MODE_LOW 1 #define MODE_HIGH 2 #define MODE_TIME 5 #define MODE_BID 9 #define MODE_ASK 10 #define MODE_POINT 11 #define MODE_DIGITS 12 #define MODE_SPREAD 13 #define MODE_STOPLEVEL 14 #define MODE_LOTSIZE 15 #define MODE_TICKVALUE 16 #define MODE_TICKSIZE 17 #define MODE_SWAPLONG 18 #define MODE_SWAPSHORT 19 #define MODE_STARTING 20 #define MODE_EXPIRATION 21 #define MODE_TRADEALLOWED 22 #define MODE_MINLOT 23 #define MODE_LOTSTEP 24 #define MODE_MAXLOT 25 #define MODE_SWAPTYPE 26 #define MODE_PROFITCALCMODE 27 #define MODE_MARGINCALCMODE 28 #define MODE_MARGININIT 29 #define MODE_MARGINMAINTENANCE 30 #define MODE_MARGINHEDGED 31 #define MODE_MARGINREQUIRED 32 #define MODE_FREEZELEVEL 33 //--- #define EMPTY -1Примечание. Константы MQL4 и MQL5 имеют различия, поэтому объявим их в отдельном файле для дальнейшего использования.
3. Предопределённые переменные
MQL4 | MQL5 | Описание |
---|---|---|
double Ask | MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask; | Ask Последняя известная цена продажи (запрашиваемая цена) текущего инструмента. SymbolInfoTick |
int Bars | int Bars=Bars(_Symbol,_Period); | Bars Количество баров на текущем графике. Bars |
double Bid | MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Bid=last_tick.bid; | Bid Последняя известная цена покупки (предложение на покупку) текущего инструмента. SymbolInfoTick |
double Close[] | double Close[]; int count; // сколько копируем ArraySetAsSeries(Close,true); CopyClose(_Symbol,_Period,0,count,Close); | Close Массив-таймсерия, содержащий цены закрытия каждого бара текущего графика. CopyClose, ArraySetAsSeries |
int Digits | int Digits=_Digits; | Digits Количество цифр после десятичной точки в цене текущего инструмента. _Digits |
double High[] | double High[]; int count; // сколько копируем ArraySetAsSeries(High,true); CopyHigh(_Symbol,_Period,0,count,High); | High Массив-таймсерия, содержащий максимальные цены каждого бара текущего графика. CopyHigh, ArraySetAsSeries |
double Low[] | double Low[]; int count; // сколько копируем ArraySetAsSeries(Low,true); CopyLow(_Symbol,_Period,0,count,Low); | Low Массив-таймсерия, содержащий минимальные цены каждого бара текущего графика. CopyLow, ArraySetAsSeries |
double Open[] | double Open[]; int count; // сколько копируем ArraySetAsSeries(Open,true); CopyOpen(_Symbol,_Period,0,count,Open); | Open Массив-таймсерия, содержащий цены открытия каждого бара текущего графика. CopyOpen, ArraySetAsSeries |
double Point | double Point=_Point; | Point Размер пункта текущего инструмента в валюте котировки. _Point |
datetime Time[] | datetime Time[]; int count; // сколько копируем ArraySetAsSeries(Time,true); CopyTime(_Symbol,_Period,0,count,Time); | Time Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Данные типа datetime представляют собой время в секундах, прошедшее с 00:00 1 января 1970 года. CopyTime, ArraySetAsSeries |
double Volume[] | long Volume[]; int count; // сколько копируем ArraySetAsSeries(Volume,true); CopyTickVolume(_Symbol,_Period,0,count,Volume); | Volume Массив-таймсерия, содержащий тиковые объемы каждого бара текущего графика. CopyTickVolume, ArraySetAsSeries |
4. Информация о счёте
MQL4 | MQL5 | Описание |
---|---|---|
double AccountBalance() | double AccountInfoDouble(ACCOUNT_BALANCE) | AccountBalance Возвращает значение баланса активного счета (сумма денежных средств на счете). AccountInfoDouble |
double AccountCredit() | double AccountInfoDouble(ACCOUNT_CREDIT) | AccountCredit Возвращает значение кредита для активного счета. AccountInfoDouble |
string AccountCompany() | string AccountInfoString(ACCOUNT_COMPANY) | AccountCompany Возвращает название брокерской компании, в которой зарегистрирован текущий счет. AccountInfoString |
string AccountCurrency() | string AccountInfoString(ACCOUNT_CURRENCY) | AccountCurrency Возвращает наименование валюты для текущего счета. AccountInfoString |
double AccountEquity() | double AccountInfoDouble(ACCOUNT_EQUITY) | AccountEquity Возвращает сумму собственных средств для текущего счета. Расчет equity зависит от настроек торгового сервера. AccountInfoDouble |
double AccountFreeMargin() | double AccountInfoDouble(ACCOUNT_FREEMARGIN) | AccountFreeMargin Возвращает значение свободных средств, разрешенных для открытия позиций на текущем счете. AccountInfoDouble |
double AccountFreeMarginCheck(string symbol, int cmd, double volume) | Аналога НЕТ | AccountFreeMarginCheck Возвращает размер свободных средств, которые останутся после открытия указанной позиции по текущей цене на текущем счете. |
double AccountFreeMarginMode() | Аналога НЕТ | AccountFreeMarginMode Режим расчета свободных средств, разрешенных для открытия позиций на текущем счете. |
int AccountLeverage() | long AccountInfoInteger(ACCOUNT_LEVERAGE) | AccountLeverage Возвращает значение плеча для текущего счета. AccountInfoInteger |
double AccountMargin() | double AccountInfoDouble(ACCOUNT_MARGIN) | AccountMargin Возвращает сумму залоговых средств, используемых для поддержания открытых позиций на текущем счете. AccountInfoDouble |
string AccountName() | string AccountInfoString(ACCOUNT_NAME) | AccountName Возвращает имя пользователя текущего счета. AccountInfoString |
int AccountNumber() | long AccountInfoInteger(ACCOUNT_LOGIN) | AccountNumber Возвращает номер текущего счета. AccountInfoInteger |
double AccountProfit() | double AccountInfoDouble(ACCOUNT_PROFIT) | AccountProfit Возвращает значение прибыли для текущего счета в базовой валюте. AccountInfoDouble |
string AccountServer() | string AccountInfoString(ACCOUNT_SERVER) | AccountServer Возвращает имя активного сервера. AccountInfoString |
int AccountStopoutLevel() | double AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) | AccountStopoutLevel Возвращает значение уровня, по которому определяется состояние Stop Out. AccountInfoDouble |
int AccountStopoutMode() | int AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE) | AccountStopoutMode Возвращает режим расчета уровня Stop Out. AccountInfoInteger |
5. Операции с массивами
MQL4 | MQL5 | Описание |
---|---|---|
int ArrayBsearch(double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND) | int ArrayBsearch(double array[], double searched_value ) | ArrayBsearch Возвращает индекс первого найденного элемента в первом измерении массива. ArrayBsearch |
int ArrayCopy(object &dest[], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY) | int ArrayCopy(void dst_array[], void src_array[], int dst_start=0, int src_start=0, int cnt=WHOLE_ARRAY ) | ArrayCopy Копирует один массив в другой. Массивы должны иметь одинаковый тип. ArrayCopy |
int ArrayCopyRates(double &dest_array[], string symbol=NULL, int timeframe=0) | Аналога НЕТ | ArrayCopyRates Копирует в двухмерный массив, вида RateInfo[][6], данные баров текущего графика и возвращает количество скопированных баров, либо -1 в случае неудачи. |
int ArrayCopySeries(double &array[], int series_index, string symbol=NULL, int timeframe=0) | int ArrayCopySeriesMQL4(double &array[], int series_index, string symbol, int tf=0) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int count=Bars(symbol,timeframe); switch(series_index) { case MODE_OPEN: return(CopyOpen(symbol,timeframe,0,count,array)); case MODE_LOW: return(CopyLow(symbol,timeframe,0,count,array)); case MODE_HIGH: return(CopyHigh(symbol,timeframe,0,count,array)); case MODE_CLOSE: return(CopyClose(symbol,timeframe,0,count,array)); default: return(0); } return(0); } | ArrayCopySeries Копирует массив-таймсерию в пользовательский массив и возвращает количество скопированных элементов. CopyOpen, CopyLow, CopyHigh, CopyClose, Bars |
int ArrayDimension(object array[]) | Аналога НЕТ | ArrayDimension Возвращает ранг многомерного массива. |
bool ArrayGetAsSeries(object array[]) | bool ArrayGetAsSeries(void array) | ArrayGetAsSeries Возвращается TRUE, если массив организован как таймсерия (элементы массива индексируются от последнего к первому), иначе возвращается FALSE. ArrayGetAsSeries |
int ArrayInitialize(double &array[], double value) | int ArrayInitializeMQL4(double &array[], double value) { ArrayInitialize(array,value); return(ArraySize(array)); } | ArrayInitialize Устанавливает все элементы числового массива в одну величину. Возвращает количество инициализированных элементов. ArrayInitialize, ArraySize |
bool ArrayIsSeries(object array[]) | bool ArrayIsSeries(void array[]) | ArrayIsSeries Возвращается TRUE, если проверяемый массив является массивом-таймсерией (Time[],Open[],Close[],High[],Low[] или Volume[]), иначе возвращается FALSE. ArrayIsSeries |
int ArrayMaximum(double array[], int count=WHOLE_ARRAY, int start=0) | int ArrayMaximumMQL4(double &array[], int count=WHOLE_ARRAY, int start=0) { return(ArrayMaximum(array,start,count)); } | ArrayMaximum Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве. ArrayMaximum |
int ArrayMinimum(double array[], int count=WHOLE_ARRAY, int start=0) | int ArrayMinimumMQL4(double &array[], int count=WHOLE_ARRAY, int start=0) { return(ArrayMinimum(array,start,count)); } | ArrayMinimum Поиск элемента с минимальным значением. Функция возвращает позицию минимального элемента в массиве. ArrayMinimum |
int ArrayRange(object array[], int range_index) | int ArrayRange(void array[], int rank_index ) | ArrayRange Возвращает число элементов в указанном измерении массива. ArrayRange |
int ArrayResize(object &array[], int new_size) | int ArrayResize(void array[], int new_size, int allocated_size=0 ) | ArrayResize Устанавливает новый размер в первом измерении массива. ArrayResize |
bool ArraySetAsSeries(double &array[], bool set) | bool ArraySetAsSeries(void array[], bool set ) | ArraySetAsSeries Устанавливает направление индексирования в массиве. Значение параметра set TRUE устанавливает направление индексирования в обратном порядке, то есть, последний элемент имеет нулевой индекс. ArraySetAsSeries |
int ArraySize(object array[]) | int ArraySize(void array[]) | ArraySize Возвращает количество элементов массива. ArraySize |
int ArraySort(double &array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND) | int ArraySortMQL4(double &array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND) { switch(sort_dir) { case MODE_ASCEND: ArraySetAsSeries(array,true); case MODE_DESCEND: ArraySetAsSeries(array,false); default: ArraySetAsSeries(array,true); } ArraySort(array); return(0); } | ArraySort Сортировка числовых массивов по первому измерению. Массивы-таймсерии не могут быть отсортированы. ArraySort, ArraySetAsSeries |
6. Проверка состояния
MQL4 | MQL5 | Описание |
---|---|---|
int GetLastError() | int GetLastError() | GetLastError Функция возвращает код последней ошибки. GetLastError |
bool IsConnected() | bool TerminalInfoInteger(TERMINAL_CONNECTED) | IsConnected Возвращает состояние главного соединения клиентского терминала с сервером, по которому производится подкачка данных. TerminalInfoInteger |
bool IsDemo() | bool IsDemoMQL4() { if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_DEMO) return(true); else return(false); } | IsDemo Возвращается TRUE, если программа работает на демонстрационном счете, в противном случае возвращает FALSE. AccountInfoInteger |
bool IsDllsAllowed() | bool TerminalInfoInteger(TERMINAL_DLLS_ALLOWED) | IsDllsAllowed Возвращает TRUE, если DLL вызов функции разрешены для эксперта, иначе возвращает FALSE. TerminalInfoInteger |
bool IsExpertEnabled() | bool AccountInfoInteger(ACCOUNT_TRADE_EXPERT) | IsExpertEnabled Возвращает TRUE, если в клиентском терминале разрешен запуск экспертов, иначе возвращает FALSE. AccountInfoInteger |
bool IsLibrariesAllowed() | bool MQLInfoInteger(MQL5_DLLS_ALLOWED) | IsLibrariesAllowed Возвращает TRUE, если эксперт может назвать библиотечную функцию, иначе возвращает FALSE. MQLInfoInteger |
bool IsOptimization() | bool MQLInfoInteger(MQL5_OPTIMIZATION) | IsOptimization Возвращается TRUE, если эксперт работает в режиме оптимизации тестирования, иначе возвращает FALSE. MQLInfoInteger |
bool IsStopped() | bool IsStopped() | IsStopped Возвращается TRUE, если программа (эксперт или скрипт) получила команду на завершение своей работы, иначе возвращает FALSE. IsStopped |
bool IsTesting() | bool MQLInfoInteger(MQL5_TESTING) | IsTesting Возвращается TRUE, если эксперт работает в режиме тестирования, иначе возвращает FALSE. MQLInfoInteger |
bool IsTradeAllowed() | bool MQLInfoInteger(MQL5_TRADE_ALLOWED) | IsTradeAllowed Возвращается TRUE, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает FALSE. MQLInfoInteger |
bool IsTradeContextBusy() | Аналога НЕТ | IsTradeContextBusy Возвращается TRUE, если поток для выполнения торговых операций занят, иначе возвращает FALSE. |
bool IsVisualMode() | bool MQLInfoInteger(MQL5_VISUAL_MODE) | IsVisualMode Возвращается TRUE, если эксперт тестируется в режиме визуализации, иначе возвращает FALSE. MQLInfoInteger |
int UninitializeReason() | int UninitializeReason() | UninitializeReason Возвращает код причины завершения экспертов, пользовательских индикаторов и скриптов. UninitializeReason |
7. Клиентский терминал
MQL4 | MQL5 | Описание |
---|---|---|
string TerminalCompany() | string TerminalInfoString(TERMINAL_COMPANY) | TerminalCompany Возвращает наименование компании-владельца клиентского терминала. TerminalInfoString |
string TerminalName() | string TerminalInfoString(TERMINAL_NAME) | TerminalName Возвращает имя клиентского терминала. TerminalInfoString |
string TerminalPath() | string TerminalInfoString(TERMINAL_PATH) | TerminalPath Возвращает директорий, из которого запущен клиентский терминал. TerminalInfoString |
8. Общие функции
MQL4 | MQL5 | Описание |
---|---|---|
void Alert(...) | void Alert(argument,...) | Alert Отображает диалоговое окно, содержащие пользовательские данные. Alert |
void Comment(...) | void Comment(argument,...) | Comment Функция выводит комментарий, определенный пользователем, в левый верхний угол графика. Comment |
int GetTickCount() | uint GetTickCount() | GetTickCount Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. GetTickCount |
double MarketInfo(string symbol, int type) | double MarketInfoMQL4(string symbol, int type) { switch(type) { case MODE_LOW: return(SymbolInfoDouble(symbol,SYMBOL_LASTLOW)); case MODE_HIGH: return(SymbolInfoDouble(symbol,SYMBOL_LASTHIGH)); case MODE_TIME: return(SymbolInfoInteger(symbol,SYMBOL_TIME)); case MODE_BID: { MqlTick last_tick; SymbolInfoTick(symbol,last_tick); double Bid=last_tick.bid; return(Bid); } case MODE_ASK: { MqlTick last_tick; SymbolInfoTick(symbol,last_tick); double Ask=last_tick.ask; return(Ask); } case MODE_POINT: return(SymbolInfoDouble(symbol,SYMBOL_POINT)); case MODE_DIGITS: return(SymbolInfoInteger(symbol,SYMBOL_DIGITS)); case MODE_SPREAD: return(SymbolInfoInteger(symbol,SYMBOL_SPREAD)); case MODE_STOPLEVEL: return(SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL)); case MODE_LOTSIZE: return(SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE)); case MODE_TICKVALUE: return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE)); case MODE_TICKSIZE: return(SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE)); case MODE_SWAPLONG: return(SymbolInfoDouble(symbol,SYMBOL_SWAP_LONG)); case MODE_SWAPSHORT: return(SymbolInfoDouble(symbol,SYMBOL_SWAP_SHORT)); case MODE_STARTING: return(0); case MODE_EXPIRATION: return(0); case MODE_TRADEALLOWED: return(0); case MODE_MINLOT: return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN)); case MODE_LOTSTEP: return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); case MODE_MAXLOT: return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX)); case MODE_SWAPTYPE: return(SymbolInfoInteger(symbol,SYMBOL_SWAP_MODE)); case MODE_PROFITCALCMODE: return(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE)); case MODE_MARGINCALCMODE: return(0); case MODE_MARGININIT: return(0); case MODE_MARGINMAINTENANCE: return(0); case MODE_MARGINHEDGED: return(0); case MODE_MARGINREQUIRED: return(0); case MODE_FREEZELEVEL: return(SymbolInfoInteger(symbol,SYMBOL_TRADE_FREEZE_LEVEL)); default: return(0); } return(0); } | MarketInfo Возвращает различную информацию о финансовых инструментах, перечисленных в окне "Обзор рынка". SymbolInfoInteger, SymbolInfoDouble, Bid, Ask |
int MessageBox(string text=NULL, string caption=NULL, int flags=EMPTY) | int MessageBox(string text, string caption=NULL, int flags=0) | MessageBox Функция MessageBox создает и отображает окно сообщений, а также управляет им. MessageBox |
void PlaySound(string filename) | bool PlaySound(string filename) | PlaySound Функция воспроизводит звуковой файл. PlaySound |
void Print(...) | void Print(argument,...) | Print Печатает некоторое сообщение в журнал экспертов. |
bool SendFTP(string filename, string ftp_path=NULL) | bool SendFTP(string filename, string ftp_path=NULL) | SendFTP Посылает файл по адресу, указанному в окне настроек на закладке "Публикация". SendFTP |
void SendMail(string subject, string some_text) | bool SendMail(string subject, string some_text) | SendMail Посылает электронное письмо по адресу, указанному в окне настроек на закладке "Почта". SendMail |
void Sleep(int milliseconds) | void Sleep(int milliseconds) | Sleep Функция задерживает выполнение текущего эксперта или скрипта на определенный интервал. Sleep |
9. Преобразования данных
MQL4 | MQL5 | Описание |
---|---|---|
string CharToStr(int char_code) | string CharToString(int char_code) | CharToStr Преобразование кода символа в односимвольную строку. CharToString |
string DoubleToStr(double value, int digits) | string DoubleToString(double value, int digits=8) | DoubleToStr Преобразование числового значения в текстовую строку, содержащую символьное представление числа в указанном формате точности. DoubleToString |
double NormalizeDouble(double value, int digits) | double NormalizeDouble(double value, int digits) | NormalizeDouble Округление числа с плавающей запятой до указанной точности. NormalizeDouble |
double StrToDouble(string value) | double StringToDouble(string value) | StrToDouble Преобразование строки, содержащей символьное представление числа, в число типа double (формат двойной точности с плавающей точкой). StringToDouble |
int StrToInteger(string value) | long StringToInteger(string value) | StrToInteger Преобразование строки, содержащей символьное представление числа, в число типа int (целое). StringToInteger |
datetime StrToTime(string value) | datetime StringToTime(string value) | StrToTime Преобразование строки, содержащей время и/или дату в формате "yyyy.mm.dd [hh:mi]", в число типа datetime (количество секунд, прошедших с 01.01.1970). StringToTime |
string TimeToStr(datetime value, int mode=TIME_DATE|TIME_MINUTES) | string TimeToString(datetime value, int mode=TIME_DATE|TIME_MINUTES) | TimeToStr Преобразование значения, содержащего время в секундах, прошедшее с 01.01.1970, в строку формата "yyyy.mm.dd hh:mi". TimeToString |
10. Пользовательские индикаторы
MQL4 | MQL5 | Описание |
---|---|---|
void IndicatorBuffers(int count) | Аналога НЕТ | IndicatorBuffers Распределяет память для буферов, используемых для вычислений пользовательского индикатора. |
int IndicatorCounted() | int IndicatorCountedMQL4() { if(prev_calculated>0) return(prev_calculated-1); if(prev_calculated==0) return(0); return(0); } | IndicatorCounted Функция возвращает количество баров, не измененных после последнего вызова индикатора. OnCalculate |
void IndicatorDigits(int digits) | bool IndicatorSetInteger(INDICATOR_DIGITS,digits) | IndicatorDigits Установка формата точности (количество знаков после десятичной точки) для визуализации значений индикатора. IndicatorSetInteger |
void IndicatorShortName(string name) | bool IndicatorSetString(INDICATOR_SHORTNAME,name) | IndicatorShortName Установка "короткого" имени пользовательского индикатора для отображения в подокне индикатора и в окне DataWindow. IndicatorSetString |
void SetIndexArrow(int index, int code) | bool PlotIndexSetInteger(index,PLOT_ARROW,code) | SetIndexArrow Назначение значка для линии индикаторов, имеющей стиль DRAW_ARROW. PlotIndexSetInteger |
bool SetIndexBuffer(int index, double array[]) | bool SetIndexBuffer(index,array,INDICATOR_DATA) | SetIndexBuffer Связывает переменную-массив, объявленный на глобальном уровне, с предопределенным буфером пользовательского индикатора. SetIndexBuffer |
void SetIndexDrawBegin(int index, int begin) | bool PlotIndexSetInteger(index,PLOT_DRAW_BEGIN,begin) | SetIndexDrawBegin Установка порядкового номера бара от начала данных, с которого должна начинаться отрисовка указанной линии индикатора. PlotIndexSetInteger |
void SetIndexEmptyValue(int index, double value) | bool PlotIndexSetDouble(index,PLOT_EMPTY_VALUE,value) | SetIndexEmptyValue Устанавливает значение пустой величины для линии индикатора. PlotIndexSetDouble |
void SetIndexLabel(int index, string text) | bool PlotIndexSetString(index,PLOT_LABEL,text) | SetIndexLabel Установка имени линии индикатора для отображения информации в окне DataWindow и всплывающей подсказке. PlotIndexSetString |
void SetIndexShift(int index, int shift) | bool PlotIndexSetInteger(index,PLOT_SHIFT,shift) | SetIndexShift Установка смещения линии индикатора относительно начала графика. PlotIndexSetInteger |
void SetIndexStyle(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE) | void SetIndexStyleMQL4(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE) { if(width>-1) PlotIndexSetInteger(index,PLOT_LINE_WIDTH,width); if(clr!=CLR_NONE) PlotIndexSetInteger(index,PLOT_LINE_COLOR,clr); switch(type) { case 0: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE); case 1: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_SECTION); case 2: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_HISTOGRAM); case 3: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ARROW); case 4: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_ZIGZAG); case 12: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_NONE); default: PlotIndexSetInteger(index,PLOT_DRAW_TYPE,DRAW_LINE); } switch(style) { case 0: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_SOLID); case 1: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASH); case 2: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DOT); case 3: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOT); case 4: PlotIndexSetInteger(index,PLOT_LINE_STYLE,STYLE_DASHDOTDOT); default: return; } } | SetIndexStyle Устанавливает новый тип, стиль, ширину и цвет для указанной линии индикатора. PlotIndexSetInteger |
void SetLevelStyle(int draw_style, int line_width, color clr=CLR_NONE) | void SetLevelStyleMQL4(int draw_style, int line_width, color clr=CLR_NONE) { IndicatorSetInteger(INDICATOR_LEVELWIDTH,line_width); if(clr!=CLR_NONE) IndicatorSetInteger(INDICATOR_LEVELCOLOR,clr); switch(draw_style) { case 0: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_SOLID); case 1: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASH); case 2: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT); case 3: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASHDOT); case 4: IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DASHDOTDOT); default: return; } } | SetLevelStyle Устанавливает новый стиль, ширину и цвет для горизонтальных уровней индикатора, выводимого в отдельное окно. IndicatorSetInteger |
void SetLevelValue(int level, double value) | bool IndicatorSetDouble(INDICATOR_LEVELVALUE,level,value) | SetLevelValue Устанавливает значение для указанного горизонтального уровня индикатора, выводимого в отдельное окно. IndicatorSetDouble |
11. Дата и время
MQL4 | MQL5 | Описание |
---|---|---|
int Day() | int DayMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.day); } | Day Возвращает текущий день месяца, т.е день месяца последнего известного времени сервера. TimeCurrent, MqlDateTime |
int DayOfWeek() | int DayOfWeekMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.day_of_week); } | DayOfWeek Возвращает порядковый номер дня недели (воскресенье-0,1,2,3,4,5,6) последнего известного времени сервера. TimeCurrent, MqlDateTime |
int DayOfYear() | int DayOfYearMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.day_of_year); } | DayOfYear Возвращает текущий день года (1-1 января,..,365(6) - 31 декабря), т.е день года последнего известного времени сервера. TimeCurrent, MqlDateTime |
int Hour() | int HourMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.hour); } | Hour Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется). TimeCurrent, MqlDateTime |
int Minute() | int MinuteMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.min); } | Minute Возвращает текущую минуту (0,1,2,..59) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется). TimeCurrent, MqlDateTime |
int Month() | int MonthMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.mon); } | Month Возвращает номер текущего месяца (1-Январь,2,3,4,5,6,7,8,9,10,11,12), т.е. номер месяца последнего известного времени сервера. TimeCurrent, MqlDateTime |
int Seconds() | int SecondsMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.sec); } | Seconds Возвращает количество секунд, прошедших с начала текущей минуты последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется). TimeCurrent, MqlDateTime |
datetime TimeCurrent() | datetime TimeCurrent() | TimeCurrent Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года. TimeCurrent |
int TimeDay(datetime date) | int TimeDayMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.day); } | TimeDay Возвращает день месяца (1 - 31) для указанной даты. TimeToStruct, MqlDateTime |
int TimeDayOfWeek(datetime date) | int TimeDayOfWeekMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.day_of_week); } | TimeDayOfWeek Возвращает день недели (0-Воскресенье,1,2,3,4,5,6) для указанной даты. TimeToStruct, MqlDateTime |
int TimeDayOfYear(datetime date) | int TimeDayOfYearMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.day_of_year); } | TimeDayOfYear Возвращает день (1 - 1 января,..,365(6) - 31 декабря) года для указанной даты. TimeToStruct, MqlDateTime |
int TimeHour(datetime time) | int TimeHourMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.hour); } | TimeHour Возвращает час для указанного времени. TimeToStruct, MqlDateTime |
datetime TimeLocal() | datetime TimeLocal() | TimeLocal Возвращает локальное компьютерное время в виде количества секунд, прошедших после 00:00 1 января 1970 года. TimeLocal |
int TimeMinute(datetime time) | int TimeMinuteMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.min); } | TimeMinute Возвращает минуты для указанного времени. TimeToStruct, MqlDateTime |
int TimeMonth(datetime time) | int TimeMonthMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.mon); } | TimeMonth Возвращает номер месяца для указанного времени (1-Январь,2,3,4,5,6,7,8,9,10,11,12). TimeToStruct, MqlDateTime |
int TimeSeconds(datetime time) | int TimeSecondsMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.sec); } | TimeSeconds Возвращает количество секунд, прошедших с начала минуты для указанного времени. TimeToStruct, MqlDateTime |
int TimeYear(datetime time) | int TimeYearMQL4(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.year); } | TimeYear Возвращает год для указанной даты. Возвращаемая величина может быть в диапазоне 1970-2037. TimeToStruct, MqlDateTime |
int Year() | int YearMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.year); } | Year Возвращает текущий год, т.е. год последнего известного времени сервера. TimeCurrent, MqlDateTime |
12. Файловые операции
MQL4 | MQL5 | Описание |
---|---|---|
void FileClose(int handle) | void FileClose(int file_handle) | FileClose Закрытие файла, ранее открытого функцией FileOpen(). FileClose |
void FileDelete(string filename) | bool FileDelete(string file_name int common_flag=0) | FileDelete Удаление указанного файла. FileDelete |
void FileFlush(int handle) | void FileFlush(int file_handle) | FileFlush Сброс на диск всех данных, оставшихся в файловом буфере ввода-вывода. FileFlush |
bool FileIsEnding(int handle) | bool FileIsEnding(int file_handle) | FileIsEnding Возвращает TRUE, если файловый указатель находится в конце файла, иначе возвращает FALSE. FileIsEnding |
bool FileIsLineEnding(int handle) | bool FileIsLineEnding(int file_handle) | FileIsLineEnding Возвращает TRUE, если файловый указатель находится в конце строки файла формата CSV, иначе возвращает FALSE. FileIsLineEnding |
int FileOpen(string filename, int mode, int delimiter=';') | int FileOpen(string ile_name, int pen_flags, short delimiter='\t' uint codepage=CP_ACP) | FileOpen Открывает Файл для ввода и/или вывода. Возвращает файловый описатель открытого файла или -1 в случае неудачи. FileOpen |
int FileOpenHistory(string filename, int mode, int delimiter=';') | Аналога НЕТ | FileOpenHistory Открывает файл в текущей папке истории (каталог_терминала\history\server_name) или ее подпапках. Возвращает описатель файла или -1 в случае неудачи. |
int FileReadArray(int handle, object &array[], int start, int count) | uint FileReadArray(int file_handle, void array[], int start_item=0, int items_count=WHOLE_ARRAY) | FileReadArray Функция читает указанное число элементов из двоичного файла в массив. FileReadArray |
double FileReadDouble(int handle, int size=DOUBLE_VALUE) | double FileReadDoubleMQL4(int handle, int size=DOUBLE_VALUE) { return(FileReadDouble(handle)); } | FileReadDouble Функция читает число двойной точности с плавающей точкой (double) из текущей позиции бинарного файла. FileReadDouble |
int FileReadInteger(int handle, int size=LONG_VALUE) | int FileReadInteger(int file_handle, int size=INT_VALUE) | FileReadInteger Функция читает целое число из текущей позиции бинарного файла. FileReadInteger |
double FileReadNumber(int handle) | double FileReadNumber(int file_handle) | FileReadNumber Чтение числа с текущей позиции файла CSV до разделителя. FileReadNumber |
string FileReadString(int handle, int length=0) | string FileReadString(int file_handle, int size=-1) | FileReadString Функция читает строку с текущей позиции файла. FileReadString |
bool FileSeek(int handle, int offset, int origin) | bool FileSeekMQL4(long handle, int offset, ENUM_FILE_POSITION origin) { FileSeek(handle,offset,origin); return(true); } | FileSeek Функция перемещает файловый указатель на новую позицию, которая является смещением в байтах от начала, конца или текущей позиции файла. FileSeek |
int FileSize(int handle) | ulong FileSize(int file_handle) | FileSize Функция возвращает размер файла в байтах. FileSize |
int FileTell(int handle) | ulong FileTell(int file_handle) | FileTell Функция возвращает смещение текущей позицию файлового указателя от начала файла. FileTell |
int FileWrite(int handle,...) | uint FileWrite(int file_handle,...) | FileWrite Функция предназначена для записи данных в файл CSV, разделитель между данными включается автоматически. FileWrite |
int FileWriteArray(int handle, object array[], int start, int count) | int FileWriteArray(int file_handle, void array[], int start_item=0, int items_count=WHOLE_ARRAY) | FileWriteArray Функция записывает массив в бинарный файл. FileWriteArray |
int FileWriteDouble(int handle, double value, int size=DOUBLE_VALUE) | uint FileWriteDouble(int file_handle, double dvalue) | FileWriteDouble Функция записывает число с плавающей запятой в двоичный файл. FileWriteDouble |
int FileWriteInteger(int handle, int value, int size=LONG_VALUE) | uint FileWriteInteger(int file_handle, int ivalue, int size=INT_VALUE) | FileWriteInteger Функция записывает значение целого числа в двоичный файл. FileWriteInteger |
int FileWriteString(int handle, string value, int size) | uint FileWriteString(int file_handle, string svalue, int size=-1) | FileWriteString Функция записывает строку в двоичный файл с текущей позиции. FileWriteString |
13. Глобальные переменные
MQL4 | MQL5 | Описание |
---|---|---|
bool GlobalVariableCheck(string name) | bool GlobalVariableCheck(string name) | GlobalVariableCheck Возвращает значение TRUE, если глобальная переменная существует, иначе возвращает FALSE. GlobalVariableCheck |
bool GlobalVariableDel(string name) | bool GlobalVariableDel(string name) | GlobalVariableDel Удаляет глобальную переменную. GlobalVariableDel |
double GlobalVariableGet(string name) | double GlobalVariableGet(string name) | GlobalVariableGet Возвращает значение существующей глобальной переменной или 0 в случае ошибки. GlobalVariableGet |
string GlobalVariableName(int index) | string GlobalVariableName(int index) | GlobalVariableName Функция возвращает имя глобальной переменной по порядковому номеру в списке глобальных переменных. GlobalVariableName |
datetime GlobalVariableSet(string name, double value) | datetime GlobalVariableSet(string name, double value) | GlobalVariableSet Устанавливает новое значение глобальной переменной. GlobalVariableSet |
bool GlobalVariableSetOnCondition(string name, double value, double check_value) | bool GlobalVariableSetOnCondition(string name, double value, double check_value) | GlobalVariableSetOnCondition Устанавливает новое значение существующей глобальной переменной, если текущее значение переменной равно значению третьего параметра check_value. GlobalVariableSetOnCondition |
int GlobalVariablesDeleteAll(string prefix_name=NULL) | int GlobalVariablesDeleteAll(string prefix_name=NULL datetime limit_data=0) | GlobalVariablesDeleteAll Удаляет глобальные переменные. GlobalVariablesDeleteAll |
int GlobalVariablesTotal() | int GlobalVariablesTotal() | GlobalVariablesTotal Функция возвращает общее количество глобальных переменных. GlobalVariablesTotal |
14. Математические функции
MQL4 | MQL5 | Описание |
---|---|---|
double MathAbs(double value) | double MathAbs(double value) | MathAbs Функция возвращает абсолютное значение (значение по модулю) переданного ей числа MathAbs |
double MathArccos(double x) | double MathArccos(double val) | MathArccos Функция возвращает значение арккосинуса x в диапазоне 0 к Pi в радианах. MathArccos |
double MathArcsin(double x) | double MathArcsin(double val) | MathArcsin Функция возвращает арксинус x в диапазоне от -Pi/2 до Pi/2 радианов. MathArcsin |
double MathArctan(double x) | double MathArctan(double value) | MathArctan Функция возвращает арктангенс x. MathArctan |
double MathCeil(double x) | double MathCeil(double val) | MathCeil Функция возвращает числовое значение, представляющую наименьшее целое число, которое больше или равно x. MathCeil |
double MathCos(double value) | double MathCos(double value) | MathCos Функция возвращает косинус угла. MathCos |
double MathExp(double d) | double MathExp(double value) | MathExp Функция возвращает значение числа e в степени d. MathExp |
double MathFloor(double x) | double MathFloor(double val) | MathFloor Функция возвращает числовое значение, представляющее наибольшее целое число, которое меньше или равно x. MathFloor |
double MathLog(double x) | double MathLog(double val) | MathLog Функции возвращают натуральный логарифм x в случае успеха. MathLog |
double MathMax(double value1, double value2) | double MathMax(double value1, double value2) | MathMax Функция возвращает максимальное из двух числовых значений. MathMax |
double MathMin(double value1, double value2) | double MathMin(double value1, double value2) | MathMin Функция возвращает минимальное из двух числовых значений. MathMin |
double MathMod(double value1, double value2) | double MathMod(double value1, double value2) | MathMod Функция возвращает вещественный остаток от деления двух чисел. MathMod |
double MathPow(double base, double exponent) | double MathPow(double base, double exponent) | MathPow Функция возвращает значение основания, возведенного в указанную степень. MathPow |
int MathRand() | int MathRand() | MathRand Функция возвращает псевдослучайное целое число в дипазоне от 0 до 32767. MathRand |
double MathRound(double value) | double MathRound(double value) | MathRound Функция возвращает значение, округленное до ближайшего целого числа указанного числового значения. MathRound |
double MathSin(double value) | double MathSin(double value) | MathSin Функция возвращает синус указанного угла. MathSin |
double MathSqrt(double x) | double MathSqrt(double value) | MathSqrt Функция возвращает квадратный корень x. MathSqrt |
void MathSrand(int seed) | void MathSrand(int seed) | MathSrand Функция устанавливает начальное состояние для генерации ряда псевдослучайных целых чисел. MathSrand |
double MathTan(double x) | double MathTan(double rad) | MathTan Функция возвращает тангенс x. MathTan |
15. Графические объекты
MQL4 | MQL5 | Описание |
---|---|---|
bool ObjectCreate(string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0) | bool ObjectCreateMQL4(string name, ENUM_OBJECT type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0) { return(ObjectCreate(0,name,type,window, time1,price1,time2,price2,time3,price3)); } | ObjectCreate Создание объекта с указанным именем, тип и начальные координаты в указанном подокне графика. ObjectCreate |
bool ObjectDelete(string name) | bool ObjectDeleteMQL4(string name) { return(ObjectDelete(0,name)); } | ObjectDelete Удаление объекта с указанным именем. ObjectDelete |
string ObjectDescription(string name) | string ObjectDescriptionMQL4(string name) { return(ObjectGetString(0,name,OBJPROP_TEXT)); } | ObjectDescription Функция возвращает описание объекта. ObjectGetString |
int ObjectFind(string name) | int ObjectFindMQL4(string name) { return(ObjectFind(0,name)); } | ObjectFind Поиск объекта с указанным именем. ObjectFind |
double ObjectGet(string name, int prop_id) | double ObjectGetMQL4(string name, int index) { switch(index) { case OBJPROP_TIME1: return(ObjectGetInteger(0,name,OBJPROP_TIME)); case OBJPROP_PRICE1: return(ObjectGetDouble(0,name,OBJPROP_PRICE)); case OBJPROP_TIME2: return(ObjectGetInteger(0,name,OBJPROP_TIME,1)); case OBJPROP_PRICE2: return(ObjectGetDouble(0,name,OBJPROP_PRICE,1)); case OBJPROP_TIME3: return(ObjectGetInteger(0,name,OBJPROP_TIME,2)); case OBJPROP_PRICE3: return(ObjectGetDouble(0,name,OBJPROP_PRICE,2)); case OBJPROP_COLOR: return(ObjectGetInteger(0,name,OBJPROP_COLOR)); case OBJPROP_STYLE: return(ObjectGetInteger(0,name,OBJPROP_STYLE)); case OBJPROP_WIDTH: return(ObjectGetInteger(0,name,OBJPROP_WIDTH)); case OBJPROP_BACK: return(ObjectGetInteger(0,name,OBJPROP_WIDTH)); case OBJPROP_RAY: return(ObjectGetInteger(0,name,OBJPROP_RAY_RIGHT)); case OBJPROP_ELLIPSE: return(ObjectGetInteger(0,name,OBJPROP_ELLIPSE)); case OBJPROP_SCALE: return(ObjectGetDouble(0,name,OBJPROP_SCALE)); case OBJPROP_ANGLE: return(ObjectGetDouble(0,name,OBJPROP_ANGLE)); case OBJPROP_ARROWCODE: return(ObjectGetInteger(0,name,OBJPROP_ARROWCODE)); case OBJPROP_TIMEFRAMES: return(ObjectGetInteger(0,name,OBJPROP_TIMEFRAMES)); case OBJPROP_DEVIATION: return(ObjectGetDouble(0,name,OBJPROP_DEVIATION)); case OBJPROP_FONTSIZE: return(ObjectGetInteger(0,name,OBJPROP_FONTSIZE)); case OBJPROP_CORNER: return(ObjectGetInteger(0,name,OBJPROP_CORNER)); case OBJPROP_XDISTANCE: return(ObjectGetInteger(0,name,OBJPROP_XDISTANCE)); case OBJPROP_YDISTANCE: return(ObjectGetInteger(0,name,OBJPROP_YDISTANCE)); case OBJPROP_FIBOLEVELS: return(ObjectGetInteger(0,name,OBJPROP_LEVELS)); case OBJPROP_LEVELCOLOR: return(ObjectGetInteger(0,name,OBJPROP_LEVELCOLOR)); case OBJPROP_LEVELSTYLE: return(ObjectGetInteger(0,name,OBJPROP_LEVELSTYLE)); case OBJPROP_LEVELWIDTH: return(ObjectGetInteger(0,name,OBJPROP_LEVELWIDTH)); } } | ObjectGet Функция возвращает значение указанного свойства объекта. ObjectGetInteger, ObjectGetDouble |
string ObjectGetFiboDescription(string name, int index) | string ObjectGetFiboDescriptionMQL4(string name, int index) { return(ObjectGetString(0,name,OBJPROP_LEVELTEXT,index)); } | ObjectGetFiboDescription Функция возвращает описание уровня объекта Фибоначчи. ObjectGetString |
int ObjectGetShiftByValue(string name, double value) | int ObjectGetShiftByValueMQL4(string name, double value) { ENUM_TIMEFRAMES timeframe=TFMigrate(PERIOD_CURRENT); datetime Arr[]; int shift; MqlRates mql4[]; if(ObjectGetTimeByValue(0,name,value)<0) return(-1); CopyRates(NULL,timeframe,0,1,mql4); if(CopyTime(NULL,timeframe,mql4[0].time, ObjectGetTimeByValue(0,name,value),Arr)>0) return(ArraySize(Arr)-1); else return(-1); } | ObjectGetShiftByValue Функция вычисляет и возвращает номер бара (смещение относительно текущего бара) для указанной цены. MqlRates, ObjectGetTimeByValue, CopyRates, CopyTime, ArraySize |
double ObjectGetValueByShift(string name, int shift) | double ObjectGetValueByShiftMQL4(string name, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(PERIOD_CURRENT); MqlRates mql4[]; CopyRates(NULL,timeframe,shift,1,mql4); return(ObjectGetValueByTime(0,name,mql4[0].time,0)); } | ObjectGetValueByShift Функция вычисляет и возвращает значение цены для указанного бара (смещение относительно текущего бара). MqlRates, CopyRates, ObjectGetValueByTime |
bool ObjectMove(string name, int point, datetime time1, double price1) | bool ObjectMoveMQL4(string name, int point, datetime time1, double price1) { return(ObjectMove(0,name,point,time1,price1)); } | ObjectMove Изменение одной из координат объекта на графике. ObjectMove |
string ObjectName(int index) | string ObjectNameMQL4(int index) { return(ObjectName(0,index)); } | ObjectName Функция возвращает имя объекта по порядковому номеру в списке объектов. ObjectName |
int ObjectsDeleteAll(int window=EMPTY, int type=EMPTY) | int ObjectsDeleteAllMQL4(int window=EMPTY, int type=EMPTY) { return(ObjectsDeleteAll(0,window,type)); } | ObjectsDeleteAll Удаление всех объектов с указанным типом и в указанном подокне графика. ObjectsDeleteAll |
bool ObjectSet(string name, int prop_id, double value) | bool ObjectSetMQL4(string name, int index, double value) { switch(index) { case OBJPROP_TIME1: ObjectSetInteger(0,name,OBJPROP_TIME,(int)value);return(true); case OBJPROP_PRICE1: ObjectSetDouble(0,name,OBJPROP_PRICE,value);return(true); case OBJPROP_TIME2: ObjectSetInteger(0,name,OBJPROP_TIME,1,(int)value);return(true); case OBJPROP_PRICE2: ObjectSetDouble(0,name,OBJPROP_PRICE,1,value);return(true); case OBJPROP_TIME3: ObjectSetInteger(0,name,OBJPROP_TIME,2,(int)value);return(true); case OBJPROP_PRICE3: ObjectSetDouble(0,name,OBJPROP_PRICE,2,value);return(true); case OBJPROP_COLOR: ObjectSetInteger(0,name,OBJPROP_COLOR,(int)value);return(true); case OBJPROP_STYLE: ObjectSetInteger(0,name,OBJPROP_STYLE,(int)value);return(true); case OBJPROP_WIDTH: ObjectSetInteger(0,name,OBJPROP_WIDTH,(int)value);return(true); case OBJPROP_BACK: ObjectSetInteger(0,name,OBJPROP_BACK,(int)value);return(true); case OBJPROP_RAY: ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,(int)value);return(true); case OBJPROP_ELLIPSE: ObjectSetInteger(0,name,OBJPROP_ELLIPSE,(int)value);return(true); case OBJPROP_SCALE: ObjectSetDouble(0,name,OBJPROP_SCALE,value);return(true); case OBJPROP_ANGLE: ObjectSetDouble(0,name,OBJPROP_ANGLE,value);return(true); case OBJPROP_ARROWCODE: ObjectSetInteger(0,name,OBJPROP_ARROWCODE,(int)value);return(true); case OBJPROP_TIMEFRAMES: ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,(int)value);return(true); case OBJPROP_DEVIATION: ObjectSetDouble(0,name,OBJPROP_DEVIATION,value);return(true); case OBJPROP_FONTSIZE: ObjectSetInteger(0,name,OBJPROP_FONTSIZE,(int)value);return(true); case OBJPROP_CORNER: ObjectSetInteger(0,name,OBJPROP_CORNER,(int)value);return(true); case OBJPROP_XDISTANCE: ObjectSetInteger(0,name,OBJPROP_XDISTANCE,(int)value);return(true); case OBJPROP_YDISTANCE: ObjectSetInteger(0,name,OBJPROP_YDISTANCE,(int)value);return(true); case OBJPROP_FIBOLEVELS: ObjectSetInteger(0,name,OBJPROP_LEVELS,(int)value);return(true); case OBJPROP_LEVELCOLOR: ObjectSetInteger(0,name,OBJPROP_LEVELCOLOR,(int)value);return(true); case OBJPROP_LEVELSTYLE: ObjectSetInteger(0,name,OBJPROP_LEVELSTYLE,(int)value);return(true); case OBJPROP_LEVELWIDTH: ObjectSetInteger(0,name,OBJPROP_LEVELWIDTH,(int)value);return(true); default: return(false); } return(false); } | ObjectSet Изменение значения указанного свойства объекта. ObjectSetInteger, ObjectSetDouble |
bool ObjectSetFiboDescription(string name, int index, string text) | bool ObjectSetFiboDescriptionMQL4(string name, int index, string text) { return(ObjectSetString(0,name,OBJPROP_LEVELTEXT,index,text)); } | ObjectSetFiboDescription Функция присваивает новое описание уровню объекта Фибоначчи. ObjectSetString |
bool ObjectSetText(string name, string text, int font_size, string font_name=NULL, color text_color=CLR_NONE) | bool ObjectSetTextMQL4(string name, string text, int font_size, string font="", color text_color=CLR_NONE) { int tmpObjType=(int)ObjectGetInteger(0,name,OBJPROP_TYPE); if(tmpObjType!=OBJ_LABEL && tmpObjType!=OBJ_TEXT) return(false); if(StringLen(text)>0 && font_size>0) { if(ObjectSetString(0,name,OBJPROP_TEXT,text)==true && ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size)==true) { if((StringLen(font)>0) && ObjectSetString(0,name,OBJPROP_FONT,font)==false) return(false); if(text_color>-1 && ObjectSetInteger(0,name,OBJPROP_COLOR,text_color)==false) return(false); return(true); } return(false); } return(false); } | ObjectSetText Изменение описания объекта. ObjectGetInteger, ObjectSetString, ObjectSetInteger StringLen |
int ObjectsTotal(int type=EMPTY) | int ObjectsTotalMQL4(int type=EMPTY, int window=-1) { return(ObjectsTotal(0,window,type)); } | ObjectsTotal Возвращает общее число объектов указанного типа на графике. ObjectsTotal |
int ObjectType(string name) | int ObjectTypeMQL4(string name) { return((int)ObjectGetInteger(0,name,OBJPROP_TYPE)); } | ObjectType Функция возвращает тип указанного объекта. ObjectGetInteger |
16. Строковые функции
MQL4 | MQL5 | Описание |
---|---|---|
string StringConcatenate(...) | int StringConcatenate(string &string_var, void argument1 void argument2 ...) | StringConcatenate Формирует строку из переданных параметров и возвращает её. StringConcatenate |
int StringFind(string text, string matched_text, int start=0) | int StringFind(string string_value, string match_substring, int start_pos=0) | StringFind Поиск подстроки. Возвращает номер позиции в строке, с которой начинается искомая подстрока, либо -1, если подстрока не найдена. StringFind |
int StringGetChar(string text, int pos) | ushort StringGetCharacter(string string_value, int pos) | StringGetChar Возвращает значение символа, расположенного в указанной позиции строки. StringGetCharacter |
int StringLen(string text) | int StringLen(string string_value) | StringLen Возвращает число символов в строке. StringLen |
string StringSetChar(string text, int pos, int value) | bool StringSetCharacter(string &string_var, int pos, ushort character) | StringSetChar Возвращает копию строки с измененным значением символа в указанной позиции. StringSetCharacter |
string StringSubstr(string text, int start, int length=0) | string StringSubstr(string string_value, int start_pos, int length=-1) | StringSubstr Извлекает подстроку из текстовой строки, начинающейся c указанной позиции. StringSubstr |
string StringTrimLeft(string text) | int StringTrimLeft(string& string_var) | StringTrimLeft Функция урезает символы перевода каретки, пробелы и символы табуляции в левой части строки. StringTrimLeft |
string StringTrimRight(string text) | int StringTrimRight(string& string_var) | StringTrimRight Функция урезает символы перевода каретки, пробелы и символы табуляции в правой части строки. StringTrimRight |
17. Технические индикаторы
Получение значений технических индикаторов в своих экспертах очень подробно рассмотрено в одноимённой статье. В этом справочнике представлен краткий способ обращения к стандартным индикаторам, которого вполне достаточно для получения результата расчёта в одной точке. Для реализации такого механизма, нам потребуется вспомогательная функция:
double CopyBufferMQL4(int handle,int index,int shift) { double buf[]; switch(index) { case 0: if(CopyBuffer(handle,0,shift,1,buf)>0) return(buf[0]); break; case 1: if(CopyBuffer(handle,1,shift,1,buf)>0) return(buf[0]); break; case 2: if(CopyBuffer(handle,2,shift,1,buf)>0) return(buf[0]); break; case 3: if(CopyBuffer(handle,3,shift,1,buf)>0) return(buf[0]); break; case 4: if(CopyBuffer(handle,4,shift,1,buf)>0) return(buf[0]); break; default: break; } return(EMPTY_VALUE); }и объявим следующие константы:
ENUM_MA_METHOD MethodMigrate(int method) { switch(method) { case 0: return(MODE_SMA); case 1: return(MODE_EMA); case 2: return(MODE_SMMA); case 3: return(MODE_LWMA); default: return(MODE_SMA); } } ENUM_APPLIED_PRICE PriceMigrate(int price) { switch(price) { case 1: return(PRICE_CLOSE); case 2: return(PRICE_OPEN); case 3: return(PRICE_HIGH); case 4: return(PRICE_LOW); case 5: return(PRICE_MEDIAN); case 6: return(PRICE_TYPICAL); case 7: return(PRICE_WEIGHTED); default: return(PRICE_CLOSE); } } ENUM_STO_PRICE StoFieldMigrate(int field) { switch(field) { case 0: return(STO_LOWHIGH); case 1: return(STO_CLOSECLOSE); default: return(STO_LOWHIGH); } } //+------------------------------------------------------------------+ enum ALLIGATOR_MODE { MODE_GATORJAW=1, MODE_GATORTEETH, MODE_GATORLIPS }; enum ADX_MODE { MODE_MAIN, MODE_PLUSDI, MODE_MINUSDI }; enum UP_LOW_MODE { MODE_BASE, MODE_UPPER, MODE_LOWER }; enum ICHIMOKU_MODE { MODE_TENKANSEN=1, MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN }; enum MAIN_SIGNAL_MODE{ MODE_MAIN, MODE_SIGNAL };
MQL4 | MQL5 | Описание |
---|---|---|
double iAC(string symbol, int timeframe, int shift) | double iACMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iAC(symbol,timeframe); if(handle<0) { Print("Объект iAC не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iAC Расчет осциллятора Accelerator/Decelerator. iAC |
double iAD(string symbol, int timeframe, int shift) | double iADMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=(int)iAD(symbol,timeframe,VOLUME_TICK); if(handle<0) { Print("Объект iAD не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iAD Расчет индикатора Accumulation/Distribution. iAD |
double iAlligator(string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift) | double iAlligatorMQL4(string symbol, int tf, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int method, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iAlligator(symbol,timeframe,jaw_period,jaw_shift, teeth_period,teeth_shift, lips_period,lips_shift, ma_method,applied_price); if(handle<0) { Print("Объект iAlligator не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iAlligator Расчет индикатора Alligator. iAlligator |
double iADX(string symbol, int timeframe, int period, int applied_price, int mode, int shift) | double iADXMQL4(string symbol, int tf, int period, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iADX(symbol,timeframe,period); if(handle<0) { Print("Объект iADX не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iADX Расчет Average Directional Movement Index. iADX |
double iATR(string symbol, int timeframe, int period, int shift) | double iATRMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iATR(symbol,timeframe,period); if(handle<0) { Print("Объект iATR не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iATR Расчет индикатора Average True Range. iATR |
double iAO(string symbol, int timeframe, int shift) | double iAOMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iAO(symbol,timeframe); if(handle<0) { Print("Объект iAO не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iAO Расчет Awesome oscillator. iAO |
double iBearsPower(string symbol, int timeframe, int period, int applied_price, int shift) | double iBearsPowerMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iBearsPower(symbol,timeframe,period); if(handle<0) { Print("Объект iBearsPower не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iBearsPower Расчет индикатора Bears Power. iBearsPower |
double iBands(string symbol, int timeframe, int period, int deviation, int bands_shift, int applied_price, int mode, int shift) | double iBandsMQL4(string symbol, int tf, int period, double deviation, int bands_shift, int method, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); int handle=iBands(symbol,timeframe,period, bands_shift,deviation,ma_method); if(handle<0) { Print("Объект iBands не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iBands Расчет индикатора Bollinger Bands. iBands |
double iBandsOnArray(double array[], int total, int period, int deviation, int bands_shift, int mode, int shift) | Аналога НЕТ (см. статью "Индикатор от индикатора в MQL5") | iBandsOnArray Расчет индикатора Bollinger Bands на данных, хранящихся в массиве. |
double iBullsPower(string symbol, int timeframe, int period, int applied_price, int shift) | double iBullsPowerMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iBullsPower(symbol,timeframe,period); if(handle<0) { Print("Объект iBullsPower не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iBullsPower Расчет индикатора Bulls Power. iBullsPower |
double iCCI(string symbol, int timeframe, int period, int applied_price, int shift) | double iCCIMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iCCI(symbol,timeframe,period,price); if(handle<0) { Print("Объект iCCI не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iCCI Расчет индикатора Commodity Channel Index. iCCI |
double iCCIOnArray(double array[], int total, int period, int shift) | Аналога НЕТ (см. статью "Индикатор от индикатора в MQL5") | iCCIOnArray Расчет индикатора Commodity Channel Index на данных, хранящихся в массиве. |
double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift) | int iCustom(string symbol, ENUM_TIMEFRAMES period, string name ...) | iCustom Расчет указанного пользовательского индикатора. iCustom |
double iDeMarker(string symbol, int timeframe, int period, int shift) | double iDeMarkerMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iDeMarker(symbol,timeframe,period); if(handle<0) { Print("Объект iDeMarker не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iDeMarker Расчет индикатора DeMarker. iDeMarker |
double iEnvelopes(string symbol, int timeframe, int ma_period, int ma_method, int ma_shift, int applied_price, double deviation, int mode, int shift) | double EnvelopesMQL4(string symbol, int tf, int ma_period, int method, int ma_shift, int price, double deviation, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iEnvelopes(symbol,timeframe, ma_period,ma_shift,ma_method, applied_price,deviation); if(handle<0) { Print("Объект iEnvelopes не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iEnvelopes Расчет индикатора Envelopes. iEnvelopes |
double iEnvelopesOnArray(double array[], int total, int ma_period, int ma_method, int ma_shift, double deviation, int mode, int shift) | Аналога НЕТ (см. статью "Индикатор от индикатора в MQL5") | iEnvelopesOnArray Расчет индикатора Envelopes на данных, хранящихся в массиве. |
double iForce(string symbol, int timeframe, int period, int ma_method, int applied_price, int shift) | double iForceMQL4(string symbol, int tf, int period, int method, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); int handle=iForce(symbol,timeframe,period,ma_method,VOLUME_TICK); if(handle<0) { Print("Объект iForce не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iForce Расчет Force Index. iForce |
double iFractals(string symbol, int timeframe, int mode, int shift) | double iFractalsMQL4(string symbol, int tf, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iFractals(symbol,timeframe); if(handle<0) { Print("Объект iFractals не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iFractals Расчет индикатора Fractals. iFractals |
double iGator(string symbol, int timeframe, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int ma_method, int applied_price, int mode, int shift) | double iGatorMQL4(string symbol, int tf, int jaw_period, int jaw_shift, int teeth_period, int teeth_shift, int lips_period, int lips_shift, int method, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iGator(symbol,timeframe,jaw_period,jaw_shift, teeth_period,teeth_shift, lips_period,lips_shift, ma_method,applied_price); if(handle<0) { Print("Объект iGator не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iGator Расчет осциллятора Gator. iGator |
double iIchimoku(string symbol, int timeframe, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift) | double iIchimokuMQL4(string symbol, int tf, int tenkan_sen, int kijun_sen, int senkou_span_b, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iIchimoku(symbol,timeframe, tenkan_sen,kijun_sen,senkou_span_b); if(handle<0) { Print("Объект iIchimoku не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode-1,shift)); } | iIchimoku Расчет индикатора Ichimoku Kinko Hyo. iIchimoku |
double iBWMFI(string symbol, int timeframe, int shift) | double iBWMFIMQL4(string symbol, int tf, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=(int)iBWMFI(symbol,timeframe,VOLUME_TICK); if(handle<0) { Print("Объект iBWMFI не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iBWMFI Расчет Market Facilitation Index. iBWMFI |
double iMomentum(string symbol, int timeframe, int period, int applied_price, int shift) | double iMomentumMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iMomentum(symbol,timeframe,period,applied_price); if(handle<0) { Print("Объект iMomentum не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iMomentum Расчет индикатора Momentum. iMomentum |
double iMomentumOnArray(double array[], int total, int period, int shift) | Аналога НЕТ (см. статью "Индикатор от индикатора в MQL5") | iMomentumOnArray Расчет индикатора Momentum на данных, хранящихся в массиве. |
double iMFI(string symbol, int timeframe, int period, int shift) | double iMFIMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=(int)iMFI(symbol,timeframe,period,VOLUME_TICK); if(handle<0) { Print("Объект iMFI не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iMFI Расчет Money Flow Index. iMFI |
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift) | double iMAMQL4(string symbol, int tf, int period, int ma_shift, int method, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iMA(symbol,timeframe,period,ma_shift, ma_method,applied_price); if(handle<0) { Print("Объект iMA не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iMA Расчет скользящего среднего. iMA |
double iMAOnArray(double array[], int total, int period, int ma_shift, int ma_method, int shift) | double iMAOnArrayMQL4(double &array[], int total, int period, int ma_shift, int ma_method, int shift) { double buf[],arr[]; if(total==0) total=ArraySize(array); if(total>0 && total<=period) return(0); if(shift>total-period-ma_shift) return(0); switch(ma_method) { case MODE_SMA : { total=ArrayCopy(arr,array,0,shift+ma_shift,period); if(ArrayResize(buf,total)<0) return(0); double sum=0; int i,pos=total-1; for(i=1;i<period;i++,pos--) sum+=arr[pos]; while(pos>=0) { sum+=arr[pos]; buf[pos]=sum/period; sum-=arr[pos+period-1]; pos--; } return(buf[0]); } case MODE_EMA : { if(ArrayResize(buf,total)<0) return(0); double pr=2.0/(period+1); int pos=total-2; while(pos>=0) { if(pos==total-2) buf[pos+1]=array[pos+1]; buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr); pos--; } return(buf[shift+ma_shift]); } case MODE_SMMA : { if(ArrayResize(buf,total)<0) return(0); double sum=0; int i,k,pos; pos=total-period; while(pos>=0) { if(pos==total-period) { for(i=0,k=pos;i<period;i++,k++) { sum+=array[k]; buf[k]=0; } } else sum=buf[pos+1]*(period-1)+array[pos]; buf[pos]=sum/period; pos--; } return(buf[shift+ma_shift]); } case MODE_LWMA : { if(ArrayResize(buf,total)<0) return(0); double sum=0.0,lsum=0.0; double price; int i,weight=0,pos=total-1; for(i=1;i<=period;i++,pos--) { price=array[pos]; sum+=price*i; lsum+=price; weight+=i; } pos++; i=pos+period; while(pos>=0) { buf[pos]=sum/weight; if(pos==0) break; pos--; i--; price=array[pos]; sum=sum-lsum+price*period; lsum-=array[i]; lsum+=price; } return(buf[shift+ma_shift]); } default: return(0); } return(0); } | iMAOnArray Расчет скользящего среднего на данных, хранящихся в массиве. |
double iOsMA(string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int shift) | double iOsMAMQL4(string symbol, int tf, int fast_ema_period, int slow_ema_period, int signal_period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iOsMA(symbol,timeframe, fast_ema_period,slow_ema_period, signal_period,applied_price); if(handle<0) { Print("Объект iOsMA не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iOsMA Расчет Moving Average of Oscillator. iOsMA |
double iMACD(string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift) | double iMACDMQL4(string symbol, int tf, int fast_ema_period, int slow_ema_period, int signal_period, int price, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iMACD(symbol,timeframe, fast_ema_period,slow_ema_period, signal_period,applied_price); if(handle<0) { Print("Объект iMACD не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iMACD Расчет индикатора Moving Averages Convergence/Divergence. iMACD |
double iOBV(string symbol, int timeframe, int applied_price, int shift) | double iOBVMQL4(string symbol, int tf, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iOBV(symbol,timeframe,VOLUME_TICK); if(handle<0) { Print("Объект iOBV не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iOBV Расчет индикатора On Balance Volume. iOBV |
double iSAR(string symbol, int timeframe, double step, double maximum, int shift) | double iSARMQL4(string symbol, int tf, double step, double maximum, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iSAR(symbol,timeframe,step,maximum); if(handle<0) { Print("Объект iSAR не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iSAR Расчет индикатора Parabolic Stop and Reverse system. iSAR |
double iRSI(string symbol, int timeframe, int period, int applied_price, int shift) | double iRSIMQL4(string symbol, int tf, int period, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iRSI(symbol,timeframe,period,applied_price); if(handle<0) { Print("Объект iRSI не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iRSI Расчет Relative Strength Index. iRSI |
double iRSIOnArray(double array[], int total, int period, int shift) | Аналога НЕТ (см. статью "Индикатор от индикатора в MQL5") | iRSIOnArray Расчет индикатора Relative Strength Index на данных, хранящихся в массиве. |
double iRVI(string symbol, int timeframe, int period, int mode, int shift) | double iRVIMQL4(string symbol, int tf, int period, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iRVI(symbol,timeframe,period); if(handle<0) { Print("Объект iRVI не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iRVI Расчет Relative Vigor Index. iRVI |
double iStdDev(string symbol, int timeframe, int ma_period, int ma_shift, int ma_method, int applied_price, int shift) | double iStdDevMQL4(string symbol, int tf, int ma_period, int ma_shift, int method, int price, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_APPLIED_PRICE applied_price=PriceMigrate(price); int handle=iStdDev(symbol,timeframe,ma_period,ma_shift, ma_method,applied_price); if(handle<0) { Print("Объект iStdDev не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iStdDev Расчет индикатора Standard Deviation. iStdDev |
double iStdDevOnArray(double array[], int total, int ma_period, int ma_shift, int ma_method, int shift) | Аналога НЕТ (см. статью "Индикатор от индикатора в MQL5") | iStdDevOnArray Расчет индикатора Standard Deviation на данных, хранящихся в массиве. |
double iStochastic(string symbol, int timeframe, int%Kperiod, int%Dperiod, int slowing, int method, int price_field, int mode, int shift) | double iStochasticMQL4(string symbol, int tf, int Kperiod, int Dperiod, int slowing, int method, int field, int mode, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); ENUM_MA_METHOD ma_method=MethodMigrate(method); ENUM_STO_PRICE price_field=StoFieldMigrate(field); int handle=iStochastic(symbol,timeframe,Kperiod,Dperiod, slowing,ma_method,price_field); if(handle<0) { Print("Объект iStochastic не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,mode,shift)); } | iStochastic Расчет Stochastic Oscillator. iStochastic |
double iWPR(string symbol, int timeframe, int period, int shift) | double iWPRMQL4(string symbol, int tf, int period, int shift) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); int handle=iWPR(symbol,timeframe,period); if(handle<0) { Print("Объект iWPR не создан: Ошибка ",GetLastError()); return(-1); } else return(CopyBufferMQL4(handle,0,shift)); } | iWPR Расчет индикатора Larry Williams' Percent Range. iWPR |
18. Доступ к таймсериям
MQL4 | MQL5 | Описание |
---|---|---|
int iBars(string symbol, int timeframe) | int iBarsMQL4(string symbol,int tf) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); return(Bars(symbol,timeframe)); } | iBars Возвращает количество баров на определенном графике. Bars |
int iBarShift(string symbol, int timeframe, datetime time, bool exact=false) | int iBarShiftMQL4(string symbol, int tf, datetime time, bool exact=false) { if(time<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); datetime Arr[],time1; CopyTime(symbol,timeframe,0,1,Arr); time1=Arr[0]; if(CopyTime(symbol,timeframe,time,time1,Arr)>0) { if(ArraySize(Arr)>2) return(ArraySize(Arr)-1); if(time<time1) return(1); else return(0); } else return(-1); } | iBarShift Поиск бара по времени. CopyTime, ArraySize |
double iClose(string symbol, int timeframe, int shift) | double iCloseMQL4(string symbol,int tf,int index){ if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyClose(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iClose Возвращает значение цены закрытия указанного параметром shift бара с соответствующего графика (symbol, timeframe). CopyRates, MqlRates |
double iHigh(string symbol, int timeframe, int shift) | double iHighMQL4(string symbol,int tf,int index){ if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyHigh(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iHigh Возвращает значение максимальной цены указанного параметром shift бара с соответствующего графика (symbol, timeframe). CopyRates, MqlRates |
int iHighest(string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0) | int iHighestMQL4(string symbol, int tf, int type, int count=WHOLE_ARRAY, int start=0) { if(start<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(count<=0) count=Bars(symbol,timeframe); if(type<=MODE_OPEN) { double Open[]; ArraySetAsSeries(Open,true); CopyOpen(symbol,timeframe,start,count,Open); return(ArrayMaximum(Open,0,count)+start); } if(type==MODE_LOW) { double Low[]; ArraySetAsSeries(Low,true); CopyLow(symbol,timeframe,start,count,Low); return(ArrayMaximum(Low,0,count)+start); } if(type==MODE_HIGH) { double High[]; ArraySetAsSeries(High,true); CopyHigh(symbol,timeframe,start,count,High); return(ArrayMaximum(High,0,count)+start); } if(type==MODE_CLOSE) { double Close[]; ArraySetAsSeries(Close,true); CopyClose(symbol,timeframe,start,count,Close); return(ArrayMaximum(Close,0,count)+start); } if(type==MODE_VOLUME) { long Volume[]; ArraySetAsSeries(Volume,true); CopyTickVolume(symbol,timeframe,start,count,Volume); return(ArrayMaximum(Volume,0,count)+start); } if(type>=MODE_TIME) { datetime Time[]; ArraySetAsSeries(Time,true); CopyTime(symbol,timeframe,start,count,Time); return(ArrayMaximum(Time,0,count)+start); //--- } return(0); } | iHighest Возвращает индекс найденного наибольшего значения (смещение относительно текущего бара). CopyOpen, CopyLow, CopyHigh, CopyClose, CopyTickVolume, CopyTime, ArrayMaximum |
double iLow(string symbol, int timeframe, int shift) | double iLowMQL4(string symbol,int tf,int index){ if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyLow(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iLow Возвращает значение минимальной цены указанного параметром shift бара с соответствующего графика (symbol, timeframe). CopyRates, MqlRates |
int iLowest(string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0) | int iLowestMQL4(string symbol, int tf, int type, int count=WHOLE_ARRAY, int start=0) { if(start<0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(count<=0) count=Bars(symbol,timeframe); if(type<=MODE_OPEN) { double Open[]; ArraySetAsSeries(Open,true); CopyOpen(symbol,timeframe,start,count,Open); return(ArrayMinimum(Open,0,count)+start); } if(type==MODE_LOW) { double Low[]; ArraySetAsSeries(Low,true); CopyLow(symbol,timeframe,start,count,Low); return(ArrayMinimum(Low,0,count)+start); } if(type==MODE_HIGH) { double High[]; ArraySetAsSeries(High,true); CopyHigh(symbol,timeframe,start,count,High); return(ArrayMinimum(High,0,count)+start); } if(type==MODE_CLOSE) { double Close[]; ArraySetAsSeries(Close,true); CopyClose(symbol,timeframe,start,count,Close); return(ArrayMinimum(Close,0,count)+start); } if(type==MODE_VOLUME) { long Volume[]; ArraySetAsSeries(Volume,true); CopyTickVolume(symbol,timeframe,start,count,Volume); return(ArrayMinimum(Volume,0,count)+start); } if(type>=MODE_TIME) { datetime Time[]; ArraySetAsSeries(Time,true); CopyTime(symbol,timeframe,start,count,Time); return(ArrayMinimum(Time,0,count)+start); } //--- return(0); } | iLowest Возвращает индекс найденного наименьшего значения (смещение относительно текущего бара). CopyOpen, CopyLow, CopyHigh, CopyClose, CopyTickVolume, CopyTime, ArrayMinimum |
double iOpen(string symbol, int timeframe, int shift) | double iOpenMQL4(string symbol,int tf,int index){ if(index < 0) return(-1); double Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyOpen(symbol,timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iOpen Возвращает значение цены открытия указанного параметром shift бара с соответствующего графика (symbol, timeframe). CopyRates, MqlRates |
datetime iTime(string symbol, int timeframe, int shift) | datetime iTimeMQL4(string symbol,int tf,int index){ if(index < 0) return(-1); ENUM_TIMEFRAMES timeframe=TFMigrate(tf); datetime Arr[]; if(CopyTime(symbol, timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | Time Возвращает значение времени открытия указанного параметром shift бара с соответствующего графика (symbol, timeframe). CopyRates, MqlRates |
double iVolume(string symbol, int timeframe, int shift) | int iVolumeMQL4(string symbol,int tf,int index){ if(index < 0) return(-1); long Arr[]; ENUM_TIMEFRAMES timeframe=TFMigrate(tf); if(CopyTickVolume(symbol, timeframe, index, 1, Arr)>0) return(Arr[0]); else return(-1); } | iVolume Возвращает значение тикового объема указанного параметром shift бара с соответствующего графика (symbol, timeframe). CopyRates, MqlRates |
19. Операции с графиками
MQL4 | MQL5 | Описание |
---|---|---|
void HideTestIndicators(bool hide) | Аналога НЕТ | HideTestIndicators Функция выставляет флаг скрытия индикаторов, вызываемых экспертом. |
int Period() | ENUM_TIMEFRAMES Period() | Period Возвращает значение числа минут периода для текущего графика. Period |
bool RefreshRates() | Аналога НЕТ | RefreshRates Обновление данных в предопределенных переменных и массивах-таймсериях. |
string Symbol() | string Symbol() | Symbol Возвращает текстовую строку с именем текущего финансового инструмента. Symbol |
int WindowBarsPerChart() | int ChartGetInteger(0,CHART_VISIBLE_BARS,0) | WindowBarsPerChart Функция возвращает количество баров, помещающихся в окно текущего графика. ChartGetInteger |
string WindowExpertName() | string MQLInfoString(MQL5_PROGRAM_NAME) | WindowExpertName Возвращает имя выполняющегося эксперта, скрипта, пользовательского индикатора или библиотеки, в зависимости от того, из какой MQL4-программы вызвана данная функция. MQLInfoString |
int WindowFind(string name) | int WindowFindMQL4(string name) { int window=-1; if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR) { window=ChartWindowFind(); } else { window=ChartWindowFind(0,name); if(window==-1) Print(__FUNCTION__+"(): Error = ",GetLastError()); } return(window); } | WindowFind Возвращает номер подокна графика, содержащего индикатор с указанным именем name, если он найден, иначе возвращается -1. ChartWindowFind, MQLInfoInteger |
int WindowFirstVisibleBar() | int ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0) | WindowFirstVisibleBar Функция возвращает номер первого видимого бара в окне текущего графика. ChartGetInteger |
int WindowHandle(string symbol, int timeframe) | int WindowHandleMQL4(string symbol, int tf) { ENUM_TIMEFRAMES timeframe=TFMigrate(tf); long currChart,prevChart=ChartFirst(); int i=0,limit=100; while(i<limit) { currChart=ChartNext(prevChart); if(currChart<0) break; if(ChartSymbol(currChart)==symbol && ChartPeriod(currChart)==timeframe) return((int)currChart); prevChart=currChart; i++; } return(0); } | WindowHandle Возвращает системный дескриптор окна (window handle), содержащего указанный график. ChartFirst, ChartNext, ChartSymbol, ChartPeriod |
bool WindowIsVisible(int index) | bool ChartGetInteger(0,CHART_WINDOW_IS_VISIBLE,index) | WindowIsVisible Возвращает TRUE, если подокно графика видимо, иначе возвращает FALSE. ChartGetInteger |
int WindowOnDropped() | int ChartWindowOnDropped() | WindowOnDropped Возвращает индекс окна, в которое был брошен эксперт, пользовательский индикатор или скрипт. ChartWindowOnDropped |
double WindowPriceMax(int index=0) | double ChartGetDouble(0,CHART_PRICE_MAX,index) | WindowPriceMax Возвращает максимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). ChartGetDouble |
double WindowPriceMin(int index=0) | double ChartGetDouble(0,CHART_PRICE_MIN,index) | WindowPriceMin Возвращает минимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). ChartGetDouble |
double WindowPriceOnDropped() | double ChartPriceOnDropped() | WindowPriceOnDropped Возвращает значение цены в точке графика, на которой был брошен эксперт или скрипт. ChartPriceOnDropped |
void WindowRedraw() | void ChartRedraw(0) | WindowRedraw Принудительно перерисовывает текущий график. ChartRedraw |
bool WindowScreenShot(string filename, int size_x, int size_y, int start_bar=-1, int chart_scale=-1, int chart_mode=-1) | bool WindowScreenShotMQL4(string filename, int size_x, int size_y, int start_bar=-1, int chart_scale=-1, int chart_mode=-1) { if(chart_scale>0 && chart_scale<=5) ChartSetInteger(0,CHART_SCALE,chart_scale); switch(chart_mode) { case 0: ChartSetInteger(0,CHART_MODE,CHART_BARS); case 1: ChartSetInteger(0,CHART_MODE,CHART_CANDLES); case 2: ChartSetInteger(0,CHART_MODE,CHART_LINE); } if(start_bar<0) return(ChartScreenShot(0,filename,size_x,size_y,ALIGN_RIGHT)); else return(ChartScreenShot(0,filename,size_x,size_y,ALIGN_LEFT)); } | WindowScreenShot Сохраняет изображение текущего графика в файле формата GIF. ChartSetInteger, ChartScreenShot |
datetime WindowTimeOnDropped() | datetime ChartTimeOnDropped() | WindowTimeOnDropped Возвращает значение времени в точке графика, на которой был брошен эксперт или скрипт. ChartTimeOnDropped |
int WindowsTotal() | int ChartGetInteger(0,CHART_WINDOWS_TOTAL) | WindowsTotal Возвращает количество окон индикаторов на графике, включая главное окно графика. ChartGetInteger |
int WindowXOnDropped() | int ChartXOnDropped() | WindowXOnDropped Возвращает значение координаты по оси X в пикселах точки клиентской области окна графика, на которой был брошен эксперт или скрипт. ChartXOnDropped |
int WindowYOnDropped() | int ChartYOnDropped() | WindowYOnDropped Возвращает значение координаты по оси Y в пикселах точки клиентской области окна графика, на которой был брошен эксперт или скрипт. ChartYOnDropped |
Заключение
- Отсутствие торговых функций обусловлено тем, что их надо использовать только в оригинале! Перевести-то их можно, но логика торговли при этом нарушается. Другими словами: смысла в этом нет.
- Перевод программ с одного языка на другой всегда связан с потерей функциональности и производительности. Поэтому, используйте данный справочник для быстрого поиска функций аналогов.
- Планируется создание эмулятора, который позволит запускать ваши программы на MQL4 в новом терминале МТ5.
Благодарности: keiji, A. Williams.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вот со справкой я повтуплял - так как особо не разбирался до этого в работе с объектами, а функцию заимствовал...
Заимствуйте с новый веток и советников. Не берите с веток 2007 года)
Заимствуйте с новый веток и советников. Не берите с веток 2007 года)
Это заимствование было в 2013 года - просто перекладывается из одного места в другое...
Прошу подсказать как работать с iFractalsMQL4
Результат:
2017.08.10 17:28:23.458 TwoFingersSymbolsExp_v1.03_my_pa (_DJI,M5) i 0 ii 2 Pairs[i] AUDCAD_i TMODE 1 dF 1.00731
2017.08.10 17:28:23.458 TwoFingersSymbolsExp_v1.03_my_pa (_DJI,M5) i 0 ii 3 Pairs[i] AUDCAD_i TMODE 1 dF 1.797693134862316e+308
2017.08.10 17:28:23.458 TwoFingersSymbolsExp_v1.03_my_pa (_DJI,M5) i 1 ii 2 Pairs[i] AUDCHF_i TMODE 1 dF 1.797693134862316e+308 ...
То есть при первом вызове iFractalsMQL4 отрабатывает, а потом нет.
CSymbolInfo m_symbols[]; // symbol info object
и
m_symbols[i].Refresh();
не верно. Что нужно сделать?
минное поле
В разделе 19 неверная информация. Функция
имеет аналог в MQL5