Панель "Дворник" - удаление стрелок и новостей в один клик в MT5

Programmer96

Участник
10 Дек 2018
162
5
18
69
Киев
Поинты
0.00
Пол
Муж.
Панель "Дворник" в МТ5 предназначена удаление стрелок сделок и трендовых линий их связывающих в штатном режиме довольно неудобно.

Удаление значков новостей с графика (или запрет их вывода) вообще не нашел. А они мне прилично мешают - в этом месте у меня расположен вывод информации по паре и счету.

Написал простенькую панель их двух кнопок позволяющую в один клик удалять то и другое.

удаление стрелок и новостей в один клик в MT5удаление стрелок и новостей в один клик в MT5удаление стрелок и новостей в один клик в MT5

Скачать панель "Дворник"
 

Вложения

Проблема удаления всех этих мешающих штучек как-то обсуждалась. Решается средствами самого терминала:

В окне "Торговля" кликнуть на ордер правой кнопкой мыши. В контекстном меню убрать галочку с Автообновление и выбрать Удалить все сделки:



В этом случае удалятся стрелочки от сделок со всех графиков, не только по выбранной валюте.

Вот так удаляются метки новостей, навсегда:

Это здесь
Снять галочку с автообновления, а потом - "удалить все события"

 
Решается средствами самого терминала:
Вот так удаляются метки новостей, навсегда:
Удаление стрелок "средствами терминала" крайне неудобное. В МТ4 это можно было сделать в 2 клика - приемлемо, а в МТ5 нужно исполнить "танец с бубном". Проще нарисовать кнопку и не заморачиваться.
А вот за подсказку по меткам новостей спасибо - сам искал, не нашел. Теперь знаю где запретить.

И, похоже, не я один такой - я эту панельку выложил в Маркете - скачивают в довольно приличном темпе ;)
 
Увы, информация от Николь слегка устарела: давно уж нет в МТ5 закладки "Календарь". Закладку убрали, а вывод значков на график забыли. Пользы от них мало, раздражают здорово - занимают строку, мешают просматривать вывод инфо-строки робота. При том что некоторые брокеры дают события с жуткой интенсивностью это прилично достает. Хорошо что решение простое - в советники добавляю кнопочку "DEL" убирающую значки сделок когда их накапливается слишком много, а события календаря живут всего лишь один тик, их автоматом убирает строка
Код:
ObjectsDeleteAll(0,"20");

Когда убрали? Или у меня у одного забыли убрать?
 

Вложения

  • photo5280.png
    photo5280.png
    14.9 KB · Просмотры: 246
В качестве "алверды":



"Новости" вижу, "Почту" вижу, "Компанию" тоже вижу, "Календарь", который между ними должен быть в упор не вижу. Хоть застрелись.
У нас с вами явно разный вывод терминала. Данные моей версии:
Version: 5.0 build 1940
02 Nov. 2018

Раньше я не смотрел. Обновляю терминал регулярно, но думаю не из-за этого. У меня сейчас build 1961
Попробуй открыть демку на MetaQuotes-Demo отменить показ новостей и опять переключиться на AMEGA
 
Раньше я не смотрел. Обновляю терминал регулярно, но думаю не из-за этого. У меня сейчас build 1961
Попробуй открыть демку на MetaQuotes-Demo отменить показ новостей и опять переключиться на AMEGA
Я ставил терминал совсем недавно - перед получением бонуса 20 баксов с подачи МОФТ, загружал софт терминала по ссылке от Амега, странно что у меня устаревшая сборка... и обновления она не просит.
Что касается поиска вкладки "Календарь" чтобы с нее отменить новости, то скажу так: Оно мне нада? Не имеет смысла. Я дописал в сов всего лишь одну короткую строку, которая по первому тику сама все чистит под ноль. Значки сделок удаляю кнопкой - они какое-то время нужны. А кто сам писать не умеет, тот может моего дворника скачать ;)
 
Последнее редактирование:
Я ставил терминал совсем недавно - перед получением бонуса 20 баксов с подачи МОФТ, загружал софт терминала по ссылке от Амега, странно что у меня устаревшая сборка... и обновления она не просит.
Что касается поиска вкладки "Календарь" чтобы с нее отменить новости, то скажу так: Оно мне нада? Не имеет смысла. Я дописал в сов всего лишь одну короткую строку, которая по первому тику сама все чистит под ноль. Значки сделок удаляю кнопкой - они какое-то время нужны. А кто сам писать не умеет, тот может моего дворника скачать ;)

Хотел я весь код посмотреть, да не судьба. Клик по cleaner.zip отвечает что это несуществующий файл. Ну, да ладно. А как быть если на график надо поставить ещё торгующий советник? Или то что ты сделал вовсе не советник?
Получить обновления можно так.
 

Вложения

  • photo5297.png
    photo5297.png
    70.4 KB · Просмотры: 285
Хотел я весь код посмотреть, да не судьба. Клик по cleaner.zip отвечает что это несуществующий файл. Ну, да ладно. А как быть если на график надо поставить ещё торгующий советник? Или то что ты сделал вовсе не советник?
Получить обновления можно так.
С прикрепленным файлом сейчас разберусь - очень даже может быть, вставка картинок и файлов в этой версии форума ну очень хр....я - ты это и сам знаешь. Все делается не так как мы привыкли делать. Я бы сказал "через ..опу". Очень неудобно и напряжно.

Само собой что это не советник. "Дворник" сделан в оболочке индикатора, установке советника на график аж никак не мешает.
 
