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

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

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

Функции совместимые с использованием в MT4 билд >= 562
  
МедальКубок
Сообщений: 536
Назад

Пример



Скрипт

[code=php]
//+------------------------------------------------------------------+
//| sTest_sysDT.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
//--------------------------------------------------------------------
#include
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void start()
{
//---
datetime mc=DT_ModeledCurrent();
string time2str=DT_Time2Str(mc);
int time2sec=DT_Time2Seconds(mc);
int str2sec=DT_Str2Seconds(time2str);
bool istimebetween=DTs_isTimeBetween(mc,"12:48:53","15:54:18");
Print("DT_ModeledCurrent=",mc);
Print("DT_Time2Str=",time2str);
Print("DT_Time2Seconds=",time2sec);
Print("DT_Str2Seconds=",str2sec);
Print("DTs_isTimeBetween 12:48:53 and 15:54:18 =",istimebetween);
}
//+------------------------------------------------------------------+

[/code]
Прикрепленные файлы:
sTestsysDT_6ghme.mq4 | 1.35 Кб | Скачали: 399
sTestsysDT_6ghme.ex4 | 17.56 Кб | Скачали: 366
МедальКубок
Сообщений: 536
Начало

sysNormalize.mqh


версия: 0.0.1.0
дата: 2013.12.24

Нормализация реальных чисел

double Norm_symb(double d, string sy = "", int add = 0)

double Norm_vol(double v, string sy = "")
Прикрепленные файлы:
sysNormalize_6ghme.mqh | 1.78 Кб | Скачали: 345
Редактировалось: 2 раз (Последний: 25 декабря 2013 в 14:32)
МедальКубок
Сообщений: 536
Назад

Norm_symb


Нормализует значение типа double количеством знаков после запятой для заданного инструмента.

[code=php]
double Norm_symb(double d, string sy = "", int add = 0){//..
/*
>Ver : 0.0.2
>Date : 2012.07.18
>Hist:
@0.0.2@2012.07.18@artamir [+] добавление новой переменной add
@0.0.1@2012.06.25@artamir [+] Базовый функционал
>Desc:
Нормализует значение типа double количеством знаков после запятой для заданного инструмента.
>VARS:
d : Переменная типа доубл
sy : Название инструмента
add : Добавление количесва значащих цифр после запятой
*/
//==================================
if(sy == ""){
sy = Symbol();
}
//----------------------------------
if(d == 0){
return(0);
}
//----------------------------------
int di = MarketInfo(sy, MODE_DIGITS);
return(NormalizeDouble(d, di+add));
}//.

[/code]
МедальКубок
Сообщений: 536
Начало

Norm_vol


Нормализация объема по шагу изменения.

[code=php]
double Norm_vol(double v, string sy = ""){//..
/*
>Ver : 0.0.2
>Date : 2012.07.31
>History:
@0.0.2@2012.07.31@artamir [+] Добавил нормализацию объема в зависимости от шага объема.
@0.0.1@2012.07.25@artamir []
>Description: Нормализация объема по шагу изменения.
*/

//--------------------------------------------------------------------
if(sy == ""){
sy = Symbol();
}

//--------------------------------------------------------------------
int d = 2; //

//--------------------------------------------------------------------
double lotStep = MarketInfo(sy, MODE_LOTSTEP);

//--------------------------------------------------------------------
if(lotStep == 0.01){
d = 2;
}
//------
if(lotStep == 0.1){
d = 1;
}
//------
if(lotStep == 1){
d = 0;
}
//--------------------------------------------------------------------
return(NormalizeDouble(v, d));
}//.

[/code]
МедальКубок
Сообщений: 536
Начало

Пример



Эксперт

Запускать на терминале более 562 билда

[code=php]
//+------------------------------------------------------------------+
//| eTest_sysNormalize.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
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Print("Norm_symb(2.1234567)=",Norm_symb(2.1234567));
Print("Norm_symb(2.1234567,'EURJPY')=",Norm_symb(2.1234567,"EURJPY"));
Print("Norm_symb(2.1234567,'',8)=",Norm_symb(2.1234567,"",8));
Print("Norm_vol(0.123)=",Norm_vol(0.123));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---

}
//+------------------------------------------------------------------+

[/code]
Прикрепленные файлы:
eTestsysNormalize_6ghme.mq4 | 1.62 Кб | Скачали: 393
МедальКубок
Сообщений: 536
Начало

sysStructure.mqh


Функции для работы со структурой, сохраненной в строке.

Для работы необходима библиотека sysOther.mqh

int Struc_KeyValue_int(string str, string key = "@p", int def = -1)

