Данная функция выполняет преобразование строки в нижний регистр. Все ПРОПИСНЫЕ (большие) символы становятся строчными (маленькими). Функция StringLower() принимает только один обязательный параметр - это входящая строка.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает строку в нижнем регистре |//+----------------------------------------------------------------------------+string StringLower(string s) {
int c, i, k=StringLen(s), n;
for (i=0; i<k; i++) {
n=0;
c=StringGetChar(s, i);
if (c>64 && c<91) n=c+32; // A-Z -> a-zif (c>191 && c<224) n=c+32; // А-Я -> а-яif (c==168) n=184; // Ё -> ёif (n>0) s=StringSetChar(s, i, n);
}
return(s);
}
Данная функция выполняет преобразование строки в ВЕРХНИЙ регистр. Все строчные (маленькие) символы становятся ПРОПИСНЫМИ (большими). Функция StringUpper() принимает только один обязательный параметр - это входящая строка.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает строку в ВЕРХНЕМ регистре |//+----------------------------------------------------------------------------+string StringUpper(string s) {
int c, i, k=StringLen(s), n;
for (i=0; i<k; i++) {
n=0;
c=StringGetChar(s, i);
if (c>96 && c<123) n=c-32; // a-z -> A-Zif (c>223 && c<256) n=c-32; // а-я -> А-Яif (c==184) n=168; // ё -> Ёif (n>0) s=StringSetChar(s, i, n);
}
return(s);
}
Функция StringToArrayDouble().
Данная функция выполняет расщепление строки на составляющие её вещественные числа и каждое число добавляется в массив отдельным элементом. Сколько вещественных чисел окажется в строке, столько же элементов и будет добавлено в массив. В качестве разделителя распознаётся точка с запятой. Функция StringToArrayDouble() возвращает количество элементов массива, а принимает следующие обязательный параметры:
st - Строка вещественных чисел через точку с запятой.
ad - Массив вещественных чисел.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 10.10.2008 |//| Описание : Перенос вещественных чисел из строки в массив |//+----------------------------------------------------------------------------+//| Параметры: |//| st - строка вещественных чисел через точку с запятой |//| ad - массив вещественных чисел |//+----------------------------------------------------------------------------+//| Возврат: |//| Количество элементов в массиве |//+----------------------------------------------------------------------------+int StringToArrayDouble(string st, double& ad[]) {
int i=0, np;
string stp;
ArrayResize(ad, 0);
while (StringLen(st)>0) {
np=StringFind(st, ";");
if (np<0) {
stp=st;
st="";
} else {
stp=StringSubstr(st, 0, np);
st=StringSubstr(st, np+1);
}
i++;
ArrayResize(ad, i);
ad[i-1]=StrToDouble(stp);
}
return(ArraySize(ad));
}
Данная функция выполняет расщепление строки на составляющие её целые числа, и каждое число добавляется в массив отдельным элементом. Сколько целых чисел окажется в строке, столько же элементов и будет добавлено в массив. В качестве разделителя распознаётся запятая. Функция StringToArrayDouble() возвращает количество элементов массива, а принимает следующие обязательный параметры:
st - Строка целочисленных значений через запятую.
ai - Целочисленный массив.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Перенос целочисленных значений из строки в массив |//+----------------------------------------------------------------------------+//| Параметры: |//| st - строка целочисленных значений через запятую |//| ai - целочисленный массив |//+----------------------------------------------------------------------------+//| Возврат: |//| Количество элементов в массиве |//+----------------------------------------------------------------------------+int StringToArrayInt(string st, int& ai[]) {
int i=0, np;
string stp;
ArrayResize(ai, 0);
while (StringLen(st)>0) {
np=StringFind(st, ",");
if (np<0) {
stp=st;
st="";
} else {
stp=StringSubstr(st, 0, np);
st=StringSubstr(st, np+1);
}
i++;
ArrayResize(ai, i);
ai[i-1]=StrToInteger(stp);
}
return(ArraySize(ai));
}
Функция StrSplit().
Данная функция выполняет расщепление строки на составляющие её подстроки таким образом, что каждая подстрока становится отдельным элементом массива. Разделитель задаётся параметром и может быть произвольным. Функция StrSplit() возвращает количество элементов массива и принимает следующие параметры:
st - Строка с разделителями.
as - Массив элементов типа string.
de - Разделитель. Необязательный параметр. Значение по умолчанию - "," (запятая).
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 23.06.2008 |//| Описание : Разбиение строки на массив элементов |//+----------------------------------------------------------------------------+//| Возврат: |//| Количество элементов в массиве |//| Параметры: |//| st - строка с разделителями |//| as - строковый массив |//| de - разделитель |//+----------------------------------------------------------------------------+int StrSplit(string st, string& as[], string de=",") {
int i=0, np;
string stp;
ArrayResize(as, 0);
while (StringLen(st)>0) {
np=StringFind(st, ",");
if (np<0) {
stp=st;
st="";
} else {
stp=StringSubstr(st, 0, np);
st=StringSubstr(st, np+1);
}
i++;
ArrayResize(as, i);
as[i-1]=stp;
}
return(ArraySize(as));
}
Данная функция выполняет замену подстроки. Заменяются все найденные вхождения. Например, можно одним махом заменить все запятые на точки или наоборот. Функция StrSplit() возвращает результирующую строку и принимает следующие обязательные параметры:
str - Строка, в которой выполняется замена подстроки strFrom.
strFrom - Заменяемая подстрока. Если подстрока strFrom будет найдена в строке str, то она будет заменена на подстроку strTo.
strTo - Заменяющая подстрока.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| описание : Замена подстроки |//+----------------------------------------------------------------------------+//| Параметры: |//| str - текстовая строка, в которой производится замена |//| strFrom - заменяемая подстрока |//| strTo - заменяющая подстрока |//+----------------------------------------------------------------------------+string StrTran(string str, string strFrom, string strTo) {
int n;
string strOut="", strTemp;
for (n=0; n<StringLen(str); n++) {
strTemp=StringSubstr(str, n, StringLen(strFrom));
if (strTemp==strFrom) {
strOut=StringConcatenate(strOut, strTo);
n=n+StringLen(strFrom)-1;
} else strOut=StringConcatenate(strOut, StringSubstr(str, n, 1));
}
return(strOut);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 23.04.2009 |//| Описание : Перенос уровня стопа в безубыток |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void MovingInWL(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
}
}
Данная функция возвращает флаг разрешения торговли по времени. Вообще-то, на самом деле проверяется расположение текущего времени торгового сервера внутри некоего временного отрезка. Если внутри, то функция isTradeTimeString() возвращает истину, иначе - ложь. Особенностью данной функции является возможность задания временного отрезка как внутри суток, так и за пределами одних суток. Подробнее это будет показано в примерах использования. Функция isTradeTimeString() принимает следующие необязательные параметры:
TimeBegin - Строка в формате "ЧЧ:ММ", задаёт время начала торговли. Значение по умолчанию - "00:00".
TimeEnd - Строка в формате "ЧЧ:ММ", задаёт время окончания торговли. Значение по умолчанию - "00:00".
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 29.04.2009 |//| Описание : Возвращает флаг разрешения торговли по времени. |//+----------------------------------------------------------------------------+//| Параметры: |//| TimeBegin - время начала торговли (ЧЧ:ММ) |//| TimeEnd - время окончания торговли (ЧЧ:ММ) |//+----------------------------------------------------------------------------+bool isTradeTimeString(string TimeBegin="00:00", string TimeEnd="00:00") {
datetime dtBegin, dtEnd; // Время начала и окончания работыint hc, he; // Часы текущего времени и окончания работы
dtBegin=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeBegin);
dtEnd =StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeEnd);
hc =TimeHour(TimeCurrent());
he =TimeHour(dtEnd);
if (dtBegin>=dtEnd) {
if (hc>=he) dtEnd+=24*60*60; else dtBegin-=24*60*60;
}
if (TimeCurrent()>=dtBegin && TimeCurrent()<=dtEnd) return(True);
elsereturn(False);
}
Функция isTradeTimeInt().
Данная функция возвращает флаг разрешения торговли по времени. Возвращаемое значение - истина или ложь. Функция isTradeTimeInt() по принципу распознавания временного интервала аналогична функции isTradeTimeString(), то есть время начала торговли может быть как больше (временной отрезок внутри суток) времени окончания, так и меньше (временной отрезок в разных сутках). Функция isTradeTimeInt() принимает следующие необязательные параметры:
hb - Число, задаёт часы времени начала торговли. Значение по умолчанию - 0.
mb - Число, задаёт минуты времени начала торговли. Значение по умолчанию - 0.
he - Число, задаёт часы времени окончания торговли. Значение по умолчанию - 0.
me - Число, задаёт минуты времени окончания торговли. Значение по умолчанию - 0.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 30.04.2009 |//| Описание : Возвращает флаг разрешения торговли по времени. |//+----------------------------------------------------------------------------+//| Параметры: |//| hb - часы времени начала торговли |//| mb - минуты времени начала торговли |//| he - часы времени окончания торговли |//| me - минуты времени окончания торговли |//+----------------------------------------------------------------------------+bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
datetime db, de; // Время начала и окончания работыint hc; // Часы текущего времени торгового сервера
db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
hc=TimeHour(TimeCurrent());
if (db>=de) {
if (hc>=he) de+=24*60*60; else db-=24*60*60;
}
if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
elsereturn(False);
}
Игорь Ким публиковал свои функции и здесь, и на своем сайте в виде "сборников функций", одним файлом. В таком виде применять эти сборники как подключаемые библиотеки не получалось. Но очень удобно, особенно при разработке советников использовать библиотеки для упрощения и уменьшения кода советника. К тому же это снимает все вопросы по корректному использованию торговых операций и позволяет сосредоточиться на стратегии, что особенно ценно для трейдеров с начальными навыками программирования. В прикрепленных файлах все те же сборники функций, оформленные в виде библиотек. Библиотеки просто помещаются в каталог .../experts/include, компилировать их не надо, пример подключения приведен ниже. После их подключения достаточно из кода советника вызвать нужную функцию.
#include <b-Positions_include.mqh> // Библиотека функций для работы с позициями #include <b-KimIV_include.mqh> // Библиотека дополнительных функций#include <b-Orders_include.mqh> // Библиотека функций для работы с ордерами
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
появляется "JPY"??????
satop:
Функция isCloseLastPosByStop().
Эта функция возвращает флаг закрытия последней позиции по стопу. Флаг поднят - True - сработал StopLoss. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Функция StringLower().
Данная функция выполняет преобразование строки в нижний регистр. Все ПРОПИСНЫЕ (большие) символы становятся строчными (маленькими). Функция StringLower() принимает только один обязательный параметр - это входящая строка.
Функция StringUpper().
Данная функция выполняет преобразование строки в ВЕРХНИЙ регистр. Все строчные (маленькие) символы становятся ПРОПИСНЫМИ (большими). Функция StringUpper() принимает только один обязательный параметр - это входящая строка.
Функция StringToArrayDouble().
Данная функция выполняет расщепление строки на составляющие её вещественные числа и каждое число добавляется в массив отдельным элементом. Сколько вещественных чисел окажется в строке, столько же элементов и будет добавлено в массив. В качестве разделителя распознаётся точка с запятой. Функция StringToArrayDouble() возвращает количество элементов массива, а принимает следующие обязательный параметры:
Функция StringToArrayInt().
Данная функция выполняет расщепление строки на составляющие её целые числа, и каждое число добавляется в массив отдельным элементом. Сколько целых чисел окажется в строке, столько же элементов и будет добавлено в массив. В качестве разделителя распознаётся запятая. Функция StringToArrayDouble() возвращает количество элементов массива, а принимает следующие обязательный параметры:
Функция StrSplit().
Данная функция выполняет расщепление строки на составляющие её подстроки таким образом, что каждая подстрока становится отдельным элементом массива. Разделитель задаётся параметром и может быть произвольным. Функция StrSplit() возвращает количество элементов массива и принимает следующие параметры:
Функция StrTran().
Данная функция выполняет замену подстроки. Заменяются все найденные вхождения. Например, можно одним махом заменить все запятые на точки или наоборот. Функция StrSplit() возвращает результирующую строку и принимает следующие обязательные параметры:
Функция isTradeTimeString().
Данная функция возвращает флаг разрешения торговли по времени. Вообще-то, на самом деле проверяется расположение текущего времени торгового сервера внутри некоего временного отрезка. Если внутри, то функция isTradeTimeString() возвращает истину, иначе - ложь. Особенностью данной функции является возможность задания временного отрезка как внутри суток, так и за пределами одних суток. Подробнее это будет показано в примерах использования. Функция isTradeTimeString() принимает следующие необязательные параметры:
Функция isTradeTimeInt().
Данная функция возвращает флаг разрешения торговли по времени. Возвращаемое значение - истина или ложь. Функция isTradeTimeInt() по принципу распознавания временного интервала аналогична функции isTradeTimeString(), то есть время начала торговли может быть как больше (временной отрезок внутри суток) времени окончания, так и меньше (временной отрезок в разных сутках). Функция isTradeTimeInt() принимает следующие необязательные параметры:
В прикрепленных файлах все те же сборники функций, оформленные в виде библиотек. Библиотеки просто помещаются в каталог .../experts/include, компилировать их не надо, пример подключения приведен ниже.
После их подключения достаточно из кода советника вызвать нужную функцию.
Уважаемый, откуда в строке
Функция isCloseLastPosByStop().
Эта функция возвращает флаг закрытия последней позиции по стопу. Флаг поднят - True - сработал StopLoss. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:
Я так понимаю, функции писались тогда, когда 5-ти знаков ещё не было. JPY служил как типа пример сравнения.
Нетрудно на единичку увеличить!