Файл "Дворника" в заглавном посте вложен криво, скачивайте здесь.

Скачать файл панели "Дворник" cleaner.zip
или с Маркета https://www.mql5.com/ru/market/product/33526
Проверил - здесь вложено правильно.

Панель написана в оболочке индикатора, установке на график советников не мешает.
 

Вложения

Файл "Дворника" в заглавном посте вложен криво, скачивайте здесь.

Скачать файл панели "Дворник" cleaner.zip
или с Маркета https://www.mql5.com/ru/market/product/33526
Проверил - здесь вложено правильно.

Панель написана в оболочке индикатора, установке на график советников не мешает.

А код секретный?
 
А код секретный?

Этот нет. Он примитивный. Это мои первые шаги в МТ5, потом начал адаптировать (с доработкой) к МТ5 универсальный сов из МТ4. Вот это не открою.
А "Дворника" даю:

Код:
#property copyright "1"
#property link      "1"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

//---------------------
input string Prefix_1    ="auto";
input string Prefix_2    ="20";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
//--- indicator buffers mapping
Comment("");
   ChartSetInteger(0,CHART_SHOW_GRID,0,0); ChartSetInteger(0,CHART_COLOR_CHART_UP,White);ChartSetInteger(0,CHART_MODE,1);ChartSetInteger(0,CHART_SHOW_OHLC,0,0);
   ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,White);ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,LightSeaGreen);
   ChartSetInteger(0,CHART_SCALE,2); ChartSetInteger(0,CHART_SHIFT,true);

   zButton("Cleaner1"  ,120,2,50,15,"Delete 1",8,false,0);   
   zButton("Cleaner2"  ,172,2,50,15,"Delete 2",8,false,0);   

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---
   ObjectDelete(0,"Cleaner1");  ObjectDelete(0,"Cleaner2");  
 } //-- OnDeinit
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
 } //--
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {
//---
//---------------- D_Cleaner ---------------------
   if(ObjectGetInteger(0,"Cleaner1",OBJPROP_STATE)==true) {
      ObjectsDeleteAll(0,Prefix_1);
         ObjectSetInteger(0,"Cleaner1",OBJPROP_STATE,false);
   } //-- if(ObjectGet("D_Cleaner"
   if(ObjectGetInteger(0,"Cleaner2",OBJPROP_STATE)==true) {
      ObjectsDeleteAll(0,Prefix_2);
         ObjectSetInteger(0,"Cleaner2",OBJPROP_STATE,false);
   } //-- if(ObjectGet("D_Cleaner"

//--- return value of prev_calculated for next call
 } //-- OnChartEvent

//---
//+------------------------------------------------------------------+

//================================================== zButton ==============================================
void zButton(string name="",int Hdist=0,int Vdist=0,int H=0,int V=0,string text="",int FontSize=8,bool status=0,int corn=CORNER_RIGHT_UPPER) {
      ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,Hdist);    
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,Vdist);  
      ObjectSetInteger(0,name,OBJPROP_XSIZE,H);     
      ObjectSetInteger(0,name,OBJPROP_YSIZE,V);    
      ObjectSetInteger(0,name,OBJPROP_CORNER,corn);
      ObjectSetString (0,name,OBJPROP_TEXT,text);
      ObjectSetString (0,name,OBJPROP_FONT,"Arial");  
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FontSize);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);  
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrSilver);
      ObjectSetInteger(0,name,OBJPROP_STATE,status);     
      ObjectSetInteger(0,name,OBJPROP_ZORDER,10);
 } //-- zButton
 
Этот нет. Он примитивный. Это мои первые шаги в МТ5, потом начал адаптировать (с доработкой) к МТ5 универсальный сов из МТ4. Вот это не открою.
А "Дворника" даю:

А сколько предупреждений при компиляции такого кода?
 
У меня ноль, смотри картинку, а у тебя?

Я и не пытался компилировать. Скачать хотел для посмотреть код.
Странно, что нет предупреждений. ChartSetInteger возвращает bool значение, соответственно должен быть контроль результата выполнения, чего в твоём коде нету.
 
Я и не пытался компилировать. Скачать хотел для посмотреть код.
Странно, что нет предупреждений. ChartSetInteger возвращает bool значение, соответственно должен быть контроль результата выполнения, чего в твоём коде нету.
В этом случае совсем не обязательно. Как в МТ5, так и в МТ5. Собственно эта часть кода тупо скопирована из МТ4 (терпеть не могу настройки графика по умолчанию. Особенно идиотскую сетку). Только не которые bool-функции требуют проверки. Там где требуют, там и проверяю. Если проверка формальная - пишу if( ![выражение] ), там где проверка имеет значение пишу bool ans= [выражение];
 
В этом случае совсем не обязательно. Как в МТ5, так и в МТ5. Собственно эта часть кода тупо скопирована из МТ4 (терпеть не могу настройки графика по умолчанию. Особенно идиотскую сетку). Только не которые bool-функции требуют проверки. Там где требуют, там и проверяю. Если проверка формальная - пишу if( ![выражение] ), там где проверка имеет значение пишу bool ans= [выражение];

Не обязательно, но желательно не оставлять бесконтрольно. В любой момент MQ могут внести изменения и не исключены проблемы. Была одна проблема в МТ4 когда список закрытых ордеров зависел от сортировки в закладке "История", тогда многие умники негодовали... И ещё знаю одного, который любил в имена переменных ставить точку. Нарвался, правил все свои коды, теперь этого не делает.