double Struc_KeyValue_double(string str, string key = "@p")

string Struc_KeyValue_string(string str, string key = "@p", string def = "")

string Struc_StringKeyValue(string str = "", string key = "@p", string def = "-1", string del = "@")

string Struc_setValue(string str, string key = "p", string value = "0", string del = "@")

Пример работы с библиотекой
Прикрепленные файлы:
sysStructure_6ghme.mqh | 2.77 Кб | Скачали: 357
Редактировалось: 6 раз (Последний: 25 декабря 2013 в 19:00)
МедальКубок
Сообщений: 536
Назад

Struc_KeyValue_int


Возвращает значение, заданное ключом

[code=php]
int Struc_KeyValue_int(string str, string key = "@p", int def = -1){
/*
>Ver : 0.0.0.2
>Date : 2013.08.05
>History:
@0.0.0.2@2013.08.05@artamir [*] Добавлен параметр, возвращающий значение по умолчанию
>Description:
return int value by key from format string
*/

return(StrToInteger(Struc_StringKeyValue(str,key,def)));
}
[/code]
МедальКубок
Сообщений: 536
Назад

Struc_KeyValue_double


Возвращает значение, заданное ключом

[code=php]
double Struc_KeyValue_double(string str, string key = "@p"){
/*
>Ver : 0.0.1
>Date : 2012.04.05
>History:
>Description:
return double value by key from format string
*/

return(StrToDouble(Struc_StringKeyValue(str,key)));
}
[/code]
МедальКубок
Сообщений: 536
Назад

Struc_KeyValue_string


Возвращает значение, заданное ключом

[code=php]
string Struc_KeyValue_string(string str, string key = "@p", string def = ""){
return(Struc_StringKeyValue(str,key,def));
}
[/code]
МедальКубок
Сообщений: 536
Назад

Struc_StringKeyValue


Возвращает значение, заданное ключом.

[code=php]
string Struc_StringKeyValue(string str = "", string key = "@p", string def = "-1", string del = "@"){
/*
>Ver : 0.0.0.3
>Date : 2013.08.05
>History:
@0.0.0.3@2013.08.05@artamir [*] Изменились названия параметров функции.
>Description:
@str = incoming string of the form "@p123456@l5@w3@d1"; p,l,w,d - name of keys
@key = <@x>; where @-separator, x-name of key

on defolt return parent ticket
if key not found, return defolt value
*/
int lPosStart = -1; //start position of key name
int lPosEnd = -1; //end position of key name
string d = del; //разделитель
//---
if(StringFind(key,d,0) == -1){
key = d + key;
}
//---
lPosStart = StringFind(str,key,0);

if(lPosStart == -1){
return(def);
}
//---
int lKeyLen = StringLen(key);
lPosEnd = StringFind(str,d,lPosStart+1); // find position of "@" in str after lPosStart
lPosStart = lPosStart + lKeyLen;
int len = iif(lPosEnd == -1, -1, lPosEnd - lPosStart);
//---
return(StringSubstr(str, lPosStart, len));
}
[/code]
МедальКубок
Сообщений: 536
Назад

Struc_setValue


Устанавливает значение, соответствующее ключу в строку str возвращает измененную строку.

[code=php]
string Struc_setValue(string str, string key = "p", string value = "0", string del = "@"){
/**
\version 0.0.0.1
\date 2013.08.02
\author Morochin Artiom
\details Устанавливает значение, соответствующее ключу в строку str
возвращает измененную строку.
\internal
>Hist:
@0.0.0.1@2013.08.02@artamir [] Struc_setValue
>Rev:0
*/

key = O_StringReplace(key,del,"");
string lkey = del+key;
int start_pos = StringFind(str, lkey);

if(start_pos == -1){
str = str+lkey+value;
return(str);
}

string old_value = Struc_KeyValue_string(str, lkey);
str = O_StringReplace(str, lkey+old_value, lkey+value);
return(str);
}
[/code]
МедальКубок
Сообщений: 536
Назад

Пример



советник

для билда от 562

[code=php]
//+------------------------------------------------------------------+
//| eTest_sysStructure.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
#include
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
string s="@int123@dbl123.456@strthis is string :)";
Print(s);
Print("Struc_KeyValue_int(s,'@int')=",Struc_KeyValue_int(s,"@int"));
Print("Struc_KeyValue_double(s,'@dbl')=",Struc_KeyValue_double(s,"@dbl"));
Print("Struc_KeyValue_string(s,'@str')=",Struc_KeyValue_string(s,"@str"));
Print("Struc_setValue(s,'@str','this is new string')=",Struc_setValue(s,"@str","this is new string"));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---

}
//+------------------------------------------------------------------+

