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

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

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

Сборник процедур/функций, чтоб не изобретать велосипед.
  
МедальКубок
Сообщений: 536

iFR.IsDwMode2



Проверяет, если бар с индексом fb является нижним фракталом
Бар считается нижним фракталом, минимум бара является самым низким минимумом слева и справа на заданное кол. баров. А так же если слева минимумы баров последовательно понижаются, а справа - возрастают.

[code=php]
bool iFR.IsDwMode2(int fb = 1){
/*
>Ver : 0.0.3
>Date : 2013.01.18
>Hist :
@0.0.3@2013.01.18@artamir [+] Добавлен тип цены: Закрытие
@0.0.2@2013.01.11@artamir []
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : check if bar with index fb is down fractal
*/

bool f = true;

int i = -1;

//-------------------------------------------------
if(fb < iFR.NR){
return(false);
}

//--------------------------------------------------
for(i = fb; i > fb - iFR.NR; i--){

//----------------------------------------------
if(iFR.Pr == iFR.PR_HL){
if(iLow(NULL, 0, i) > iLow(NULL, 0, i-1)){
f = false;
}
}
if(iFR.Pr == iFR.PR_C){
if(iClose(NULL, 0, i) > MathMin(iClose(NULL, 0, i-1),iOpen(NULL, 0, i-1))){
f = false;
}
}
}

//--------------------------------------------------
if(!f){
return(false);
}

//--------------------------------------------------
if(f){
for(i = fb; i < fb + iFR.NL; i++){
if(iFR.Pr == iFR.PR_HL){
if(iLow(NULL, 0, i) > iLow(NULL, 0, i+1)){
f = false;
}
}
if(iFR.Pr == iFR.PR_C){
if(iClose(NULL, 0, i) > MathMin(iClose(NULL, 0, i+1),iOpen(NULL, 0, i+1))){
f = false;
}
}
}
}

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

iFR.IsUp


Обертка для вызова функции определения верхнего фрактала в зависимости от режима.


[code=php]
bool iFR.IsUp(int fb = 1){
/*
>Ver : 0.0.1
>Date : 2013.01.10
>Hist :
@0.0.1@2013.01.10@artamir []
>Author : Morochin Artiom
>Desc : Обертка для вызова функции определения верхнего фрактала в зависимости от режима.
*/

//--------------------------------------------------
if(iFR.Mode == iFR.MODE_STD){
return(iFR.IsUpMode1(fb));
}

//--------------------------------------------------
if(iFR.Mode == iFR.MODE_HL){
return(iFR.IsUpMode2(fb));
}
}
[/code]
МедальКубок
Сообщений: 536

iFR.IsDw


Обертка для вызова функции определения нижнего фрактала в зависимости от режима.

[code=php]
bool iFR.IsDw(int fb = 1){
/*
>Ver : 0.0.1
>Date : 2013.01.10
>Hist :
@0.0.1@2013.01.10@artamir []
>Author : Morochin Artiom
>Desc : Обертка для вызова функции определения нижнего фрактала в зависимости от режима.
*/

//--------------------------------------------------
if(iFR.Mode == iFR.MODE_STD){
return(iFR.IsDwMode1(fb));
}

//--------------------------------------------------
if(iFR.Mode == iFR.MODE_HL){
return(iFR.IsDwMode2(fb));
}
}
[/code]
МедальКубок
Сообщений: 536

iFR.getNearstUp


Возвращает номер бара ближайшего верхнего фрактала. Отсчет ведется от бара с индексом startBar

[code=php]
int iFR.getNearstUp(int startBar = 1){
/*
>Ver : 0.0.1
>Date : 2012.11.13
>Hist :
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : return index of bar of nearst up fractal
Возвращает номер бара ближайшего верхнего фрактала.
*/

bool f = false;
int i = startBar-1;

while(!f && i < Bars){
i++;

if(iFR.IsUp(i)){
f = true;
}
}

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

iFR.getNearstDw


Возвращает номер бара ближайшего нижнего фрактала.

[code=php]
int iFR.getNearstDw(int startBar = 1){
/*
>Ver : 0.0.1
>Date : 2012.11.13
>Hist :
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : return index of bar of nearst down fractal
Возвращает номер бара ближайшего нижнего фрактала.
*/

bool f = false;
int i = startBar-1;

while(!f && i < Bars){
i++;

if(iFR.IsDw(i)){
f = true;
}
}

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

iFR.getNearestUpPrice


Возвращает цену хая ближайшего верхнего фрактала


[code=php]
double iFR.getNearestUpPrice(int startBar){
/*
>Ver : 0.0.1
>Date : 2012.11.13
>Hist :
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : return price by nearest up fractal
Возвращает цену ближайшего верхнего фрактала
*/

int fb = iFR.getNearstUp(startBar);

return(iHigh(NULL, 0, fb));
}
[/code]
МедальКубок
Сообщений: 536

iFR.getNearestDwPrice


Возвращает цену ближайшего нижнего фрактала

[code=php]
double iFR.getNearestDwPrice(int startBar){
/*
>Ver : 0.0.2
>Date : 2012.11.13
>Hist :
@0.0.2@2012.11.13@artamir []
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : return price by nearest down fractal
Возвращает цену ближайшего нижнего фрактала
*/

int fb = iFR.getNearstDw(startBar);
return(iLow(NULL, 0, fb));
}
[/code]
МедальКубок
Сообщений: 536
Примером использования заголовочного файла iFractal.mqh будет код индикатора фракталов с расширенными настройками.

[code=php]
//+------------------------------------------------------------------+
//| iFR.mq4 |
//| Copyright 2012, artamir |
//| forexmd.ucoz.org |
//| elt.ucoz.org |
//| eltth.ucoz.org |
//| artamir@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, artamir"
#property link "forexmd.ucoz.org"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LightGreen
#property indicator_color2 Red

#include

//--- input parameters
extern int Left=2;
extern int Right=2;
extern int Mode=1; //1 - классика, 2 - последовательные хай лоу
extern int Price=1; //Тип цены поиска фрактала 1 - хай/лоу, 2 - закрытие
//--- buffers
double U[];
double D[];
double UV[]; //Буффер для визуального отображения
double DV[]; //----------------------------------

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,217);
SetIndexBuffer(2,UV);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(3,218);
SetIndexBuffer(1,DV);
SetIndexEmptyValue(1,0.0);

SetIndexBuffer(0,U);
SetIndexEmptyValue(0,0.0);
SetIndexBuffer(1,D);
SetIndexEmptyValue(1,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
iFR.Set(Left, Right, Mode, Price);

int ic=IndicatorCounted();
//----
int lim = Bars - ic + Right;

for(int i = lim; i >= 0; i--){
if(iFR.IsUp(i)){
U = iHigh(NULL, 0, i);
UV = iHigh(NULL, 0, i)+5*Point;
}

if(iFR.IsDw(i)){
D = iLow(NULL, 0, i);
DV = iLow(NULL, 0, i)-5*Point;
}
}
//----
return(0);
}
//+------------------------------------------------------------------+


[/code]

18 строка - привязка заголовочного файла к коду индикатора.

69,75,87 - вызов функций, определенных в заголовочном файле.

69 - устанавливаем настройки расчета фрактала.
75 - Проверяем, если текущий бар является верхним фракталом согласно заданных настроек.
87 - Проверяем, если текущий бар является нижним фракталом согласно заданных настроек.
Редактировалось: 1 раз (Последний: 10 июля 2013 в 16:23)
МедальКубок
Сообщений: 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:
@0.0.0.1@2013.06.12@artamir [] StringToArray
>Rev:0
*/

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+1, StringLen(s)-pR+1);
StringToArray(a, s, del);
}else{
ROWS = ROWS + 1;
ArrayResize(a, ROWS);

lastROW++;
a[lastROW] = s;
return(ROWS);
}
}
[/code]
МедальКубок
Сообщений: 536
Пример использования:
[code=php]
string input_string = "123;456";
string subs[];
ArrayResize(subs,0);
int subs_ROWS = 0;
StringToArrayString(subs, input_string, ";"); //В результате получим массив: subs[0]=123, subs[1]=456
subs_ROWS = ArrayRange(subs,0);
[/code]
МедальКубок
Сообщений: 536

