0
*think* 
avatar

Kudryashov

  • 18 апреля 2020, 19:54
+1
Я буду зырить*wall* 
avatar

Kudryashov

  • 8 апреля 2020, 23:15
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

Kudryashov

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

Kudryashov

  • 13 марта 2020, 20:58
0
А при тестировании какой спред стоял?
avatar

Kudryashov

  • 11 марта 2020, 19:05
0
*think* 
Усреднение значит… *think* 
Не уж то настолько эффективно может быть!?
avatar

Kudryashov

  • 11 марта 2020, 19:02
0
*think* 
И сильные различия?
Где вы ее покупали?
avatar

Kudryashov

  • 11 марта 2020, 17:59
0
*think*  *think*  *think* 
может быть, но смысл в таком подходе мне не ясен.*???* 
avatar

Kudryashov

  • 11 марта 2020, 16:26
0
Этого будет сложно добиться… У брокера могут быть стоп-уровни… Ну по крайней мере в mql4 они есть и… та еще головная боль.
avatar

Kudryashov

  • 11 марта 2020, 16:21
0
*ninja*  я видимо буду затычкой в...*crazy* … каждом комментари где сразу все не получилось...*girlcry* 
Вопрос: что значит «безубыток от 1 пункта»?*think* 
avatar

Kudryashov

  • 11 марта 2020, 13:06
0
*think*  *think*  *think* 
хотите сказать что если п.п. 2 true, а при значении в п.п.3 50 это будет значить что при достижении открытой позицией прибыли в размере 50 баксов эта позиция закроется? *shock* 
avatar

Kudryashov

  • 11 марта 2020, 13:00
0
Понятненько… *think* 
Это надо было сразу описать.:) 
Но всеже еще вопрос: А если такая ситуация был сигнал на покупку, но цена не дошла до TP и появился сигнал на продажу как поступать тогда? *think* 
avatar

Kudryashov

  • 11 марта 2020, 10:37
0
Кроме индикаторов и пунктов 1, 7, 8, и условий ничего не ясно*wizard* 
avatar

Kudryashov

  • 11 марта 2020, 10:29
0
*think* 
мне кажется он хочет узнать что то типа: условия для ордера на покупку и условия ордера на продажу. Проще говоря направления сделки*???* 
avatar

Kudryashov

  • 11 марта 2020, 10:17
0
Почему у вас вечно ссылки пустые???*rules* 
avatar

Kudryashov

  • 7 марта 2020, 10:56
0
Ясненько… как то упустил из мыслей что такое возможно *think* 
avatar

Kudryashov

  • 6 марта 2020, 10:29