[/code]
Прикрепленные файлы:
eTestsysStructure_6ghme.ex4 | 7.96 Кб | Скачали: 350
МедальКубок
Сообщений: 536
Начало

iStoh.mqh


версия:0.0.1.0
дата:2013.12.25

Функции для работы с индикатором iStohastic.

void aSth_Init()

int aSth_set(int k=5, int d=3, int sl=3, int me=MODE_SMA, int pr=0, string sy="", int tf=0, int shift=0)

double iSth_get(int handle=0, int line=MODE_MAIN, int shift=-1, int dgt=0, bool useSinhro = true)

int iSth_getArray(int h, double &a[], int l=MODE_MAIN, int shift = -1, double def=-1)

int iSth_Cross(double &f[], double &s[], int shift=2)

int iSth_CrossMainSignal(int h, int shift = 1)

int iSth_CrossMainLevel(int h, int l=80 /** exemple 80*/, int shift=1)

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

aSth_Init


Очищает стринговый массив. Использовать при инициализации библиотеки

[code=php]
void aSth_Init(){
/**
\version 0.0.0.0
\date 2013.05.20
\author Morochin Artiom
\details Очищает стринговый массив. Использовать при инициализации библиотеки.
\internal
>Hist:
>Rev:0
*/

ArrayResize(aStSets,0);
}
[/code]
МедальКубок
Сообщений: 536
Назад

aSth_set


Сохраняет настройку стохастика в массив настроек. Возвращает индекс настройки в массиве.

[code=php]
int aSth_set( int k = 5 /** %Kperiod */
, int d = 3 /** %Dperiod */
, int sl = 3 /** slowing */
, int me = MODE_SMA /** method */
, int pr = 0 /** price_field */
, string sy = "" /** symbol */
, int tf = 0 /** timeframe */
, int shift = 0 /** shift */){
/**
\version 0.0.0.3
\date 2013.07.25
\author Morochin Artiom
\details Сохраняет настройку стохастика в массив настроек. Возвращает индекс настройки в массиве.
\internal
>Hist:
@0.0.0.3@2013.07.25@artamir [+] добавлена настройка таймфрейма
>Rev:0
*/

int ROWS = ArrayRange(aStSets,0);
ROWS++;
int lastROW=ROWS-1;
ArrayResize(aStSets, ROWS);

if(sy == ""){
sy=Symbol();
}

string s = "";
s=s+"@k"+k;
s=s+"@d"+d;
s=s+"@sl"+sl;
s=s+"@pr"+pr;
s=s+"@me"+me;
s=s+"@sy"+sy;
s=s+"@tf"+tf;
s=s+"@sh"+shift;

aStSets[lastROW]=s;
return(lastROW);
}

[/code]
МедальКубок
Сообщений: 536
Назад

iSth_get


Возвращает значение заданной линии стохастика по заданному индексу в массиве настроек и индексу бара. Синхронизация смещения происходит по времени бара с заданным индексом на текущем фрейме.

[code=php]
double iSth_get(int handle=0, int line=MODE_MAIN, int shift=-1, int dgt=0, bool useSinhro = true /** использовать синхронизацию таймфреймов. */){
/**
\version 0.0.0.5
\date 2013.07.25
\author Morochin Artiom
\details Возвращает значение заданной линии стохастика по заданному индексу в массиве настроек и индексу бара.
Синхронизация смещения происходит по времени бара с заданным индексом на текущем фрейме.
\internal
>Hist:
@0.0.0.5@2013.07.25@artamir [*] синхронизация с тф отличными от текущуго.
@0.0.0.4@2013.07.25@artamir [*] Изменения связанные с ST_MODE_AVG
@0.0.0.3@2013.07.25@artamir [*] Добавлено получение tf.
>Rev:0
*/

int k = Struc_KeyValue_int(aStSets[handle] , "@k");
int d = Struc_KeyValue_int(aStSets[handle] , "@d");
int sl = Struc_KeyValue_int(aStSets[handle] , "@sl");
double pr = Struc_KeyValue_double(aStSets[handle] , "@pr");
int me = Struc_KeyValue_int(aStSets[handle] , "@me");
string sy = Struc_KeyValue_string(aStSets[handle] , "@sy");
int tf = Struc_KeyValue_int(aStSets[handle] , "@tf");

int sh = shift;
if(sh<=-1){
sh = Struc_KeyValue_int(aStSets[handle], "@sh");
}


if(useSinhro){
if(tf != Period()){
sh = iBarShift(sy, tf, iTime(sy, 0, sh));
}
}

double stoh = 0.0;
if(line == ST_MODE_AVG){
stoh = (iStochastic(sy,tf,k,d,sl,me,pr,MODE_MAIN,sh) + iStochastic(sy,tf,k,d,sl,me,pr,MODE_SIGNAL,sh))/2;
}else{
stoh = iStochastic(sy,tf,k,d,sl,me,pr,line,sh);
}

stoh = Norm_symb(stoh, "", dgt);
return(stoh);
}