Оглавление


sysStructure.mqh


Работа со строковыми структурами.

Версия: 0.0.0.5 от 2013.08.06

Процедуры и функции


int Struc_KeyValue_int


Возвращает целочисленное значение по ключу из строки.

double Struc_KeyValue_double


Возвращает реальное значение по ключу из строки.

string Struc_KeyValue_string


Возвращает строковое значение по ключу из строки.

string Struc_StringKeyValue


Производит поиск ключа в заданной строке и возвращает значение, соответствующее заданному ключу.

string Struc_setValue


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

Примеры использования


Struc_setValue

Прикрепленные файлы:
sysStructure_or0vn.mqh | 2.74 Кб | Скачали: 366
Редактировалось: 11 раз (Последний: 22 августа 2013 в 12:59)
МедальКубок
Сообщений: 536

Struc_KeyValue_int


Возвращает целочисленное значение по ключу из строки.

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

return(StrToInteger(Struc_StringKeyValue(str,key)));
}
[/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]
Редактировалось: 2 раз (Последний: 11 июля 2013 в 15:44)
МедальКубок
Сообщений: 536

Struc_KeyValue_string


Возвращает строковое значение по ключу из строки.

[code=php]
string Struc_KeyValue_string(string str, string key = "@p", string def = ""){
return(Struc_StringKeyValue(str,key,def));
}
[/code]
Редактировалось: 1 раз (Последний: 6 августа 2013 в 18:51)
МедальКубок
Сообщений: 536

Struc_StringKeyValue


Производит поиск ключа в заданной строке и возвращает значение, соответствующее заданному ключу.

[code=php]
string Struc_StringKeyValue(string str = "", string key = "@p", string defolt = "-1", string delimeter = "@"){
/*
>Ver : 0.0.2
>Date : 2012.04.04
>History:
>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 = delimeter; //разделитель
//---
if(StringFind(key,d,0) == -1){
key = d + key;
}
//---
lPosStart = StringFind(str,key,0);

if(lPosStart == -1){
return(defolt);
}
//---
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]
Редактировалось: 1 раз (Последний: 11 июля 2013 в 15:20)
МедальКубок
Сообщений: 536
Пример использования.
Чуть забегая вперед приведу пример функции, возвращающей цену скользящей средней на заданном баре с настройками, которые хранятся в элементе строкового массива в формате:

"@p21@m1@ap0@syEURUSD@sh1";
где
@p - период средней,
@m - метод расчета средней
@ap - цена для расчета средней
@sy - инструмент (валютная пара) для расчета средней
@sh - сдвиг от начала графика для получения цены средней.

[code=php]
double iMA_getByHandle(int handle=0, int shift=-1, int d=0){
/**
\version 0.0.0.2
\date 2013.06.27
\author Morochin Artiom
\details Возвращает цену скользящей средней по заданному индексу в массиве настроек и индексу бара.
\internal
>Hist:
@0.0.0.2@2013.06.27@artamir [] iMA_getByHandle
@0.0.0.1@2013.05.20@artamir [] iMA_getByHandle
>Rev:0
*/

int p = Struc_KeyValue_int(aMASets[handle], "@p");
int mode = Struc_KeyValue_int(aMASets[handle], "@m");
int ap = Struc_KeyValue_int(aMASets[handle], "@ap");
string sy = Struc_KeyValue_string(aMASets[handle], "@sy");
int sh = shift;
if(sh<=-1){
sh = Struc_KeyValue_int(aMASets[handle], "@sh");
}
double ma = iMA(sy,0,p,0,mode,ap,sh);
ma = Norm_symb(ma, "", d);
return(ma);
}
[/code]
МедальКубок
Сообщений: 536

Оглавление


sysNormalize.mqh


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

double Norm_symb


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

double Norm_vol


Нормализация объема по шагу изменения
Прикрепленные файлы:
sysNormalize_v6uat.mqh | 1.78 Кб | Скачали: 413
Редактировалось: 3 раз (Последний: 22 августа 2013 в 12:59)
МедальКубок
Сообщений: 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
Пример использования
[code=php]
double pr = Norm_symb(Bid, "", 2);
[/code]

если эту конструкцию запустить на ЕвроДолларе с 4-мя знаками, то вернет текущую цену Bid + 2 знака после запятой. т.е. после запятой будет 6 знаков.
Удобно использовать для поиска пересечений средних.
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.

← Назад