Полезные функции 2
Сообщений: 536 |
В предверии нового 2014 года, ребята из Metaquotes порадовали известием, что с января 2014 года у брокеров появится новая версия MT4. Язык mql4 претерпит ряд косметических и идеологических изменений. Не весь код, написанный под билд до 509 включительно будет компилироваться новым компилятором. Дабы избежать аврала, в этой теме буду выкладывать процедуры/функции, а иногда и целые библиотеки, которые работают в новой версии терминала. Использование материала из данной темы для написания кода для билда до 509 скорее всего будет возможным, хотя уверенности на 100% у меня нет. | ||||
Сообщений: 536 |
В этом посте я постараюсь указывать текущие версию и дату библиотек.
Скачать обновленные версии можно перейдя по ссылке в оглавлении. БиблиотекиsysOther.mqh версия: 0.0.1.1 дата: 2013.12.23 sysDT.mqh версия: 0.0.1.0 дата: 2013.12.24 sysNormalize.mqh версия: 0.0.1.0 дата: 2013.12.24 sysStructure.mqh версия: 0.0.1.0 дата: 2013.12.24 sysIndexedArray.mqh версия: 3.1.0.12 дата: 2014.02.26 iStoh.mqh версия: 0.0.1.0 дата: 2013.12.25 Редактировалось: 8 раз (Последний: 26 февраля 2014 в 18:32) | ||||
Сообщений: 536 |
Начало
sysOther.mqhверсия: 0.0.1.1 дата: 2013.12.23 int StringToArrayString(string &a[], string s, string del = ";") double iif( bool condition, double ifTrue, double ifFalse ) string AddSymbolsRight(string s, int len, string sy=" ") string AddSymbolsLeft(string s, int len, string sy=" ") string O_StringReplace(string str, string sfind, string srep) Прикрепленные файлы:
Редактировалось: 5 раз (Последний: 23 декабря 2013 в 17:36) | ||||
Сообщений: 536 |
Назад
StringToArrayStringОписание: Разбивает строку на подстроки разделителем. если разделителя нет, то в массиве возвращается строка. Пример [code=php] int StringToArrayString(string &a[], string s, string del = ";"){ /** \version 0.0.0.1 \date 2013.06.12 \author Morochin \details Разбивает строку на подстроки разделителем. если разделителя нет, то в массиве возвращается строка. \internal >Hist: >Rev:0 */ string fn="StringToArrayString"; int pR = StringFind(s, del, 0); int ROWS = ArrayRange(a,0); int lastROW = ROWS-1; if(pR > -1){ ROWS = ROWS + 1; ArrayResize(a, ROWS); lastROW++; a[lastROW] = StringSubstr(s, 0, pR); s=StringSubstr(s, pR+StringLen(del), StringLen(s)-pR+StringLen(del)); ROWS=StringToArrayString(a, s, del); }else{ ROWS = ROWS + 1; ArrayResize(a, ROWS); lastROW++; a[lastROW] = s; return(ROWS); } return(ROWS); } [/code] Редактировалось: 1 раз (Последний: 23 декабря 2013 в 17:43) | ||||
Сообщений: 536 |
Назад
iifОписание: если условие верно, то возвращается первый параметр, иначе возвращается второй параметр. Пример [code=php] double iif( bool condition, double ifTrue, double ifFalse ){ /* >Ver : 0.0.0.3 >Date : 2013.08.29 >History: @0.0.0.3@2013.08.29@artamir [*] dif @0.0.0.2@2013.07.29@artamir [] iif */ if( condition ) return( ifTrue ); //--- return( ifFalse ); } [/code] Редактировалось: 1 раз (Последний: 23 декабря 2013 в 17:50) | ||||
Сообщений: 536 |
Назад
AddSymbolsRightОписание: Увеличивает строку до заданной длины заданным символом. Пример [code=php] string AddSymbolsRight(string s, int len, string sy=" "){ /** \version 0.0.0.1 \date 2013.08.02 \author Morochin \details Увеличивает строку до заданной длины заданным символом. \internal >Hist: @0.0.0.1@2013.08.02@artamir [] AddSymbolsRight >Rev:0 */ int counts = len - StringLen(s); if(counts <= 0){return(s);} for(int i=0; i } return(s); } [/code] Редактировалось: 1 раз (Последний: 23 декабря 2013 в 18:01) | ||||
Сообщений: 536 |
Назад
AddSymbolsLeftОписание: Увеличивает строку до заданной длины заданным символом. Пример [code=php] string AddSymbolsLeft(string s, int len, string sy=" "){ /** \version 0.0.0.1 \date 2013.08.02 \author Morochin \details Увеличивает строку до заданной длины заданным символом. \internal >Hist: @0.0.0.1@2013.08.02@artamir [] AddSymbolsRight >Rev:0 */ int counts = len - StringLen(s); if(counts <= 0){return(s);} for(int i=0; i } return(s); } [/code] Редактировалось: 1 раз (Последний: 23 декабря 2013 в 18:14) | ||||
Сообщений: 536 |
Назад
O_StringReplaceОписание: Заменяет sfind на srep в строке str. Пример: [code=php] string O_StringReplace(string str, string sfind, string srep){ /** \version 0.0.0.2 \date 2013.08.06 \author Morochin \details Заменяет sfind на srep в строке str. \internal >Hist: @0.0.0.2@2013.08.06@artamir [*] Исправлено зацикливание, если sfind = srep @0.0.0.1@2013.08.06@artamir [] StringReplace >Rev:0 */ if(sfind == srep){ return(str); } bool isFind = true; while(isFind){ int start_pos = StringFind(str, sfind); int end_pos = start_pos+StringLen(sfind); if(start_pos < 0){ isFind = false; return(str); } string str_left = ""; if(start_pos > 0){ str_left = StringSubstr(str,0,start_pos); } string str_right = StringSubstr(str, end_pos); str = str_left+srep+str_right; } return(str); } [/code] Редактировалось: 1 раз (Последний: 23 декабря 2013 в 18:28) | ||||
Сообщений: 536 |
Назад
Тестирование StringToArrayString Скрипт [code=php] //+------------------------------------------------------------------+ //| sTest_sysOther.mq4 | //| Copyright 2013, artamir | //| http:\\forexmd.ucoz.org | //+------------------------------------------------------------------+ #property stacksize 1024 #property copyright "Copyright 2013, artamir" #property link "http:\\forexmd.ucoz.org" //#property version "1.00" //#property strict #include //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void start() { //--- /* 2013.12.20 16:13:38.500 sTest_sysOther USDCHF,H1: a[3]=строку 2013.12.20 16:13:38.500 sTest_sysOther USDCHF,H1: a[2]=эту 2013.12.20 16:13:38.500 sTest_sysOther USDCHF,H1: a[1]=разбить 2013.12.20 16:13:38.500 sTest_sysOther USDCHF,H1: a[0]=Нужно */ Print("====== StringToArrayString ======="); string s="Нужно:разбить:эту:строку"; string a[]; ArrayResize(a,0); int rows=StringToArrayString(a,s,":"); for(int i=0;i } } //+------------------------------------------------------------------+ [/code] Прикрепленные файлы:
Редактировалось: 1 раз (Последний: 23 декабря 2013 в 17:41) | ||||
Сообщений: 536 |
Назад
Тестирование iif Скрипт [code=php] //+------------------------------------------------------------------+ //| sTest_iif.mq4 | //| Copyright 2013, artamir | //| http:\\forexmd.ucoz.org | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, artamir" #property link "http:\\forexmd.ucoz.org" //#property version "1.00" //#property strict #include //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void start() { //--- double a=5.00; double b=6.00; double c=iif(b>a,b,a); double d=iif(b Print("===== iif ====="); Print("iif( if(",b,">",a,"), ret:",b,", else ret:",a,")=",c); Print("iif( if(",b,"<",a,"), ret:",b,", else ret:",a,")=",d); } //+------------------------------------------------------------------+ [/code] Прикрепленные файлы:
| ||||
Сообщений: 536 |
Назад
Тестирование AddSymbolsRight Скрипт [code=php] //+------------------------------------------------------------------+ //| AddSymbolsRight.mq4 | //| Copyright 2013, artamir | //| http:\\forexmd.ucoz.org | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, artamir" #property link "http:\\forexmd.ucoz.org" //#property version "1.00" //#property strict #include //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void start() { //--- string s="Добавить символы справа до всего 50 символов"; Print("s before=",s); s=AddSymbolsRight(s,50,">"); Print("s after=",s); } //+------------------------------------------------------------------+ [/code] Прикрепленные файлы:
Редактировалось: 1 раз (Последний: 23 декабря 2013 в 18:02) | ||||
Сообщений: 536 |
Назад
Тестирование AddSymbolsLeft Скрипт [code=php] //+------------------------------------------------------------------+ //| AddSymbolsRight.mq4 | //| Copyright 2013, artamir | //| http:\\forexmd.ucoz.org | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, artamir" #property link "http:\\forexmd.ucoz.org" //#property version "1.00" //#property strict #include //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void start() { //--- string s="Добавить символы справа до всего 50 символов"; Print("s before=",s); s=AddSymbolsLeft(s,50,"<"); Print("s after=",s); } //+------------------------------------------------------------------+ [/code] Прикрепленные файлы:
| ||||
Сообщений: 536 |
Назад
Тестирование O_StringReplace Скрипт [code=php] //+------------------------------------------------------------------+ //| AddSymbolsRight.mq4 | //| Copyright 2013, artamir | //| http:\\forexmd.ucoz.org | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, artamir" #property link "http:\\forexmd.ucoz.org" //#property version "1.00" //#property strict #include //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void start() { //--- string s="Заменить : подстроку на = эту"; Print("s before=",s); s=O_StringReplace(s,"подстроку", "эту"); Print("s after=",s); } //+------------------------------------------------------------------+ [/code] Прикрепленные файлы:
| ||||
Сообщений: 536 |
Начало
sysDT.mqhверсия: 0.0.1.0 дата: 2013.12.24 Функции работы с объектом datetime и локальным/серверным временем. int DT_delta() datetime DT_ModeledCurrent() int DT_Str2Seconds(string t="00:00:05") int DT_Time2Seconds(datetime t) string DT_Time2Str(datetime t) bool DTs_isTimeBetween(datetime t, string st="00:00:01", string et="00:00:03") Пример использования библиотеки Прикрепленные файлы:
Редактировалось: 8 раз (Последний: 25 декабря 2013 в 13:41) | ||||
Сообщений: 536 |
Назад
DT_deltaВозвращает минимальную разницу между локальным временем и серверным. [code=php] int DT_delta(){ /** \version 0.0.0.1 \date 2013.10.30 \author Morochin \details Возвращает минимальную разницу между локальным временем и серверным. \internal >Hist: >Rev:0 */ string fn="DT_delta"; //------------------------------------------------------ static int delta; datetime TC_old; bool TC_changed=false; //------------------------------------------------------ datetime TC=TimeCurrent(); datetime TL=TimeLocal(); if(TC>TC_old){ TC_old=TC; TC_changed=true; }else{TC_changed=false;} //------------------------------------------------------ if(TC_changed){ if(delta>0){delta=MathMin(delta,TL-TC);} else{delta=TL-TC;} } //------------------------------------------------------ return(delta); } [/code] | ||||
Сообщений: 536 |
Назад
DT_ModeledCurrentВозвращает смоделированное серверное время через локальное. [code=php] datetime DT_ModeledCurrent(){ /** \version 0.0.0.0 \date 2013.10.30 \author Morochin \details Возвращает смоделированное серверное время через локальное. \internal >Hist: >Rev:0 */ string fn="DT_ModeledCurrent"; //------------------------------------------------------ int delta=DT_delta(); datetime TL=TimeLocal(); //------------------------------------------------------ datetime MC=TL-delta; //------------------------------------------------------ return(MC); } [/code] | ||||
Сообщений: 536 |
Назад
DT_Str2SecondsПеревод из строки времени в секунды. Обязательно! строка времени должна передаваться в формате:ЧЧ:ММ:СС [code=php] int DT_Str2Seconds(string t="00:00:05"){ /** \version 0.0.0.0 \date 2013.10.30 \author Morochin \details Перевод из строки времени в секунды. Обязательно! строка времени должна передаваться в формате: ЧЧ:ММ:СС \internal >Hist: >Rev:0 #include */ string fn="DT_Str2Seconds"; string a[]; ArrayResize(a,0); StringToArrayString(a,t,":"); int rows_a=ArrayRange(a,0); int res_sec=0; if(rows_a>0){ res_sec=StrToInteger(a[0])*3600+StrToInteger(a[1])*60+StrToInteger(a[2]); } return(res_sec); } [/code] | ||||
Сообщений: 536 |
Назад
DT_Time2SecondsВозвращает количество секунд во времени, переданном в параметре t. Другими словами-количество секунд, прошедшее с начала дня из параметра t. [code=php] int DT_Time2Seconds(datetime t){ /** \version 0.0.0.0 \date 2013.10.30 \author Morochin \details Возвращает количество секунд во времени, переданном в параметре t. Другими словами-количество секунд, прошедшее с начала дня из параметра t. \internal >Hist: >Rev:0 */ string fn="DT_Time2Secinds"; int res_sec=TimeHour(t)*3600+TimeMinute(t)*60+TimeSeconds(t); return(res_sec); } [/code] | ||||
Сообщений: 536 |
Назад
DT_Time2StrПереводит количество секунд, прошедших с начала дня в строку формата HH:MM:SS [code=php] string DT_Time2Str(datetime t){ /** \version 0.0.0.0 \date 2013.10.31 \author Morochin \details Переводит количество секунд, прошедших с начала дня в строку формата HH:MM:SS \internal >Hist: >Rev:0 */ string res=TimeHour(t)+":"+TimeMinute(t)+":"+TimeSeconds(t); return(res); } [/code] Редактировалось: 2 раз (Последний: 25 декабря 2013 в 13:33) | ||||
Сообщений: 536 |
Назад
DTs_isTimeBetweenПроверяет, если время заданное в параметре t находится между заданным интервалом. [code=php] bool DTs_isTimeBetween(datetime t, string st="00:00:01", string et="00:00:03"){ /** \version 0.0.0.0 \date 2013.10.30 \author Morochin \details Проверяет, если время заданное в параметре t находится между заданным интервалом. \internal >Hist: >Rev:0 */ string fn="DTs_isTimeBetween"; bool res=false; int iST=DT_Str2Seconds(st); //время начала в секундах int iET=DT_Str2Seconds(et); //время окончания интервала в секундах int iTT=DT_Time2Seconds(t); //текущее время в секундах, прошедших с начала дня. if(iST < iET){if(iST if(iST > iET){if(iTT return(res); } [/code] Редактировалось: 1 раз (Последний: 25 декабря 2013 в 13:34) |
В начало страницы |
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.