[/code]
МедальКубок
Сообщений: 536
Назад

iSth_getArray


Возвращает массив линии индикатора из 3-х элементов.

[code=php]
int iSth_getArray(int h, double &a[], int l=MODE_MAIN, int shift = -1, double def=-1/** если > -1, то заполняет массив переданным значением*/){
/**
\version 0.0.0.1
\date 2013.07.17
\author Morochin Artiom
\details Возвращает массив линии индикатора из 3-х элементов.
\internal
>Hist:
@0.0.0.1@2013.07.17@artamir [] iSth_getArray
>Rev:0
*/

ArrayResize(a,0); //Очистили массив.
int ROWS = 0; //Начальное количество элементов.

for(int i = shift-1; i<= shift+1; i++){
ROWS++;
ArrayResize(a,ROWS);
if(def==-1){
a[ROWS-1]=iSth_get(h, l, i);
}else{
a[ROWS-1]=def;
}
}

return(ROWS);
}
[/code]
МедальКубок
Сообщений: 536
Назад

iSth_Cross


Определяем, было ли на баре с заданным индексом пересечение значений быстрого и медленного массива. Возвращает статус пересечения. (0: нет пересечения, 1: пересечение снизу вверх, 2: пересечение сверху вниз)

[code=php]
int iSth_Cross( double &f[] /** быстрый массив */
, double &s[] /** медленный массив */
, int shift=2 /** индекс бара для проверки пересечения */){
/**
\version 0.0.0.2
\date 2013.07.25
\author Morochin Artiom
\details Определяем, было ли на баре с заданным индексом пересечение значений быстрого и медленного массива
Возвращает статус пересечения. (0: нет пересечения, 1: пересечение снизу вверх, 2: пересечение сверху вниз)
\internal
>Hist:
@0.0.0.2@2013.07.25@artamir [] изменились определения.
@0.0.0.1@2013.07.17@artamir [] iSth_Cross
>Rev:0
*/

double f3=Norm_symb(f[shift+1],"",2), f2=Norm_symb(f[shift],"",2), f1=Norm_symb(f[shift-1],"",2);
double s3=Norm_symb(s[shift+1],"",2), s2=Norm_symb(s[shift],"",2), s1=Norm_symb(s[shift-1],"",2);

int status = ST_CRNONE;

if(f3s2){
status = ST_CRUP;
}

if(f3>s3 && f2 status = ST_CRDW;
}

if(f2==s2){
if(f3s1){
status = ST_CRUP;
}

if(f3>s3 && f1 status = ST_CRDW;
}
}

return(status);

}

[/code]
МедальКубок
Сообщений: 536
Назад

iSth_CrossMainSignal


Проверяет, если на баре с заданным индексом было пересечение главной и сигнальной линий

[code=php]
int iSth_CrossMainSignal(int h, int shift = 1){
/**
\version 0.0.0.1
\date 2013.07.17
\author Morochin Artiom
\details Проверяет, если на баре с заданным индексом было пересечение главной и сигнальной линий
\internal
>Hist:
@0.0.0.1@2013.07.17@artamir [] iSth_CrossMainSignal
>Rev:0
*/

double f[];
double s[];

int ROWS_f = iSth_getArray(h, f, MODE_MAIN, shift);
int ROWS_s = iSth_getArray(h, s, MODE_SIGNAL, shift);
return(iSth_Cross(f,s,1));
}
[/code]
МедальКубок
Сообщений: 536
Назад

iSth_CrossMainLevel


Пересечение основной линии с заданным уровнем

[code=php]
int iSth_CrossMainLevel(int h, int l=80 /** exemple 80*/, int shift=1){
/**
\version 0.0.0.0
\date 2013.07.17
\author Morochin Artiom
\details Пересечение основной линии с заданным уровнем
\internal
>Hist:
>Rev:0
*/

double f[];
double s[];

int ROWS_f = iSth_getArray(h, f, MODE_MAIN, shift);
int ROWS_s = iSth_getArray(h, s, 0, 0, l);
return(iSth_Cross(f,s,1));

}
[/code]
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.

← Назад