//+----------------------------------------------------------------------------+ //| e-SignalOfTrade.mq4 | //| Ким Игорь В. aka KimIV | //| http://www.kimiv.ru | //| | //+----------------------------------------------------------------------------+ #property copyright "Ким Игорь В. aka KimIV" #property link "http://www.kimiv.ru" //------- Внешние параметры индикатора ----------------------------------------+ extern double IntUpdate=0.27; // Интервал обновления в секундах (0-по тикам) extern string _P_WhatOutput="---------- Что выводить"; extern bool OutAccountNumber = True; // Выводить номер счёта extern bool OutAccountServer = True; // Выводить имя активного сервера extern bool OutNameExpert = True; // Выводить имя эксперта extern bool OutDateTime = True; // Выводить дату и время extern bool UseTimeLocal = True; // Использовать локальное время extern bool OutTicket = False; // Выводить тикет extern bool OutMagic = True; // Выводить магик extern bool OutComment = True; // Выводить комментарий extern string _P_WhereOutput = "---------- Куда выводить"; extern bool UseAlert = True; // Использовать диалоговое окно extern bool UseComment = True; // Выводить комментарий extern bool UsePrint = False; // Записывать в журнал extern bool UseSendMail = False; // Посылать электронное письмо extern bool UseSendPush = False; // Посылать Push-уведомление на мобильные терминалы extern bool UseSound = True; // Использовать звук extern string sotFileName = "expert.wav"; // Наименование звукового файла //------- Глобальные переменные индикатора ------------------------------------+ int sotOTI[]; // тикет OrderTicket() int sotOTY[]; // тип OrderType() double sotOOP[]; // цена OrderOpenPrice() double sotOSL[]; // стоп OrderStopLoss() double sotOTP[]; // тейк OrderTakeProfit() bool sotFirstRun=True; // Флаг первого прогона //+----------------------------------------------------------------------------+ //| | //| ПРЕДОПРЕДЕЛЁННЫЕ ФУНКЦИИ | //| | //+----------------------------------------------------------------------------+ //| Expert initialization function | //+----------------------------------------------------------------------------+ void init() { sotFirstRun=True; // Флаг первого прогона Comment(""); start(); } //+----------------------------------------------------------------------------+ //| Expert deinitialization function | //+----------------------------------------------------------------------------+ void deinit() { Comment(""); } //+----------------------------------------------------------------------------+ //| expert start function | //+----------------------------------------------------------------------------+ void start() { if(IntUpdate<=0) MainFunction(); else { while(IsExpertEnabled() && !IsStopped()) { MainFunction(); Sleep(1000*IntUpdate); } Comment("Отжата кнопка \"Разрешить запуск советников\"\n"+ "Советник ОСТАНОВЛЕН"); } } //+----------------------------------------------------------------------------+ //| | //| ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ | //| | //+----------------------------------------------------------------------------+ //| Выполняет поиск элемента массива по значению | //| и возвращает индекс найденного элемента или -1 | //| Параметры: | //| m - массив элементов | //| e - значение элемента | //+----------------------------------------------------------------------------+ int ArraySearchInt(int& m[], int e) { for(int i=0; i0) sh=sh+"\n"; if(OutDateTime) { if(UseTimeLocal) sh=sh+TimeToStr(TimeLocal(),TIME_DATE|TIME_MINUTES)+" "; else sh=sh+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)+" "; } if(OutNameExpert) sh=sh+WindowExpertName()+" "; if(StringLen(sh)>0) sh=sh+"\n"; // Открытие/Установка новых, модификация существующих ArrayResize(oti,k); for(i=0; i=p) { st=st+" PR="+DoubleToStr(sotOOP[in],d)+"->"+DoubleToStr(OrderOpenPrice(),d); } // изменился уровень стопа if(MathAbs(OrderStopLoss()-sotOSL[in])>=p) { st=st+" SL="+DoubleToStr(sotOSL[in],d)+"->"+DoubleToStr(OrderStopLoss(),d); } // изменился уровень тейка if(MathAbs(OrderTakeProfit()-sotOTP[in])>=p) { st=st+" TP="+DoubleToStr(sotOTP[in],d)+"->"+DoubleToStr(OrderTakeProfit(),d); } st=st+IIFs(OutMagic || OutComment,"\n","") +IIFs(OutMagic,"Magic="+DoubleToStr(OrderMagicNumber(),0),"") +IIFs(OutMagic && OutComment," ","") +IIFs(OutComment,"Comment=\""+OrderComment()+"\"","") +IIFs(OutMagic || OutComment,"\n",""); if(StringLen(sh)>0) st=sh+st; Signal(st); } } } } // Закрытие позиций / Удаление ордеров k=ArraySize(sotOTI); for(i=0; i