Получить 100$ на счет бесплатно!!

Получить депозит форекс за общение на форуме Бездепозитный бонус 100$

Полезные функции 2

Функции совместимые с использованием в MT4 билд >= 562
  
МедальКубок
Сообщений: 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)
Прикрепленные файлы:
sysOther_6d408.mqh | 5.11 Кб | Скачали: 445
Редактировалось: 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 Artiom
\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 Artiom
\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 s=s+sy;
}

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 Artiom
\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 s=sy+s;
}

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 Artiom
\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 Print("a["+i+"]=",a);
}
}
//+------------------------------------------------------------------+

[/code]
Прикрепленные файлы:
sTestStringToArrayString_6d408.mq4 | 1.35 Кб | Скачали: 382
Редактировалось: 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]
Прикрепленные файлы:
sTestiif_6d408.mq4 | 1.1 Кб | Скачали: 433
МедальКубок
Сообщений: 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]
Прикрепленные файлы:
sTestAddSymbolsRight_6d408.mq4 | 0.97 Кб | Скачали: 429
Редактировалось: 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]
Прикрепленные файлы:
sTestAddSymbolsLeft_6d408.mq4 | 0.97 Кб | Скачали: 479
МедальКубок
Сообщений: 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]
Прикрепленные файлы:
sTestOStringReplace_6d408.mq4 | 0.97 Кб | Скачали: 402
МедальКубок
Сообщений: 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")


Пример использования библиотеки
Прикрепленные файлы:
sysDT_9c1u4.mqh | 3.54 Кб | Скачали: 402
Редактировалось: 8 раз (Последний: 25 декабря 2013 в 13:41)
МедальКубок
Сообщений: 536
Назад

DT_delta


Возвращает минимальную разницу между локальным временем и серверным.

[code=php]
int DT_delta(){
/**
\version 0.0.0.1
\date 2013.10.30
\author Morochin Artiom
\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 Artiom
\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 Artiom
\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 Artiom
\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 Artiom
\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 Artiom
\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(iTTiST){res=true;}}

return(res);
}
[/code]
Редактировалось: 1 раз (Последний: 25 декабря 2013 в 13:34)
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.

← Назад