Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Информационный индикатор Stop-out и безубыток.

Доброго времени суток.
Нужен индикатор — полный аналог существующего StopOut_Bezub.ex4 (11 Kb) но с открытым кодом.
На графике он выглядит так:

Смысл в том, что индикатор старый, открытого кода в сети не нашел. Есть ломаный, но это — сами понимаете…
При любом следующем обновлении терминала он может перестать работать. А очень не хотелось бы. Очень полезный индикатор — простой, нет ничего лишнего и важная инфа на графике.
Можно ли осуществить данную просьбу?
  • +3
  • Просмотров: 5576
  • 9 марта 2020, 20:35
  • FEEX
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
Следующая запись в группе  
Доработка коридорного советника 2
09 марта 2020
09 марта 2020

Брокер для ваших роботов, 15 лет на рынке

Комментарии (20)

+
0
Смысл в том, что индикатор старый, открытого кода в сети не нашел. Есть ломаный, но это — сами понимаете…


это такое тз на индикатор как я понимаю? :) 
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 9 марта 2020, 20:42
+
0
да) Просто нужно повторить его) сам индюк в формате .ex4 прилагается.
Всё, что он умеет — видно на графике. Настройки есть в индикаторе, который прилагается)
Редактирован: 9 марта 2020, 20:55
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 9 марта 2020, 20:44
+
0
не берусь т.к. отсутствует тз
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 9 марта 2020, 21:14
+
0
ТЗ на картинке же.
Индикатор должен выводить на график:
1. Уровень слива.
2. Сколько пунктов осталось до Стоп-Аута.
3. Закрытие / Stop-out — в процентах.
4. Уровень общего безубытка для всех открытых ордеров.
5. Сколько пунктов осталось до уровня безубытка.
6. Линия безубытка.
7. Линия уровня слива.
8. В настройках:
а) цвет текста для уровня слива, Сколько пунктов осталось до Стоп-Аута., Закрытие / Stop-out и линия уровня слива — цвет оражевый
б) Цвет текста для Уровень общего безубытка, Сколько пунктов осталось до уровня безубытка, Линия безубытка — цвет голубой.
в) Толщина линий.
г) Стиль линий.
д) Выбор угла расположения инфо блока.
е) Размер шрифта
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 9 марта 2020, 22:06
+
0
*think*  *think*  *think* 
avatar

  8  Kudryashov Сообщений: 129

  • 11 марта 2020, 18:02
+
0
Кто-то кроме АМ2 может повторить данный индикатор?
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 13 марта 2020, 14:59
+
0
Попробуй эти slava78.opentraders.ru/53808.html
avatar

  12  Slava78 Сообщений: 598

  • 13 марта 2020, 17:46
+
0
Спасибо большое! *good* 
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 13 марта 2020, 18:11
+
0
Забей название в поиск найдешь и 4 версию, только ех.4
avatar

  12  Slava78 Сообщений: 598

  • 13 марта 2020, 18:26
+
0
.ex4 мне как раз не нужно. Интересовал легальный исходник.)
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 13 марта 2020, 19:49
+
0
версия 2.2.7 работает отлично! НО при закрытии терминала, а потом при новом запуске терминала — индикатор не запускается. т.е. каждый раз приходится его запускать от руки.
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 24 марта 2020, 15:18
+
0
индикатор больше 1500 строк *shock* 
поэтому и не взялся за такой объем работы
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 13 марта 2020, 19:59
+
0
Версия что просили мелочь… Я почти все сделал кроме нескольких нюансов…
1. Я хз как высчитали уровень полного слива.
2. Я как считается общий безубыток. В индикаторе который прислали он плавающий если открыть противоположную позицию.
3. Я хз как сделать что бы надписи обновлялись.
У меня не хватает мозгов!!! Помогите!!!!*wall* 
avatar

  8  Kudryashov Сообщений: 129

  • 13 марта 2020, 20:58
