//+------------------------------------------------------------------+ //| TradeInfoPanel.mq4 | //| Советник собран из кусочков чужих маленьких кодов, | //| выложенных в открытом доступе. | //+------------------------------------------------------------------+ #property copyright "МСВ" #property link "" #define VERSION "1.01" #property version VERSION #property strict extern string Polosa0 = "===============================================================================";// ====================================== extern string Разрешение_На_Торговлю = "=== Разрешение На Торговлю: true - Торговать, false - Не торговать ==="; // Разрешение на Торговлю extern bool Start_Button = true; // Торговля Кнопками: true - Разрешить, false - Запретить extern bool Signal = true; // Показывать Уведомления о Сигналах На Графике extern color Цвет_сигнала_Buy = DarkGreen; // Цвет Сигнала в BUY extern color Цвет_сигнала_Sell = Crimson; // Цвет Сигнала в SELL extern string Polosa1 = "===============================================================================";// ====================================== extern string Настройки_Алерта = "=== Алерт: true - Да, false - Нет ==="; // Настройки Алерта extern bool Алерт_Целый_ADR = false; // Вкл/Выкл Алерт Половины ADR extern bool Алерт_Половина_ADR = false; // Вкл/Выкл Алерт Целого ADR extern string Polosa2 = "===============================================================================";// ====================================== extern string Основные_Настройки = "=== Основные Настройки ==="; // Основные Настройки extern double Lots = 0.01; // Стартовый Лот extern double Multiplier = 1.5; // Коэффициент Усреднения extern int TakeProfit = 90; // ТейкПрофит Первого Ордера extern int TakeProfitSetki = 50; // ТейкПрофит Сетки extern int StopLoss = 30; // СтопЛосс Для Ручной Торговли(Если >0, то сетка не строится) extern int Step = 20; // Шаг Сетки Для Усреднения extern bool Trall = true; // Тралл: true - Да, false - Нет extern int TrallingStop = 30; // ТрейлингСтоп Для Каждого Ордера extern int TrallingStep = 1; // Шаг ТрейлингСтопа extern int Bezubitok = 10; // Уровень Безубытка extern int DistStopLimit = 20; // Дистанция Для Отложек extern int Slippage = 3; // Проскальзывание extern int Magic = 250; // Магический номер extern string Шрифт_Текста = "Arial Bold"; // Шрифт Текста extern string Polosa3 = "===============================================================================";// ====================================== extern string Настройки_Сигнального_Блока = "=== Настройки Для Сигнального блока ==="; // Настройки Сигнального Блока extern color Заголовок_цвет = DarkOrange; // Цвет Заголовка extern color Подчёркивание_цвет = DarkOrange; // Цвет Подчёркивания extern color Диапазон_цвет = DodgerBlue; // Цвет Диапазонов ADR extern color ADR_верхний_цвет = Green; // Цвет Верхнего ADR extern color ADR_нижний_цвет = Red; // Цвет Нижнего ADR extern int KolDay = 30; // Количество Дней Для ADR extern int Заголовок_размер = 12; // Размер Текста Заголовка extern int Подчёркивание_размер = 12; // Размер Текста Подчёркивания extern int Диапазон_размер = 10; // Размер Текста Диапазонов ADR extern int Уровни_ADR5_Верхний = 10; // Размер Текста Верхнего ADR extern int Уровни_ADR5_Нижний = 10; // Размер Текста Нижнего ADR extern int Угол_привязки = 1; // Угол Привязки Блока extern string Polosa4 = "===============================================================================";// ====================================== extern string Инфо_Блоки = "=== Настройки Для Информационных Блоков ==="; // Инфо Блоки extern string Polosa5 = "===============================================================================";// ====================================== extern string За_период = "=== Настройки Заработка За Периоды ==="; // Блок За Период extern color Период_цвет = Green; // Цвет Всего Блока extern int Период_размер = 10; // Размер Текста Всего Блока extern int Период_заголовок = 10; // Размер Текста Заголовка extern int Угол_привязки_период = 1; // Угол Привязки Блока extern string Polosa6 = "===============================================================================";// ====================================== extern string Текущее_Состояние = "=== Настройки Текущего Состояния ==="; // Блок Текущее Состояние extern color Тек_сост_цвет = Navy; // Цвет Всего Блока extern int Тек_сост_размер = 10; // Размер Текста Всего Блока extern int Тек_сост_заголовок = 10; // Размер Текста Заголовка extern int Угол_привязки_тек_сост = 1; // Угол Привязки Блока extern string Polosa7 = "===============================================================================";// ====================================== extern string Дополнительная_информация = "=== Настройки Дополнительной Информации ==="; // Блок Дополнительная Информация extern color Доп_инфо_цвет = Purple; // Цвет Всего Блока extern int Доп_инфо_размер = 10; // Размер Текста Всего Блока extern int Доп_инфо_заголовок = 10; // Размер Текста Заголовка extern int Угол_привязки_доп_инфо = 1; // Угол Привязки Блока extern string Polosa8 = "===============================================================================";// ====================================== extern string SetingsButton = "=== Настройки Для Кнопок ==="; // Настройки Для Кнопок extern color ButtonBuy = LightGreen; // Цвет Кнопки BUY extern color ButtonSell = LightCoral; // Цвет Кнопки SELL extern string Font_Button = "Arial Black"; // Шрифт Текста в Кнопках extern int Font_Size = 12; // Размер Шрифта extern string Polosa9 = "===============================================================================";// ====================================== extern string Блок_Инфо_Ордеров = "=== Настройки Строки о Прибыли По Ордерам ==="; // Прибыль по Ордерам extern color ColProfit = Green; // Цвет Прибыли По Ордеру extern color ColLoss = OrangeRed; // Цвет Убытка По Ордеру extern int Font_size = 12; // Размер Шрифта extern bool MagicOrder = false; // Показывать Magic? extern bool TicketOrder = false; // Показывать Тикет? extern bool LotOrder = true; // Показывать Объём? extern bool ProfitLossOrder = true; // Показывать Прибыль/Убыток? extern string Polosa10 = "===============================================================================";// ====================================== extern string Показывать_Графику = "=== Графика ===";// Показывать графические объекты? // Показывать Графику extern bool Сигнальный_блок = true; // Сигнальный блок extern bool Прибыль_Убыток = true; // Блок Прибыль/Убыток extern bool ТекущееСостояние = true; // Блок Текущего Состояния extern bool Доп_Инфо = true; // Блок Дополнительной Информации extern bool Строки_По_Прибыли = true; // Строки Информации О Каждом Ордере extern bool Commentariy = false; // Комментарий с Настройками Советника extern string Ценовые_Метки = "=== Показывать уровни ADR? ==="; extern bool Level_HALF_ADR5 = true; // Показывать Уровни Половины ADR extern bool Level_FULL_ADR5 = true; // Показывать Уровни Целого ADR extern color Цвет_верхней_метки = Green; // Цвет Верхнего ADR extern color Цвет_нижней_метки = Red; // Цвет Нижнего ADR extern string Линия_Безубытка = "=== Настройки Линии безубытка ==="; extern bool Показывать_Линию_Безубытка = true; // Показывать Линию Безубытка? extern color Цвет_Линии_Безубытка = Magenta; // Цвет Линии Безубытка extern string Polosa11 = "===============================================================================";// ====================================== extern string Настройки_Средней = "=== Настройки Средней Скользящей ==="; extern int GrandMAPeriod = 200; // Период большой средней extern int EasyMAPeriod = 50; // Период малой средней extern int MAShift = 0; // Сдвиг средней extern int MAMethod = MODE_EMA; // Метод усреднения extern int MAPrice = PRICE_CLOSE; // Тип цены extern int RazryvMA = 50; // Разрыв между скользящими //-----------Объявляем дополнительные переменные------------ double SC,SC_5_DAY,HALF_ADR_DAY_HIGH,HALF_ADR_DAY_LOW,FULL_ADR_DAY_HIGH,FULL_ADR_DAY_LOW,GrandMA,EasyMA,РазницаMA,DistB,DistS; double AverageRangeToday,AverageRange,Prosadka1,Prosadka2,tp,sl,Price,lastlot,BuyProfitBuy,SellProfitSell,point; color ButtonClose,ButtonProfit; int Width_B_S = 90,Height_B_S = 25,bar = 0,ticket,n,nn; datetime t; string ID,Window; double MinLot=MarketInfo(Symbol(),MODE_MINLOT); bool W1 = true,confirmation = true; //+------------------------------------------------------------------+ //| Функция инициализации советника | //+------------------------------------------------------------------+ int OnInit() { point=Point; if(Digits==3 || Digits==5) // Приводим к 5-значному счёту { TakeProfit *= 10; TakeProfitSetki *= 10; Step *= 10; Slippage *= 10; TrallingStop *= 10; TrallingStep *= 10; Bezubitok *= 10; StopLoss *= 10; DistStopLimit *= 10; РазницаMA *= 10; RazryvMA *= 10; // order_data.pips *= 10; point *= 10; } RectLabelCreate(0,StringConcatenate("Площадка",ID),0,10,5,237,275,clrIndigo); ButtonCreate(0,StringConcatenate("Маржа",ID),0,5,53,Width_B_S-15,Height_B_S-10,"Маржа",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Маржа1",ID),0,5,37,Width_B_S-15,Height_B_S-10,DoubleToStr(MarketInfo(Symbol(), MODE_MARGINREQUIRED)*MarketInfo(Symbol(),MODE_MINLOT),2),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Мин. стопы",ID),0,81,53,Width_B_S-11,Height_B_S-10,"Мин. SL/TP",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Мин. стопы1",ID),0,81,37,Width_B_S-11,Height_B_S-10,DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),0),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Лотаж",ID),0,161,53,Width_B_S-15,Height_B_S-10,"Лотаж",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Лотаж1",ID),0,161,37,Width_B_S-15,Height_B_S-10,DoubleToStr(MarketInfo(Symbol(),MODE_MINLOT),2)+"/"+DoubleToStr(MarketInfo(Symbol(), MODE_MAXLOT),0),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Мартин",ID),0,5,85,Width_B_S-15,Height_B_S-10,"Мартин",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Мартин1",ID),0,5,69,Width_B_S-15,Height_B_S-10,"*"+DoubleToStr(Multiplier,2),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Magik",ID),0,81,85,Width_B_S-11,Height_B_S-10,"Magik",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Magik1",ID),0,81,69,Width_B_S-11,Height_B_S-10,DoubleToStr(Magic,0),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Шаг Тралл",ID),0,161,85,Width_B_S-15,Height_B_S-10,"Шаг Тралл",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Шаг Тралл1",ID),0,161,69,Width_B_S-15,Height_B_S-10,DoubleToStr(TrallingStep,0),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Шаг Уср",ID),0,5,117,Width_B_S-15,Height_B_S-10,"Шаг Уср",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Шаг Уср1",ID),0,5,101,Width_B_S-15,Height_B_S-10,DoubleToStr(Step,0),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Б/У",ID),0,81,117,Width_B_S-11,Height_B_S-10,"Б/У",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Б/У1",ID),0,81,101,Width_B_S-11,Height_B_S-10,DoubleToStr(Bezubitok,0),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Тралл",ID),0,161,117,Width_B_S-15,Height_B_S-10,"Тралл",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Тралл1",ID),0,161,101,Width_B_S-15,Height_B_S-10,DoubleToStr(TrallingStop,0),Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Стоп",ID),0,5,169,Width_B_S-15,Height_B_S,DoubleToStr(StopLoss,0),Font_Button,Font_Size-3,clrBlack,clrSilver,false); ButtonCreate(0,StringConcatenate("SL/TP",ID),0,81,169,Width_B_S-11,Height_B_S,"<< SL/TP >>",Font_Button,Font_Size-3,clrBlack,clrDarkGray,false); ButtonCreate(0,StringConcatenate("Тейк",ID),0,161,169,Width_B_S-15,Height_B_S,DoubleToStr(TakeProfit,0),Font_Button,Font_Size-3,clrBlack,clrSilver,false); ButtonCreate(0,StringConcatenate("Close",ID),0,81,143,Width_B_S-11,Height_B_S,"< CLOSE >",Font_Button,Font_Size-2,clrBlack,clrSkyBlue,false); ButtonCreate(0,StringConcatenate("Отступ",ID),0,5,274,Width_B_S-9,Height_B_S,"Отступ",Font_Button,Font_Size,clrBlack,clrSilver,false); EditCreate(0,StringConcatenate("Лот по рынку",ID),0,87,195,Width_B_S-24,Height_B_S,DoubleToStr(Lots,2),Font_Button,Font_Size,ALIGN_CENTER,false); ButtonCreate(0,StringConcatenate("buy",ID),0,5,195,Width_B_S-9,Height_B_S,"BUY >>",Font_Button,Font_Size,clrBlack,ButtonBuy,false); ButtonCreate(0,StringConcatenate("sell",ID),0,155,195,Width_B_S-9,Height_B_S,"<< SELL",Font_Button,Font_Size,clrBlack,ButtonSell,false); EditCreate(0,StringConcatenate("Лот BuySellStop",ID),0,87,221,Width_B_S-24,Height_B_S,DoubleToStr(Lots,2),Font_Button,Font_Size,ALIGN_CENTER,false); ButtonCreate(0,StringConcatenate("BuyStop",ID),0,5,221,Width_B_S-9,Height_B_S,"BuyStop",Font_Button,Font_Size,clrBlack,ButtonBuy,false); ButtonCreate(0,StringConcatenate("SellStop",ID),0,155,221,Width_B_S-9,Height_B_S,"SellStop",Font_Button,Font_Size,clrBlack,ButtonSell,false); EditCreate(0,StringConcatenate("Лот BuySellLimit",ID),0,87,247,Width_B_S-24,Height_B_S,DoubleToStr(Lots,2),Font_Button,Font_Size,ALIGN_CENTER,false); ButtonCreate(0,StringConcatenate("BuyLimit",ID),0,5,247,Width_B_S-9,Height_B_S,"BuyLimit",Font_Button,Font_Size,clrBlack,ButtonBuy,false); ButtonCreate(0,StringConcatenate("SellLimit",ID),0,155,247,Width_B_S-9,Height_B_S,"SellLimit",Font_Button,Font_Size,clrBlack,ButtonSell,false); EditCreate(0,StringConcatenate("Отступ для отложек",ID),0,87,274,Width_B_S-24,Height_B_S,DoubleToStr(DistStopLimit,0),Font_Button,Font_Size,ALIGN_CENTER,false); ButtonCreate(0,StringConcatenate("Чистка",ID),0,155,274,Width_B_S-9,Height_B_S,"Чистка",Font_Button,Font_Size,clrBlack,clrSilver,false); ButtonCreate(0,StringConcatenate("Торг кнопками",ID),0,5,20,Width_B_S+141,Height_B_S-10,"<< Торговля кнопками = "+Start_Button+" >>",Font_Button,Font_Size-3,clrBlack,clrAqua,false); ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Функция деинициализации советника | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { DeleteLabels(); } //+------------------------------------------------------------------+ //| Функция действия эксперта | //+------------------------------------------------------------------+ void OnTick() { //----------------- Производим расчёты цен для ADR ----------------- AverageRangeToday=NormalizeDouble((iHigh(NULL,1440,0)-iLow(NULL,1440,0))/Point,Digits); // Находим сегодняший диапазон int finish; // Находим double summ = 0; // средний if(W1)finish = iBarShift(NULL,1440,iTime(NULL,10080,0),false) + 1; // диапазон else finish=1; // цен for(int i=KolDay-1+finish; i>=finish; i--) // ADR { // за summ +=NormalizeDouble((iHigh(NULL,1440,i) - iLow(NULL,1440,i))/Point,Digits); // определённое } // количество AverageRange=NormalizeDouble(summ/KolDay,Digits); // дней HALF_ADR_DAY_HIGH = NormalizeDouble(iOpen(NULL,1440,0) + AverageRange/2*Point, Digits); // Находим верхний уровень ADR для половины за N дней HALF_ADR_DAY_LOW = NormalizeDouble(iOpen(NULL,1440,0) - AverageRange/2*Point, Digits); // Находим нижний уровень ADR для половины за N дней FULL_ADR_DAY_HIGH = NormalizeDouble(iOpen(NULL,1440,0) + AverageRange*Point, Digits); // Находим верхний уровень ADR целый за N дней FULL_ADR_DAY_LOW = NormalizeDouble(iOpen(NULL,1440,0) - AverageRange*Point, Digits); // Находим нижний уровень ADR целый за N дней GrandMA=NormalizeDouble(iMA(NULL,0,GrandMAPeriod,MAShift,MODE_EMA,PRICE_CLOSE,0),Digits);// Определяем большую среднюю скользящюю EasyMA=NormalizeDouble(iMA(NULL,0,EasyMAPeriod,MAShift,MODE_EMA,PRICE_CLOSE,0),Digits); // Определяем малую среднюю скользящюю РазницаMA=NormalizeDouble((GrandMA-EasyMA)/Point,Digits); DistB = GrandMA-RazryvMA*Point; DistS = GrandMA+RazryvMA*Point; string DepositCurrency=AccountInfoString(ACCOUNT_CURRENCY); double PipValueMinLot=(MarketInfo(Symbol(),MODE_TICKVALUE)*MinLot); // Для расчёта стоимости пункта при минимальном лоте if(Commentariy==true) { Comment("\n","ТОРГОВЛЯ КНОПКАМИ = ",Start_Button, "\n","СТАРТ. ЛОТ = ",Lots, "\n","СТОП = ",StopLoss, "\n","ТЕЙК = ",TakeProfit, "\n","Тейк Сетки = ",TakeProfitSetki, "\n","Мартин = ","*"+DoubleToStr(Multiplier,2), "\n","Шаг = ",Step, "\n","ТРАЛЛ = ",TrallingStop, "\n","Шаг Тралла = ",TrallingStep, "\n","Б/У = ",Bezubitok, "\n","Мэджик = ",Magic, "\n","Размер пп = ",MarketInfo(Symbol(),MODE_POINT), "\n","Мин. стоп/тейк = ",MarketInfo(Symbol(),MODE_STOPLEVEL), "\n","Размер контракта = ",MarketInfo(Symbol(),MODE_LOTSIZE), // "\n","Экспирация(фьючерсы) = ",MarketInfo(Symbol(),MODE_EXPIRATION), "\n","Мин. лот = ",MarketInfo(Symbol(),MODE_MINLOT), "\n","Макс. лот = ",MarketInfo(Symbol(),MODE_MAXLOT), "\n","Шаг лота = ",MarketInfo(Symbol(),MODE_LOTSTEP), "\n","Нач. залог. 1 лота = ",MarketInfo(Symbol(),MODE_MARGININIT), "\n","Залог для откр. орд. 1 лота = ",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE), "\n","Маржа с перекр. орд. 1 лота = ",MarketInfo(Symbol(),MODE_MARGINHEDGED), "\n","Средства для откр. МИН. ЛОТА = ",DoubleToStr(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*MarketInfo(Symbol(),MODE_MINLOT),2)+" "+AccountCurrency()); } //----------------- Создаём объект и выводим на график ----------------- string NullObj = "Нулевой_объект"; // Задаём имя объекта string NameObj = NullObj + "1"; // Задали точку отсчёта объекта //==== Сначала объекты для СИГНАЛЬНОГО БЛОКА ==== if(Сигнальный_блок==true) { NameObj=NullObj+"1"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,30); } ObjectSetText(NameObj,"Диапазон",Заголовок_размер,"Шрифт_Текста",Заголовок_цвет); // Текст рисуем сами NameObj=NullObj+"2"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,37); } ObjectSetText(NameObj,"----------------",Подчёркивание_размер,"Шрифт_Текста",Подчёркивание_цвет); // Текст рисуем сами NameObj=NullObj+"3"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,49); } ObjectSetText(NameObj,"Сегодня = "+DoubleToStr(AverageRangeToday,0),Диапазон_размер,"Шрифт_Текста",Диапазон_цвет); // Текст берем из блока с расчётом средних цен ADR NameObj=NullObj+"4"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,65); } ObjectSetText(NameObj,DoubleToStr(KolDay,0)+" Дней = "+DoubleToStr(AverageRange,0),Диапазон_размер,"Шрифт_Текста",Диапазон_цвет); //Текст берем из блока с расчётом средних цен ADR NameObj=NullObj+"5"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,80); } ObjectSetText(NameObj,"Уровни ADR"+DoubleToStr(KolDay,0),Заголовок_размер,"Шрифт_Текста",Заголовок_цвет); // Текст рисуем сами NameObj=NullObj+"6"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,87); } ObjectSetText(NameObj,"---------------------------",Подчёркивание_размер,"Шрифт_Текста",Подчёркивание_цвет); // Текст рисуем сами NameObj=NullObj+"7"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,102); } ObjectSetText(NameObj,"В1/2 ADR"+DoubleToStr(KolDay,0)+" = "+DoubleToStr(HALF_ADR_DAY_HIGH,Digits),Уровни_ADR5_Верхний,"Шрифт_Текста",ADR_верхний_цвет); //Текст берем из блока с расчётом средних цен ADR NameObj=NullObj+"8"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,117); } ObjectSetText(NameObj,"Н1/2 ADR"+DoubleToStr(KolDay,0)+" = "+DoubleToStr(HALF_ADR_DAY_LOW,Digits),Уровни_ADR5_Верхний,"Шрифт_Текста",ADR_нижний_цвет); //Текст берем из блока с расчётом средних цен ADR NameObj=NullObj+"9"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,132); } ObjectSetText(NameObj,"ВЦ ADR"+DoubleToStr(KolDay,0)+" = "+DoubleToStr(FULL_ADR_DAY_HIGH,Digits),Уровни_ADR5_Нижний,"Шрифт_Текста",ADR_верхний_цвет); //Текст берем из блока с расчётом средних цен ADR NameObj=NullObj+"10"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,147); } ObjectSetText(NameObj,"НЦ ADR"+DoubleToStr(KolDay,0)+" = "+DoubleToStr(FULL_ADR_DAY_LOW,Digits),Уровни_ADR5_Нижний,"Шрифт_Текста",ADR_нижний_цвет); //Текст берем из блока с расчётом средних цен ADR NameObj=NullObj+"11"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,154); } ObjectSetText(NameObj,"---------------------------",Подчёркивание_размер,"Шрифт_Текста",Подчёркивание_цвет); // Текст рисуем сами //================== Закончен СИГНАЛЬНый БЛОК ====================== } //=========== Теперь объекты для ИНФОРМАЦИОННЫХ БЛОКОВ ============= //======= БЛОК ПРИБЫЛЬ/УБЫТОК ЗА ПЕРИОДЫ ========= if(Прибыль_Убыток==true) { NameObj=NullObj+"12"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_период); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,167); } ObjectSetText(NameObj,"ЗАРАБОТОК",Период_размер,"Шрифт_Текста",Период_цвет); // Текст рисуем сами NameObj=NullObj+"13"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_период); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,175); } ObjectSetText(NameObj,"--------------------",Период_размер,"Шрифт_Текста",Период_цвет); // Текст рисуем сами double pfd_0=FindProfitForDay(0); // Задаём источник данных - функция FindProfitForDay NameObj=NullObj+"14"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_период); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,185); } ObjectSetText(NameObj,"Сегодня = "+DoubleToStr(pfd_0,2),Период_размер,"Шрифт_текста",Период_цвет); // Данные берутся из функции FindProfitForDay pfd_0=FindProfitForDay(1); NameObj=NullObj+"15"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_период); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,200); } ObjectSetText(NameObj,"Вчера = "+DoubleToStr(pfd_0,2),Период_размер,"Шрифт_текста",Период_цвет); // Данные берутся из функции FindProfitForDay pfd_0=FindProfitForDay(2); NameObj=NullObj+"16"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_период); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,215); } ObjectSetText(NameObj,"Позавчера = "+DoubleToStr(pfd_0,2),Период_размер,"Шрифт_текста",Период_цвет); // Данные берутся из функции FindProfitForDay pfd_0=0; for(int id_day=0; id_dayProsadka2) Prosadka2=Prosadka1; NameObj=NullObj+"27"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_тек_сост); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,360); } ObjectSetText(NameObj,"Прос. Макс. = -"+DoubleToStr(Prosadka2,2)+"%",Тек_сост_размер,"Шрифт_текста",Тек_сост_цвет); // Данные берутся из расчёта максимальной просадки NameObj=NullObj+"28"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_тек_сост); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,367); } ObjectSetText(NameObj,"-----------------------------------",Тек_сост_размер,"Шрифт_Текста",Тек_сост_цвет); // Текст рисуем сами } //======= БЛОК ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ========= if(Доп_Инфо==true) { NameObj=NullObj+"29"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,380); } ObjectSetText(NameObj,"ДОП. ИНФОРМАЦИЯ",Доп_инфо_размер,"Шрифт_Текста",Доп_инфо_цвет); // Текст рисуем сами NameObj=NullObj+"30"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,390); } ObjectSetText(NameObj,"----------------------------------",Доп_инфо_размер,"Шрифт_Текста",Доп_инфо_цвет); // Текст рисуем сами double Spread=NormalizeDouble((Ask-Bid)/Point,0); // Расчитываем спред NameObj=NullObj+"31"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,400); } ObjectSetText(NameObj,"Спрэд = "+DoubleToStr(Spread,0),Доп_инфо_размер+8,"Шрифт_текста",Доп_инфо_цвет); // Данные берутся из расчёта спреда NameObj=NullObj+"32"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,423); } ObjectSetText(NameObj,"Своп Лонг = "+DoubleToStr(MarketInfo(Symbol(),MODE_SWAPLONG),2),Доп_инфо_размер,"Tahoma",Доп_инфо_цвет); // Данные берутся из стандартной функции MarketInfo NameObj=NullObj+"33"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,438); } ObjectSetText(NameObj,"Своп Шорт = "+DoubleToStr(MarketInfo(Symbol(),MODE_SWAPSHORT),2),Доп_инфо_размер,"Шрифт_текста",Доп_инфо_цвет); // Данные берутся из стандартной функции MarketInfo NameObj=NullObj+"34"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,453); } ObjectSetText(NameObj,"Плечо = 1:"+DoubleToStr(AccountLeverage(),0),Доп_инфо_размер,"Шрифт_текста",Доп_инфо_цвет); // Данные берутся из стандартной функции AccountLeverage NameObj=NullObj+"35"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,468); } ObjectSetText(NameObj,"Реал. Плечо = 1:"+DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE)*Bid/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_POINT),0),Доп_инфо_размер,"Шрифт_текста",Доп_инфо_цвет); NameObj=NullObj+"36"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,483); } ObjectSetText(NameObj,"Валюта = "+AccountCurrency(),Доп_инфо_размер,"Шрифт_текста",Доп_инфо_цвет); // Данные берутся из стандартной функции AccountCurrency NameObj=NullObj+"37"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,498); } ObjectSetText(NameObj,""+AccountServer(),Доп_инфо_размер,"Шрифт_текста",Доп_инфо_цвет); // Данные берутся из стандартной функции AccountServer NameObj=NullObj+"38"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,513); } ObjectSetText(NameObj,""+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),Доп_инфо_размер,"Шрифт_текста",Доп_инфо_цвет); // Данные берутся из стандартной функции TimeCurrent NameObj=NullObj+"39"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,528); } ObjectSetText(NameObj,"Ст. пп при "+DoubleToStr(MinLot,2)+" = "+DoubleToStr(PipValueMinLot,4),Доп_инфо_размер,"Шрифт_текста",Доп_инфо_цвет); NameObj=NullObj+"40"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,Угол_привязки_доп_инфо); ObjectSet(NameObj,OBJPROP_XDISTANCE,10); ObjectSet(NameObj,OBJPROP_YDISTANCE,536); } ObjectSetText(NameObj,"------------------------------------",Доп_инфо_размер,"Шрифт_Текста",Доп_инфо_цвет); // Текст рисуем сами } //--- Создаём и выводим на график объект типа Цветовая метка для половины ADR5 if(Level_HALF_ADR5) { ObjectCreate("HALF_ADR_5_DAY_HIGH",OBJ_ARROW,0,Time[0],0); ObjectSet("HALF_ADR_5_DAY_HIGH",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet("HALF_ADR_5_DAY_HIGH",OBJPROP_COLOR,Цвет_верхней_метки); ObjectSet("HALF_ADR_5_DAY_HIGH",OBJPROP_WIDTH,1); ObjectSet("HALF_ADR_5_DAY_HIGH",OBJPROP_TIME1,Time[0]); ObjectSet("HALF_ADR_5_DAY_HIGH",OBJPROP_PRICE1,HALF_ADR_DAY_HIGH); ObjectSetText("HALF_ADR_5_DAY_HIGH",DoubleToStr(HALF_ADR_DAY_HIGH,5),6,"Arial Bold",Цвет_верхней_метки); ObjectCreate("HALF_ADR_5_DAY_LOW",OBJ_ARROW,0,Time[0],0); ObjectSet("HALF_ADR_5_DAY_LOW",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet("HALF_ADR_5_DAY_LOW",OBJPROP_COLOR,Цвет_нижней_метки); ObjectSet("HALF_ADR_5_DAY_LOW",OBJPROP_WIDTH,1); ObjectSet("HALF_ADR_5_DAY_LOW",OBJPROP_TIME1,Time[0]); ObjectSet("HALF_ADR_5_DAY_LOW",OBJPROP_PRICE1,HALF_ADR_DAY_LOW); ObjectSetText("HALF_ADR_5_DAY_LOW",DoubleToStr(HALF_ADR_DAY_LOW,5),6,"Arial Bold",Цвет_нижней_метки); } //--- Создаём и выводим на график объект типа Цветовая метка для целого ADR5 if(Level_FULL_ADR5) { ObjectCreate("FULL_ADR_5_DAY_HIGH",OBJ_ARROW,0,Time[0],0); ObjectSet("FULL_ADR_5_DAY_HIGH",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet("FULL_ADR_5_DAY_HIGH",OBJPROP_COLOR,Цвет_верхней_метки); ObjectSet("FULL_ADR_5_DAY_HIGH",OBJPROP_WIDTH,1); ObjectSet("FULL_ADR_5_DAY_HIGH",OBJPROP_TIME1,Time[0]); ObjectSet("FULL_ADR_5_DAY_HIGH",OBJPROP_PRICE1,FULL_ADR_DAY_HIGH); ObjectSetText("FULL_ADR_5_DAY_HIGH",DoubleToStr(FULL_ADR_DAY_HIGH,5),6,"Arial Bold",Цвет_верхней_метки); ObjectCreate("FULL_ADR_5_DAY_LOW",OBJ_ARROW,0,Time[0],0); ObjectSet("FULL_ADR_5_DAY_LOW",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet("FULL_ADR_5_DAY_LOW",OBJPROP_COLOR,Цвет_нижней_метки); ObjectSet("FULL_ADR_5_DAY_LOW",OBJPROP_WIDTH,1); ObjectSet("FULL_ADR_5_DAY_LOW",OBJPROP_TIME1,Time[0]); ObjectSet("FULL_ADR_5_DAY_LOW",OBJPROP_PRICE1,FULL_ADR_DAY_LOW); ObjectSetText("FULL_ADR_5_DAY_LOW",DoubleToStr(FULL_ADR_DAY_LOW,5),6,"Arial Bold",Цвет_нижней_метки); } //-------------------------------------------- Блок Информации По Строкам о Прибыли Открытых Ордеров -------------------------------------------------- ObjectsDeleteAll(0,OBJ_TEXT); if(Строки_По_Прибыли==true) { for(int j=0; j 0) ButtonClose = clrMediumSeaGreen; if(SellProfit < 0) ButtonClose = clrLightCoral; ButtonCreate(0,StringConcatenate("close_sell",ID),0,161,143,Width_B_S-15,Height_B_S,DoubleToStr(SellProfit,2),Font_Button,Font_Size-2,clrBlack,ButtonClose,false); //---Запускаем Линию безубытка int counted_bars=IndicatorCounted(); SetHLine(Цвет_Линии_Безубытка,"LineofZERO",startZERO()); startZERO(); //---Включение/Выключение Алерта Для Половины Уровня ADR if(Алерт_Половина_ADR) AlertHalfADR(); else { NoTrade(); } //---Включение/Выключение Алерта Для Целого Уровня ADR if(Алерт_Целый_ADR) AlertFullADR(); else { NoTrade(); } //---Включение/Выключение Сигналов if(Signal==true) { if(EasyMAGrandMA && Open[1]>EasyMA && Close[1]>EasyMA && Bid>=EasyMA && EasyMA>=DistS) // Сигнал для SELL на Машках { NameObj=NullObj+"42"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSet(NameObj,OBJPROP_XDISTANCE,250); ObjectSet(NameObj,OBJPROP_YDISTANCE,40); } ObjectSetText(NameObj,"Есть сигнал для SELL на Разрыве Машек: "+DoubleToStr(РазницаMA,0)+" пипс",Тек_сост_размер+10,"Шрифт_Текста",Цвет_сигнала_Sell); } else { DeleteSignalSellMA(); } } if(Signal==true) { if(AskFULL_ADR_DAY_HIGH && Open[1]>FULL_ADR_DAY_HIGH && Close[1]>FULL_ADR_DAY_HIGH) // Сигнал для SELL на целом ADR { NameObj=NullObj+"44"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSet(NameObj,OBJPROP_XDISTANCE,250); ObjectSet(NameObj,OBJPROP_YDISTANCE,110); } ObjectSetText(NameObj,"Есть сигнал для SELL на Целом ADR"+DoubleToStr(KolDay,0),Тек_сост_размер+10,"Шрифт_Текста",Цвет_сигнала_Sell); } else { DeleteSignalSellFullADR(); } } if(Signal==true) { if(AskHALF_ADR_DAY_HIGH && Open[1]>HALF_ADR_DAY_HIGH && Close[1]>HALF_ADR_DAY_HIGH) // Сигнал для SELL на 1/2 ADR { NameObj=NullObj+"46"; if(ObjectFind(NameObj)==-1) { ObjectCreate(NameObj,OBJ_LABEL,0,0,0); ObjectSet(NameObj,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSet(NameObj,OBJPROP_XDISTANCE,250); ObjectSet(NameObj,OBJPROP_YDISTANCE,180); } ObjectSetText(NameObj,"Есть сигнал для SELL на 1/2 ADR"+DoubleToStr(KolDay,0),Тек_сост_размер+10,"Шрифт_Текста",Цвет_сигнала_Sell); } else { DeleteSignalSellHalfADR(); } } } //+------------------------------------------------------------------+ //| ChartEvent function (Функция Сибытий Диаграммы) | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if (Trall == true) Tralling(); // Сразу добавляем трейлинг-стоп. Функция написана дальше. else { NoTrade(); } //---Удаляем все графические объекты с графика if((id==CHARTEVENT_CLICK || id==CHARTEVENT_MOUSE_MOVE)) { if(ObjectGetInteger(0,StringConcatenate("Чистка",ID),OBJPROP_STATE)) { Chistka(); } } //---Выставление BUYLIMIT и SELLLIMIT ордеров именно нажатием кнопок и дальше работает советник (Полувтоматический режим) double UrovenPriceBuyLimit = Ask-DistStopLimit*Point; // Находим цену с учётом отступа для покупок. double UrovenPriceSellLimit = Bid+DistStopLimit*Point; // Находим цену с учётом отступа для продаж. if((id==CHARTEVENT_CLICK || id==CHARTEVENT_MOUSE_MOVE) && Start_Button==true) { string StrokaLota = ObjectGetString(0,ID+"Лот BuySellLimit",OBJPROP_TEXT); StringReplace(StrokaLota,",","."); if (Lots != StringToDouble(StrokaLota)) { Lots = StringToDouble(StrokaLota); ObjectSetString(0,ID+"Лот BuySellLimit",OBJPROP_TEXT,DoubleToString(Lots,2)); } if(ObjectGetInteger(0,StringConcatenate("BuyLimit",ID),OBJPROP_STATE)==true) { if(StopLoss==0) sl=0; else sl=NormalizeDouble(UrovenPriceBuyLimit-StopLoss*Point,Digits); tp=NormalizeDouble(UrovenPriceBuyLimit+TakeProfit*Point,Digits); if(SendOrder(OP_BUYLIMIT,Lots,NormalizeDouble(UrovenPriceBuyLimit,Digits),sl,tp)) ObjectSetInteger(0,StringConcatenate("BuyLimit",ID),OBJPROP_STATE,false); } if(ObjectGetInteger(0,StringConcatenate("SellLimit",ID),OBJPROP_STATE)==true) { if(StopLoss==0) sl=0; else sl=NormalizeDouble(UrovenPriceSellLimit+StopLoss*Point,Digits); tp=NormalizeDouble(UrovenPriceSellLimit-TakeProfit*Point,Digits); if(SendOrder(OP_SELLLIMIT,Lots,NormalizeDouble(UrovenPriceSellLimit,Digits),sl,tp)) ObjectSetInteger(0,StringConcatenate("SellLimit",ID),OBJPROP_STATE,false); } } //---Выставление BUYSTOP и SELLSTOP ордеров именно нажатием кнопок и дальше работает советник (Полувтоматический режим) double UrovenPriceBuyStop = Ask+DistStopLimit*Point; // Находим цену с учётом отступа для покупок. double UrovenPriceSellStop = Bid-DistStopLimit*Point; // Находим цену с учётом отступа для продаж. if((id==CHARTEVENT_CLICK || id==CHARTEVENT_MOUSE_MOVE) && Start_Button==true) { string StrokaLota = ObjectGetString(0,ID+"Лот BuySellStop",OBJPROP_TEXT); StringReplace(StrokaLota,",","."); if (Lots != StringToDouble(StrokaLota)) { Lots = StringToDouble(StrokaLota); ObjectSetString(0,ID+"Лот BuySellStop",OBJPROP_TEXT,DoubleToString(Lots,2)); } if(ObjectGetInteger(0,StringConcatenate("BuyStop",ID),OBJPROP_STATE)==true) { if(StopLoss==0) sl=0; else sl=NormalizeDouble(UrovenPriceBuyStop-StopLoss*Point,Digits); tp=NormalizeDouble(UrovenPriceBuyStop+TakeProfit*Point,Digits); if(SendOrder(OP_BUYSTOP,Lots,NormalizeDouble(UrovenPriceBuyStop,Digits),sl,tp)) ObjectSetInteger(0,StringConcatenate("BuyStop",ID),OBJPROP_STATE,false); } if(ObjectGetInteger(0,StringConcatenate("SellStop",ID),OBJPROP_STATE)==true) { if(StopLoss==0) sl=0; else sl=NormalizeDouble(UrovenPriceSellStop+StopLoss*Point,Digits); tp=NormalizeDouble(UrovenPriceSellStop-TakeProfit*Point,Digits); if(SendOrder(OP_SELLSTOP,Lots,NormalizeDouble(UrovenPriceSellStop,Digits),sl,tp)) ObjectSetInteger(0,StringConcatenate("SellStop",ID),OBJPROP_STATE,false); } } //---Ручной вход BUY SELL ордерами именно нажатием кнопок и дальше работает советник (Полувтоматический режим) if((id==CHARTEVENT_CLICK || id==CHARTEVENT_MOUSE_MOVE) && Start_Button==true) { string StrokaLota = ObjectGetString(0,ID+"Лот по рынку",OBJPROP_TEXT); StringReplace(StrokaLota,",","."); if (Lots != StringToDouble(StrokaLota)) { Lots = StringToDouble(StrokaLota); ObjectSetString(0,ID+"Лот по рынку",OBJPROP_TEXT,DoubleToString(Lots,2)); } if(ObjectGetInteger(0,StringConcatenate("buy",ID),OBJPROP_STATE)==true) { if(StopLoss==0) sl=0; else sl = NormalizeDouble(Bid-StopLoss*Point,Digits); tp = NormalizeDouble(Ask+TakeProfit*Point,Digits); if(SendOrder(OP_BUY,Lots,NormalizeDouble(Ask,Digits),sl,tp)) ObjectSetInteger(0,StringConcatenate("buy",ID),OBJPROP_STATE,false); } if(ObjectGetInteger(0,StringConcatenate("sell",ID),OBJPROP_STATE)==true) { if(StopLoss==0) sl=0; else sl=NormalizeDouble(Ask+StopLoss*Point,Digits); tp=NormalizeDouble(Bid-TakeProfit*Point,Digits); if(SendOrder(OP_SELL,Lots,NormalizeDouble(Bid,Digits),sl,tp)) ObjectSetInteger(0,StringConcatenate("sell",ID),OBJPROP_STATE,false); } if(ObjectGetInteger(0,StringConcatenate("close_buy",ID),OBJPROP_STATE)==true) { Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Close Buy"); close(OP_BUY); ObjectSetInteger(0,StringConcatenate("close_buy",ID),OBJPROP_STATE,false); } if(ObjectGetInteger(0,StringConcatenate("close_sell",ID),OBJPROP_STATE)==true) { Comment(TimeToStr(TimeCurrent(),TIME_SECONDS)," Close Sell"); close(OP_SELL); ObjectSetInteger(0,StringConcatenate("close_sell",ID),OBJPROP_STATE,false); } } else { int order_type= FindLastOrderType(); if(order_type == OP_BUY && StopLoss==0) { Price=FindLastOrderPrice(OP_BUY); if(Ask<=Price-Step*Point && Open[0]<=Price-Step*Point) { lastlot = FindLastLots(OP_BUY); lastlot = NormalizeDouble(lastlot*Multiplier,2); ticket=OrderSend(Symbol(),OP_BUY,lastlot,Ask,Slippage,0,0,"Доливка Button BUY "+DoubleToStr(lastlot,2),Magic,0,Blue); if(ticket<1) Print("Ошибка открытия ордера на покупку ",GetLastError()); ModifyOrders(OP_BUY); } } if(order_type==OP_SELL && StopLoss==0) { Price=FindLastOrderPrice(OP_SELL); if(Bid>=Price+Step*Point && Open[0]>=Price+Step*Point) { lastlot = FindLastLots(OP_SELL); lastlot = NormalizeDouble(lastlot*Multiplier,2); ticket=OrderSend(Symbol(),OP_SELL,lastlot,Bid,Slippage,0,0,"Доливка Button SELL "+DoubleToStr(lastlot,2),Magic,0,Red); if(ticket<1) Print("Ошибка открытия ордера на продажу ",GetLastError()); ModifyOrders(OP_SELL); } } } } //============================================================================ // ОПРЕДЕЛЕНИЕ ДОПОЛНИТЕЛЬНЫХ ФУНКЦИЙ || //============================================================================ //------------------ Вводим пустую функцию -------------- bool NoTrade() { return true; } //------------- Определяем функцию открытия через окно сообщений ---------------+ bool SendOrder(int tip,double lot,double p, double loss, double take) { if(confirmation) { string txt; if(tip==OP_BUY) txt=StringConcatenate("Открыть BUY ",DoubleToStr(lot,2)," лота по цене = ",DoubleToStr(p,Digits), " со стопом = ",DoubleToStr(loss,Digits)," и тейком = ",DoubleToStr(take,Digits)," ?"); if(tip==OP_SELL) txt=StringConcatenate("Открыть SELL ",DoubleToStr(lot,2)," лота по цене ",DoubleToStr(p,Digits), " со стопом = ",DoubleToStr(loss,Digits)," и тейком = ",DoubleToStr(take,Digits)," ?"); if(tip==OP_BUY) Window = "Button BUY "; if(tip==OP_SELL) Window = "Button SELL "; if(tip==OP_BUYSTOP) txt=StringConcatenate("Установить BUY STOP (Ордер на пробой) ",DoubleToStr(lot,2)," лота по цене ",DoubleToStr(p,Digits), " со стопом = ",DoubleToStr(loss,Digits)," и тейком = ",DoubleToStr(take,Digits)," ?"); if(tip==OP_SELLSTOP) txt=StringConcatenate("Установить SELL STOP (Ордер на пробой) ",DoubleToStr(lot,2)," лота по цене ",DoubleToStr(p,Digits), " со стопом = ",DoubleToStr(loss,Digits)," и тейком = ",DoubleToStr(take,Digits)," ?"); if(tip==OP_BUYSTOP) Window = "Button BUY STOP "; if(tip==OP_SELLSTOP) Window = "Button SELL STOP "; if(tip==OP_BUYLIMIT) txt=StringConcatenate("Установить BUY LIMIT (Ордер на разворот) ",DoubleToStr(lot,2)," лота по цене ",DoubleToStr(p,Digits), " со стопом = ",DoubleToStr(loss,Digits)," и тейком = ",DoubleToStr(take,Digits)," ?"); if(tip==OP_SELLLIMIT) txt=StringConcatenate("Установить SELL LIMIT (Ордер на разворот) ",DoubleToStr(lot,2)," лота по цене ",DoubleToStr(p,Digits), " со стопом = ",DoubleToStr(loss,Digits)," и тейком = ",DoubleToStr(take,Digits)," ?"); if(tip==OP_BUYLIMIT) Window = "Button BUY LIMIT "; if(tip==OP_SELLLIMIT) Window = "Button SELL LIMIT "; int ret=MessageBox(txt,"",MB_YESNO); if(ret==IDNO) return true; } while(true) { RefreshRates(); if(OrderSend(Symbol(),tip,lot,p,Slippage,sl,tp,Window+DoubleToStr(Lots,2),Magic,0,clrNONE)==-1) { Print("Ошибка открытия ордера ",GetLastError()," Lot ",lot); Sleep(1000); } else return true; nn++; if(nn>10) return true; } return true; } //+------------------ Определяем функцию закрытия ----------------------+ bool close(int tip) { if(confirmation) { string txt="Закрыть Все "; if(tip==OP_BUY) txt=StringConcatenate(txt,"BUY ?"); if(tip==OP_SELL) txt=StringConcatenate(txt,"SELL ?"); int ret=MessageBox(txt,"",MB_YESNO); if(ret==IDNO) return true; } bool error=true; int j,err,order_type; while(!IsStopped()) { for(j=OrdersTotal()-1; j>=0; j--) { if(OrderSelect(j,SELECT_BY_POS)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { order_type=OrderType(); if(tip!=order_type) continue; if(order_type==OP_BUY) { error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slippage,clrLime); } if(order_type==OP_SELL) { error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage,clrRed); } if(!error) { err=GetLastError(); if(err<2) continue; if(err==129) { RefreshRates(); continue; } if(err==146) { if(IsTradeContextBusy()) Sleep(2000); continue; } Print("Error ",err," close order N ",OrderTicket()," ",TimeToStr(TimeCurrent(),TIME_SECONDS)); } } } } n=0; for(j=0; j10) { return true; } Sleep(1000); RefreshRates(); } return true; } //+----------------- Определяем функцию безубытка---------------- double startZERO() { double BuyLevel; double SellLevel; double BuyLots=0; double SellLots=0; double BuyProfit=0; double SellProfit=0; int Total=OrdersTotal(); for(int i=Total-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderSymbol()!=Symbol()) continue; if(OrderType()==OP_BUY) { BuyLots=BuyLots+OrderLots(); BuyProfit=BuyProfit+OrderProfit()+OrderCommission()+OrderSwap(); } if(OrderType()==OP_SELL) { SellLots=SellLots+OrderLots(); SellProfit=SellProfit+OrderProfit()+OrderCommission()+OrderSwap(); } } } double Price2=0; double TickValue=MarketInfo(Symbol(),MODE_TICKVALUE); if(BuyLots>0) BuyLevel=NormalizeDouble(Bid-(BuyProfit/(TickValue*BuyLots)*Point),Digits); else BuyLevel=0; if(SellLots>0) SellLevel=NormalizeDouble(Ask+(SellProfit/(TickValue*SellLots)*Point),Digits); else SellLevel=0; if((BuyLots-SellLots)>0) Price2=NormalizeDouble(Bid-((BuyProfit+SellProfit)/(TickValue*(BuyLots-SellLots))*Point),Digits); if((SellLots-BuyLots)>0) Price2=NormalizeDouble(Ask+((BuyProfit+SellProfit)/(TickValue*(SellLots-BuyLots))*Point),Digits); string Title="Уровень без убытка для "+Symbol(); string ZeroLevel=" не существует"; if(Price>0) ZeroLevel=" = "+DoubleToStr(Price2,Digits); string Buy=" не существует"; if(BuyLevel>0) Buy=" = "+DoubleToStr(BuyLevel,Digits); string Sell=" не существует"; if(SellLevel>0) Sell=" = "+DoubleToStr(SellLevel,Digits); string Message="Уровень без убытка"+ZeroLevel+"\t\nУровень на покупку"+Buy+"\t\nУровень на продажу"+Sell; if(Price2==0) Price2=Ask; if(OP_BUY) return(BuyLevel); return(Price2); if(OP_SELL) return(SellLevel); return(Price2); return(0); } //------------ Функция для Алерта Для Целого Уровня ADR ------------- bool AlertFullADR() { if(Bars!=bar) { if(Open[1]>FULL_ADR_DAY_LOW && Close[1]FULL_ADR_DAY_HIGH) { Alert(Symbol()+" SELL - ЦЕНА ВЫРОСЛА ВЫШЕ ADR5 "+TimeToString(Time[0])); bar=Bars; } } return true; } //------------ Функция Для Алерта Для Половины Уровня ADR ------------- bool AlertHalfADR() { if(Bars!=bar) { if(Open[1]>HALF_ADR_DAY_LOW && Close[1]HALF_ADR_DAY_HIGH) { Alert(Symbol()+" SELL - ЦЕНА ВЫРОСЛА ВЫШЕ 1/2 ADR5 "+TimeToString(Time[0])); bar=Bars; } } return true; } //----------------------- Определение дневной прибыли----------------------------+ double FindProfitForDay(int ai_0) { double ld_ret_4= 0; for(int pos_12 = 0; pos_12=iTime(Symbol(),PERIOD_D1,ai_0) && OrderCloseTime()TrallingStop*Point) { if(OrderStopLoss()TrallingStop*Point) { if(OrderStopLoss()>Ask+(TrallingStop+TrallingStep)*Point || OrderStopLoss()==0) { if(TPsell>FULL_ADR_DAY_LOW) TPsell=FULL_ADR_DAY_LOW; if(OrderModify(OrderTicket(),OrderOpenPrice(),SLsell,TPsell,0,Red)) Print("Ошибка модификации ордера на продажу ",GetLastError()); } } } } } } } //+-------------------- Прописываем функцию модификации ордеров ------------------------+ void ModifyOrders(int otype) { double avg_price,order_lots=0; Price=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==otype) { Price+=OrderOpenPrice()*OrderLots(); order_lots+=OrderLots(); } } } avg_price=NormalizeDouble(Price/order_lots,Digits); if(otype == OP_BUY) tp = NormalizeDouble(avg_price + TakeProfitSetki*Point, Digits); if(otype == OP_SELL) tp = NormalizeDouble(avg_price - TakeProfitSetki*Point, Digits); for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==otype) { if(OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0)) Print("Ордера успешно модифицированы"); else Print("Ошибка модификации ордеров ",GetLastError()); } } } } //+------------------------- Функция Находит Последний Лот --------------------------------+ double FindLastLots(int otype) { int oldticket; double oldlots=0; ticket=0; for(int cnt=OrdersTotal()-1; cnt>=0; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==otype) { oldticket=OrderTicket(); if(oldticket>ticket) { ticket=oldticket; oldlots=OrderLots(); } } } } return(oldlots); } //+------------------------- Функция Находит Цену Последнего Лота ---------------------------+ double FindLastOrderPrice(int otype) { int oldticket; double oldopenprice=0; ticket=0; for(int cnt=OrdersTotal()-1; cnt>=0; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==otype) { oldticket=OrderTicket(); if(oldticket>ticket) { ticket=oldticket; oldopenprice=OrderOpenPrice(); } } } } return(oldopenprice); } //+------------------------ Функция Находит Тип Последнего Ордера ------------------------+ int FindLastOrderType() { int order_type = -1; int oldticketnumber = 0; int ticketnumber = 0; for(int cnt=OrdersTotal()-1; cnt>=0; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { oldticketnumber=OrderTicket(); if(oldticketnumber>ticketnumber) { order_type=OrderType(); ticketnumber=oldticketnumber; } } } } return (order_type); } //+-------------------------- Функция Торговли --------------------------+ int CountTrades() { int count=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) count++; } } return(count); } //+------------------ Функция Для Создания Линии Безубытка -----------------+ void SetHLine(color,string nm="",double p1=0,int st=0,int wd=1) // Создаём и выносим на график Линию Безубытка { if(nm=="") nm=DoubleToStr(Time[0],0); if(p1<=0) p1=Bid; if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_HLINE,0,0,0); ObjectSet(nm,OBJPROP_PRICE1,p1); ObjectSet(nm,OBJPROP_COLOR,Цвет_Линии_Безубытка); ObjectSet(nm,OBJPROP_STYLE,st); ObjectSet(nm,OBJPROP_WIDTH,wd); } //+-------------------- Функция возвращает нужный цвет -------------------------+ color Color(bool Peremennaja,color Cwet1,color Cwet2) { if(Peremennaja) return(Cwet1); else return(Cwet2); } //+---------------------------- Заготовка для создания текстового объекта -----------------------------------+ bool TextCreate(const long chart_ID = 0, // ID графика const string OrderInfo = "Text", // имя объекта const int sub_window = 0, // номер подокна datetime time = 0, // время точки привязки double price = 0, // цена точки привязки const string text = "Text", // сам текст const string font = "Arial", // шрифт const int font_size = 10, // размер шрифта const color clr = clrRed, // цвет const double angle = 0.0, // наклон текста const ENUM_ANCHOR_POINT anchor = ANCHOR_RIGHT_LOWER, // способ привязки const bool back = false, // на заднем плане const bool selection = false, // выделить для перемещений const bool hidden = true, // скрыт в списке объектов const long z_order = 0) // приоритет на нажатие мышью { ResetLastError(); if(!ObjectCreate(chart_ID,OrderInfo,OBJ_TEXT,sub_window,time,price)) { return(false); } ObjectSetString(chart_ID,OrderInfo,OBJPROP_TEXT,text); ObjectSetString(chart_ID,OrderInfo,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_FONTSIZE,font_size); ObjectSetDouble(chart_ID,OrderInfo,OBJPROP_ANGLE,angle); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_ANCHOR,anchor); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,OrderInfo,OBJPROP_ZORDER,z_order); return(true); } //--------------------------------------------------------------------+ // Создаём кнопку | //--------------------------------------------------------------------+ bool ButtonCreate(const long chart_ID=0, // ID графика const string name="Button", // имя кнопки const int sub_window=0, // номер подокна const long x=0, // координата по оси X const long y=0, // координата по оси Y const int width=50, // ширина кнопки const int height=18, // высота кнопки const string text="Button", // текст const string font="Arial", // шрифт const int font_size=10, // размер шрифта const color clr=clrBlack, // цвет текста const color clrfon=clrLightGray, // цвет фона const bool state=false) // нажата/отжата { if(ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_LOWER); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE); } ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); return(true); } //--------------------------------------------------------------------+ // Создаём площадку | //--------------------------------------------------------------------+ bool RectLabelCreate(const long chart_ID=0, // ID графика const string name="RectLabel", // имя метки const int sub_window=0, // номер подокна const long x=0, // координата по оси X const long y=0, // координата по оси y const int width=50, // ширина const int height=18, // высота const color back_clr=clrWhite, // цвет фона const color clr=clrBlack, // цвет плоской границы (Flat) const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль плоской границы const int line_width=1, // толщина плоской границы const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { ResetLastError(); if(ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_LOWER); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); } ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x-8); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y+272); return(true); } //--------------------------------------------------------------------+ // Создаём поле ввода | //--------------------------------------------------------------------+ bool EditCreate(const long chart_ID=0, // ID графика const string name="Edit", // имя объекта const int sub_window=0, // номер подокна const int x=0, // координата по оси X const int y=0, // координата по оси Y const int width=50, // ширина const int height=18, // высота const string text="Text", // текст const string font="Arial", // шрифт const int font_size=8, // размер шрифта const ENUM_ALIGN_MODE align=ALIGN_RIGHT, // способ выравнивания const bool read_only=true, // возможность редактировать const ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER, // угол графика для привязки const color clr=clrBlack, // цвет текста const color back_clr=clrWhite, // цвет фона const color border_clr=clrNONE, // цвет границы const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { ResetLastError(); if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) { return(false); } ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); return(true); } //+------------------ Функция для удаления ВСЕХ объектов с графика -----------------+ void Chistka() { for (int i=0; i<=2; i++) { ObjectsDeleteAll(i, OBJ_VLINE); // Вертикальная линия ObjectsDeleteAll(i, OBJ_HLINE); // Горизонтальная линия ObjectsDeleteAll(i, OBJ_TREND); // Трендовая линия ObjectsDeleteAll(i, OBJ_TRENDBYANGLE); // Трендовая линия по углу ObjectsDeleteAll(i, OBJ_CYCLES); // Циклические линии ObjectsDeleteAll(i, OBJ_CHANNEL); // Равноудаленный канал ObjectsDeleteAll(i, OBJ_STDDEVCHANNEL); // Канал стандартного отклонения ObjectsDeleteAll(i, OBJ_REGRESSION); // Канал на линейной регрессии ObjectsDeleteAll(i, OBJ_PITCHFORK); // Вилы Эндрюса ObjectsDeleteAll(i, OBJ_GANNLINE); // Линия Ганна ObjectsDeleteAll(i, OBJ_GANNFAN); // Веер Ганна ObjectsDeleteAll(i, OBJ_GANNGRID); // Сетка Ганна ObjectsDeleteAll(i, OBJ_FIBO); // Уровни Фибоначчи ObjectsDeleteAll(i, OBJ_FIBOTIMES); // Временные зоны Фибоначчи ObjectsDeleteAll(i, OBJ_FIBOFAN); // Веер Фибоначчи ObjectsDeleteAll(i, OBJ_FIBOARC); // Дуги Фибоначчи ObjectsDeleteAll(i, OBJ_FIBOCHANNEL); // Канал Фибоначчи ObjectsDeleteAll(i, OBJ_EXPANSION); // Расширение Фибоначчи ObjectsDeleteAll(i, OBJ_RECTANGLE); // Прямоугольник ObjectsDeleteAll(i, OBJ_TRIANGLE); // Треугольник ObjectsDeleteAll(i, OBJ_ELLIPSE); // Эллипс ObjectsDeleteAll(i, OBJ_ARROW_THUMB_DOWN); // Знак "Плохо" (большой палец вниз) ObjectsDeleteAll(i, OBJ_ARROW_THUMB_UP); // Знак "Хорошо" (большой палец вверх) ObjectsDeleteAll(i, OBJ_ARROW_UP); // Знак "Стрелка вверх" ObjectsDeleteAll(i, OBJ_ARROW_DOWN); // Знак "Стрелка вниз" ObjectsDeleteAll(i, OBJ_ARROW_STOP); // Знак "Стоп" ObjectsDeleteAll(i, OBJ_ARROW_CHECK); // Знак "Птичка" (галка) ObjectsDeleteAll(i, OBJ_ARROW_LEFT_PRICE); // Левая ценовая метка ObjectsDeleteAll(i, OBJ_ARROW_RIGHT_PRICE); // Правая ценовая метка ObjectsDeleteAll(i, OBJ_ARROW_BUY); // Знак "Buy" ObjectsDeleteAll(i, OBJ_ARROW_SELL); // Знак "Sell" ObjectsDeleteAll(i, OBJ_ARROW); // Объект "Стрелка" ObjectsDeleteAll(i, OBJ_TEXT); // Объект "Текст" ObjectsDeleteAll(i, OBJ_LABEL); // Объект "Текстовая метка" // ObjectsDeleteAll(i, OBJ_BUTTON); // Объект "Кнопка" ObjectsDeleteAll(i, OBJ_BITMAP); // Объект "Рисунок" ObjectsDeleteAll(i, OBJ_BITMAP_LABEL); // Объект "Графическая метка" // ObjectsDeleteAll(i, OBJ_EDIT); // Объект "Поле ввода" ObjectsDeleteAll(i, OBJ_EVENT); // Объект "Событие", соответствующий событию в экономическом календаре // ObjectsDeleteAll(i, OBJ_RECTANGLE_LABEL); // Объект "Прямоугольная метка"для создания и оформления пользовательского графического интерфейса. } Print("Удаляю все графические объекты с графика"); } //+------------------ Функция для удаления объектов с графика -----------------+ void DeleteLabels() //----- Прописываем все объекты для удаления с графика ----- { ObjectDelete("Нулевой_объект1");ObjectDelete("Нулевой_объект2");ObjectDelete("Нулевой_объект3");ObjectDelete("Нулевой_объект4");ObjectDelete("Нулевой_объект5"); ObjectDelete("Нулевой_объект6");ObjectDelete("Нулевой_объект7");ObjectDelete("Нулевой_объект8");ObjectDelete("Нулевой_объект9");ObjectDelete("Нулевой_объект10"); ObjectDelete("Нулевой_объект11");ObjectDelete("Нулевой_объект12");ObjectDelete("Нулевой_объект13");ObjectDelete("Нулевой_объект14");ObjectDelete("Нулевой_объект15"); ObjectDelete("Нулевой_объект16");ObjectDelete("Нулевой_объект17");ObjectDelete("Нулевой_объект18");ObjectDelete("Нулевой_объект19");ObjectDelete("Нулевой_объект20"); ObjectDelete("Нулевой_объект21");ObjectDelete("Нулевой_объект22");ObjectDelete("Нулевой_объект23");ObjectDelete("Нулевой_объект24");ObjectDelete("Нулевой_объект25"); ObjectDelete("Нулевой_объект26");ObjectDelete("Нулевой_объект27");ObjectDelete("Нулевой_объект28");ObjectDelete("Нулевой_объект29");;ObjectDelete("Нулевой_объект30"); ObjectDelete("Нулевой_объект31");ObjectDelete("Нулевой_объект32");ObjectDelete("Нулевой_объект33");ObjectDelete("Нулевой_объект34");ObjectDelete("Нулевой_объект35"); ObjectDelete("Нулевой_объект36");ObjectDelete("Нулевой_объект37");ObjectDelete("Нулевой_объект38");ObjectDelete("Нулевой_объект39");ObjectDelete("Нулевой_объект40"); ObjectDelete("Нулевой_объект41");ObjectDelete("Нулевой_объект42");ObjectDelete("Нулевой_объект43");ObjectDelete("Нулевой_объект44");ObjectDelete("Нулевой_объект45"); ObjectDelete("Нулевой_объект46"); ObjectDelete("HALF_ADR_5_DAY_HIGH");ObjectDelete("HALF_ADR_5_DAY_LOW");ObjectDelete("FULL_ADR_5_DAY_HIGH");ObjectDelete("FULL_ADR_5_DAY_LOW");ObjectDelete(""); ObjectDelete(0,StringConcatenate("buy",ID));ObjectDelete(0,StringConcatenate("sell",ID));ObjectDelete(0,StringConcatenate("close_buy",ID)); ObjectDelete(0,StringConcatenate("close_sell",ID));ObjectDelete(0,StringConcatenate("Площадка",ID));ObjectDelete(0,StringConcatenate("Торг кнопками",ID)); ObjectDelete(0,StringConcatenate("Маржа",ID));ObjectDelete(0,StringConcatenate("Мин. стопы",ID));ObjectDelete(0,StringConcatenate("Лотаж",ID)); ObjectDelete(0,StringConcatenate("Маржа1",ID));ObjectDelete(0,StringConcatenate("Мин. стопы1",ID));ObjectDelete(0,StringConcatenate("Лотаж1",ID)); ObjectDelete(0,StringConcatenate("Мартин",ID));ObjectDelete(0,StringConcatenate("Мартин1",ID));ObjectDelete(0,StringConcatenate("Magik",ID)); ObjectDelete(0,StringConcatenate("Magik1",ID));ObjectDelete(0,StringConcatenate("Шаг Тралл",ID));ObjectDelete(0,StringConcatenate("Шаг Тралл1",ID)); ObjectDelete(0,StringConcatenate("Шаг Уср",ID));ObjectDelete(0,StringConcatenate("Шаг Уср1",ID));ObjectDelete(0,StringConcatenate("Б/У",ID)); ObjectDelete(0,StringConcatenate("Б/У1",ID));ObjectDelete(0,StringConcatenate("Тралл",ID));ObjectDelete(0,StringConcatenate("Тралл1",ID)); ObjectDelete(0,StringConcatenate("Стоп",ID));ObjectDelete(0,StringConcatenate("SL/TP",ID));ObjectDelete(0,StringConcatenate("Тейк",ID)); ObjectDelete(0,StringConcatenate("Close",ID));ObjectDelete(0,StringConcatenate("Лот по рынку",ID));ObjectDelete(0,StringConcatenate("Лот BuySellStop",ID)); ObjectDelete(0,StringConcatenate("Лот BuySellLimit",ID));ObjectDelete(0,StringConcatenate("BuyStop",ID));ObjectDelete(0,StringConcatenate("SellStop",ID)); ObjectDelete(0,StringConcatenate("BuyLimit",ID));ObjectDelete(0,StringConcatenate("SellLimit",ID));ObjectDelete(0,StringConcatenate("Отступ",ID)); ObjectDelete(0,StringConcatenate("Отступ для отложек",ID));ObjectDelete(0,StringConcatenate("Чистка",ID));ObjectDelete("OrderInfo"); } //+------------------- Функции удаления сигалов с графика ----------------------+ void DeleteSignalBuyMA() { ObjectDelete("Нулевой_объект41"); } void DeleteSignalSellMA() { ObjectDelete("Нулевой_объект42"); } void DeleteSignalBuyFullADR() { ObjectDelete("Нулевой_объект43"); } void DeleteSignalSellFullADR() { ObjectDelete("Нулевой_объект44"); } void DeleteSignalBuyHalfADR() { ObjectDelete("Нулевой_объект45"); } void DeleteSignalSellHalfADR() { ObjectDelete("Нулевой_объект46"); } //----------------------------- Ф И Н И Ш -------------------------------//