В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанные с их использованием. Каждую функцию буду публиковать двумя постами. В первом посте код функции, во втором примеры использования и небольшие пояснения.
В этом посте я постараюсь указывать текущие версию и дату библиотек.
Скачать обновленные версии можно перейдя по ссылке в оглавлении.
int obj_tot = ObjectsTotal();
for(int i = 0; i < obj_tot; i++){
if(StringFind(ObjectName(i), oName) > -1){
ObjectDelete(ObjectName(i));
}
}
}
//---
void upInfo(){
/**
\version 0.0.0.1
\date 2013.07.08
\author Morochin Artiom
\details Удаляет из массива самое старое сообщение, а для всех остальных сообщений изменяет индексы.
\internal
>Hist:
@0.0.0.1@2013.07.08@artamir [] upInfo
*/
int ks = ArraySize(info);
for(int i = 1; i < ks; i++){
info[i-1] = info;
}
}
void ShowInfo(){
/**
\version 0.0.0.1
\date 2013.07.08
\author Morochin Artiom
\details Выводит массив сообщений в окно инструмента, где запущен советник.
Если не созданы графические объекты, то создает их.
\internal
>Hist:
@0.0.0.1@2013.07.08@artamir [] ShowInfo
>Rev:0
*/
int y_startdistance = 50;
int ks = ArraySize(info);
string infoName = "info";
for(int i = 0; i < ks ; i++){
string oName = StringConcatenate(EXP_NAME,"_",infoName,i);
if(ObjectFind(oName) == -1){
ObjectCreate(oName,OBJ_LABEL,0,0,0);
}
ObjectSet(oName,OBJPROP_XDISTANCE,30);
ObjectSet(oName,OBJPROP_YDISTANCE,y_startdistance-i*20);
ObjectSet(oName,OBJPROP_CORNER,2);
//--- color
if(i == 0){
color clr = Red;
}
[code=php]
int start()
{
//----
addInfo(StringConcatenate("AccountName = ", AccountName()));
Sleep(60000);// для того, чтоб показать изменение времени поступления сообщения
addInfo(StringConcatenate("AccountCompany = ", AccountCompany()));
Sleep(60000);// для того, чтоб показать изменение времени поступления сообщения
addInfo(StringConcatenate("AccountNumber = ",AccountNumber()));
Sleep(60000);
//----
return(0);
}
[/code]
Еще одна реализация на тему разрешения торговли.
Но в данном случае время задается целочисленными параметрами.
CWT
[code=php]
//{ CAN WE TRADE
bool CWT( int d = -1 /** day of week*/
, int hs = 0 /** hour start*/
, int ms = 0 /** min. start*/
, int he = 0 /** hour end*/
, int me = 0 /** min. end*/){
/**
\version 0.0.2
\date 2013.04.25
\author Morochin Artiom
\details checking if we can trade
\internal
>Hist:
@0.0.2@2013.04.25@artamir [] getTimeByShift
@0.0.1@2013.04.25@artamir [] CWT
*/
bool res = true;
datetime dtS, dtE;
string sy = Symbol();
//------------------------------------------------------
res = iif(d<=-1,
true, /*можем работать в любой день*/
iif(DayOfWeek() != d,
false, /*день не равен заданному*/
true));
//------------------------------------------------------
if(res){ //если прошли проверку на день
datetime DT_DayStartByShift(int shift = 0){
/**
\version 0.0.1
\date 2013.04.25
\author Morochin Artiom
\details Возвращает datetime начала дня по заданному индексу бара
\internal
>Hist:
@0.0.1@2013.04.25@artamir [] DT_DayStartByShift
*/
string sy = Symbol(); //текущий символ
int tf = 0; //текущий тф.
datetime dtTimeShift = 0; //датавремя открытия бара по индексу.
[code=php]bool bCWT = CWT(-1, 8, 30, 24, 0); [/code]
Для любого дня недели вернет true если серверное время последней известной котировки находится в пределах 8:30 - 24:00
Если советник должен работать с 21:15 вечера до 6:45 утра
[code=php]bool bCWT = CWT(-1, 21, 15, 6, 45); [/code]
Если советник должен работать только в пятницу с 20:54 по 20:59
[code=php]bool bCWT = CWT(5, 20, 54, 20, 59);[/code]
Ограничение.
Этот блок функций будет правильно работать, если эксперт запущен на таймфрейме <= D1
Скажите, artamir, а на заказ Вы пишите советники, или это просто советы программиста?
Пишу и на заказ. а данную ветку задумывал как помощь программистам, чтоб не изобретали велосипед :)
Если есть вопросы непосредственно касающиеся опубликованных процедур/функций, то задавайте, с радостью на них отвечу.
Это заголовочный файл и должен находиться в папке include
Процедуры и функции определенные в файле:
Глобальные переменные и определения
[code=php]#define iFR.MODE_STD 1 //Фрактал в классическом понимании. Наивысший максимум или наинизший минимум среди заданного количества баров
#define iFR.MODE_HL 2 //Наивысший максимум среди последовательно поднимающихся а затем последовательно опускающихся максимумов.
#define iFR.PR_HL 1 //По типу цены: хай, лоу
#define iFR.PR_C 2 //По закрытию
int iFR.NL = 1; //Количество ближайших баров слева
int iFR.NR = 1; //Количество ближайших баров справа
int iFR.Mode = 2; //Метод поиска фрактала
int iFR.Pr = 1; //Цена поиска фрактала
[/code]
Проверяет, если бар с индексом fb является верхним фракталом
Бар считается верхним фракталом, максимум бара является самым высоким максимумом слева и справа на заданное кол. баров. А так же если слева максимумы баров последовательно возрастают, а справа - убывают.
Проверяет, если бар с индексом fb является нижним фракталом
Бар считается нижним фракталом, минимум бара является самым низким минимумом слева и справа на заданное кол. баров. А так же если слева минимумы баров последовательно понижаются, а справа - возрастают.
Скачать файл в папку текрминала/experts/include Переименовать файл в "iFractal.mqh"
В коде советника, скрипта или индикатора подключается следующим образом
[code=php]
#include [/code]
После этого можно пользоваться процедурами и функциями из этого файла
Редактировалось: 4 раз (Последний: 10 июля 2013 в 13:06)
//----------------------------------------------
if(iFR.Pr == iFR.PR_HL){
h = iHigh(NULL, 0, idx);
}
if(iFR.Pr == iFR.PR_C){
h = MathMax(iClose(NULL, 0, idx),iOpen(NULL, 0, idx));
}
//----------------------------------------------
if(h >= fbH){
f = false; // Не прошли условие, что заданный бар самый высокий слева на право
}
}
Проверяет, если бар с индексом fb является верхним фракталом
Бар считается верхним фракталом, максимум бара является самым высоким максимумом слева и справа на заданное кол. баров. А так же если слева максимумы баров последовательно возрастают, а справа - убывают
[code=php]
bool iFR.IsUpMode2(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 : Проверяет, если бар с индексом fb является верхним фракталом
Бар считается верхним фракталом, максимум бара является самым высоким максимумом
слева и справа на заданное кол. баров. А так же если слева максимумы баров последовательно возрастают, а справа - убывают
*/