+
0
в индюке i-UrovenZero 2.2.7 1200 строк, но там и функционал огромный. А я просил сделать всего несколько функций.
И это никак 1500 строк не получится.
Редактирован: 14 марта 2020, 09:05
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 13 марта 2020, 22:14
+
0
Вот что мне удалось сделать
//+------------------------------------------------------------------+
//|                                                  StopOutInfo.mq4 |
//|                              Copyright 2020, Dmitriy Kudryashov. |
//|                       https://www.mql5.com/ru/users/dlim0n4ik.dk |
//+------------------------------------------------------------------+
#property strict  //Указание компилятору на применение особого строгого режима проверки ошибок
//---
#define  NAME_PROGRAM   "Indicator"             // Имя программы
#define  YEAR_CREATE    2020                    // Год создание первой рабочей версии программы
#define  NAME_COMPANY   "Dmitriy Kudryashov."   // Имя компании (автора)
//---
bool     debug_mode   = false;                  // Режим отладки. В журнале при тестировании выводятся сообщения из разных функций.
bool     demo_version = false;                  // Данная версия программы является демонстративной?
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|   Функция деинициализации программы                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
//--------------------------------------------------------------------
ObjectsDeleteAll(0,"info_");
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
string symbol = Symbol();
//--- Определим соответствующее свойства для символа -----------------
int      digits = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);// Количество знаков после запятой
double   point  = SymbolInfoDouble(symbol,SYMBOL_POINT);       // Значение одного пункта
double   bid    = SymbolInfoDouble(symbol,SYMBOL_BID);         // Лучшее предложение на продажу
double   ask    = SymbolInfoDouble(symbol,SYMBOL_ASK);         // Лучшее предложение на покупку
//--------------------------------------------------------------------
string comment = "";
int stop_out = AccountStopoutLevel();
double equity = AccountEquity();
double averaging_price = AveragingPrice(symbol);
//--------------------------------------------------------------------
comment += "Уровень слива: " + 000 + "\n";
comment += "Осталось до StopOut: " + DoubleToStr(equity / CountOpenOrders(symbol),0) + "\n";
comment += "Закрытие/StopOut: " + StringConcatenate(stop_out) + "%" + "\n";
comment += "Уровень Общ.Безуб.: " + DoubleToStr(averaging_price,digits) + "\n";
comment += "... осталось: " + DoubleToStr((averaging_price - bid) / point,0) + "\n";
//comment +=  (AccountEquity()/AccountFreeMargin()) * 100 + "\n";
//--------------------------------------------------------------------
Comment(comment);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Описание : Расчитывает уровень бузубытка открытых позиций с     |
//|            задаными параметрами.                                 |
//|  Параметры:                                                      |
//|            symbol - Наименование тогового инструмента            |
//|                     (NULL текущий торговый инструмент);          |
//|            cmd    - Торговая операция (При значении -1 будет     |
//|                     обрабатываться любая позиция);               |
//|            magic  - Номер индентификатора торгового советника    |
//|                     (NULL любой номер).                          |
//|  Версия от: 01.10.2019                                           |
//+------------------------------------------------------------------+
double AveragingPrice(string          symbol = NULL)
{
//--- Проверим торговый инстремент (символ)... -----------------------
if (symbol == NULL) symbol = Symbol(); // Если символ равен NULL, то присвоим символу значения Symbol()
//--------------------------------------------------------------------
//--- Определяем соответствующее свойства указанного символа ---------
int    digits     = (int) SymbolInfoInteger(symbol,SYMBOL_DIGITS); /* Количество знаков после запятой */
double point      = SymbolInfoDouble(symbol,SYMBOL_POINT);         /* Значение одного пункта */
double tickvalue  = MarketInfo(symbol,MODE_TICKVALUE);
//--------------------------------------------------------------------
//--- Инициализация переменых... -------------------------------------
double result           = 0.0;            /* ... конечного результата */
double count_price      = 0.0;            /* ... сумма цены */
double count_lots       = 0.0;            /* ... сумма лота */
//--------------------------------------------------------------------
//--- Расчет средней цены безубытка ----------------------------------
for (int index = 0; index < OrdersTotal(); index++)
   {
   if (OrderSelect(index, SELECT_BY_POS, MODE_TRADES) == FALSE) break;
   if (OrderSymbol() == symbol)
      {
      if (OrderType() == OP_BUY)
         {
         count_price += OrderOpenPrice() * OrderLots();
         count_lots += OrderLots();
         }
      if (OrderType() == OP_SELL)
         {
         count_price -= OrderOpenPrice() * OrderLots();
         count_lots -= OrderLots();
         }
      }
   }
//--------------------------------------------------------------------
if (count_lots < 0.01) count_lots = 0.01;
result = NormalizeDouble((count_price / count_lots), digits);
//--------------------------------------------------------------------
return(result);
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Описание : Функция ведет подсчет открытых или отложеных позиций |
//|            с задаными параметрами.                               |
//|  Параметры:                                                      |
//|            symbol - Наименование тогового инструмента            |
//|                     (NULL текущий торговый инструмент);          |
//|            cmd    - Торговая операция (При значении -1 будет     |
//|                     обрабатываться любая позиция);               |
//|            magic  - Номер индентификатора торгового советника    |
//|                     (NULL любой номер).                          |
//|  Версия от: 01.10.2019                                           |
//+------------------------------------------------------------------+
int CountOpenOrders(string          symbol = NULL) //Торговый инструмент

{
//--- Проверим торговый инстремент (символ)... -----------------------
if (symbol == NULL) symbol = Symbol(); // Если символ равен NULL, то присвоим символу значения Symbol()
//--------------------------------------------------------------------
//--- Инициализация переменных ---------------------------------------
int count = 0;             // Расчет
int result_new = 0;        // Новый результат изменяется каждый раз после подсчета значения count
int static  result_old = 0;// Старый результат (является статичным значением)
int static  result = 0;    // Конечный результат (является статичным значением)
//--------------------------------------------------------------------
//--- Цикл подсчета открытых ордеров... ------------------------------
for (int index = 0; index < OrdersTotal(); index++)                  // перебираем значение index пока оно меньше количества открытых и отложеных позиций
   {
   if (OrderSelect(index, SELECT_BY_POS, MODE_TRADES)==false) break; // выберим открытую позицию...
   if (OrderSymbol() == symbol)                                      // проверим символ ордера...
      {
      if (OrderType() == OP_BUY) count++;               // проверим тип (торговую операцию) позиции и увеличим значение count на 1
      if (OrderType() == OP_SELL) count--;
      }
   }
//--------------------------------------------------------------------
result = count;
//--------------------------------------------------------------------
return (result);                                                      // вернем полученое значение result
}
//+------------------------------------------------------------------+
avatar

  8  Kudryashov Сообщений: 129

  • 18 марта 2020, 16:28
+
0
Спасибо. Но что-то он не работает.
На график ставится, но никакой инфы на графике нет. И настроек нет.
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 24 марта 2020, 15:13
+
0
Держите — www.opentraders.ru/downloads/2604/
Будет работать еще долго!*hi* 
avatar

  18  Andrju81 Сообщений: 245 - Андрей

  • 25 марта 2020, 00:45
+
0
спасибо *drinks* 
Жаль, что тоже .ex4. Но хоть уже несколько вариантов есть)
Редактирован: 25 марта 2020, 01:36
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 25 марта 2020, 01:15
+
0
Пожалуйста! А исходники Вам тоже не помогут если вы не знакомы с программированием на MQL4, т.к. это декомпилированная версия с исправлениями и дополнениями. А если знакомы с программированием, то и сами могли бы все сделать.
avatar

  18  Andrju81 Сообщений: 245 - Андрей

  • 25 марта 2020, 18:16
+
0
На уровне исправления ошибок — я еще могу что-то подправить. На уровне написания с нуля — нет.))
avatar

  11  FEEX Автор Сообщений: 361 - Владимир

  • 25 марта 2020, 18:26

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий