0

//=============================================================================================//
//рисование уровней:
//---------------------------------------------------------------------------------------------// 
  double PribylTPs, PribylTPb, PribylTPf, C_YYY, Pribylvolf, Pribylvolb, Pribylvols; 
  int PPF, PPB, PPS;
             
  PribylTPf = MathAbs(fTP * dlots * tickvalue);   //Расчет прибыли за общим безубытком + TP
  PribylTPb = MathAbs(bTP * BuyLots * tickvalue);  //Расчет прибыли Buy + TP
  PribylTPs = MathAbs(sTP * SellLots * tickvalue);  //Расчет прибыли Sell + TP
  Pribylvolf = MathAbs(vlt * dlots * tickvalue);
  Pribylvolb = MathAbs(vlt * BuyLots * tickvalue);
  Pribylvols = MathAbs(vlt * SellLots * tickvalue);
  
  PPF = (UrZPfdS-UrOZP)/Point;
  PPB = (UrZPbdS-UrZPb)/Point;
  PPS = (UrZPs-UrZPsdS)/Point;
 
 if(dlots != 0) 
 {
  if (_uUr_ZF == true) driveline ("_Уровень Полного СЛИВА", UrZF, Color_ZF, Style_ZF, Width_ZF); 
  if (_uUr_SO == true) driveline ("_Уровень Принудительного Закрытия Ордеров ДЦ / StopOut = " + AccountStopoutLevel() + " %", UrSO, Color_SO, Style_SO, Width_SO);
  if (_uUr_ZM == true) driveline ("_Уровень Нулевой Маржи", UrZM, Color_ZM, Style_ZM, Width_ZM);
  if (_uUr_Si == true && _otRavnogoLoca == false) driveline ("Сигнальный Уровень Лока = " + PZM + " %", UrPZM, Color_Si, Style_Si, Width_Si);
  if (_uUr_Si == true && _otRavnogoLoca == true)  driveline ("Сигнальный Уровень Лока + " + dSig + " пп", UrAut, Color_Si, Style_Si, Width_Si);
  if (_uUr_RL == true) driveline ("_Уровень Равного Лока", UrRL, Color_RL, Style_RL, Width_RL);
 
  if (_UrZPpTP == true && BuyLots > 0 && SellLots > 0) driveline ("_Уровень Общего Безубытка + (TP = " + fTP + " пп) = " + DoubleToStr(PribylTPf,2) + " $", UrZPfTP, Color_OZP, Style_ZPdP, Width_ZPdP);
  if (_UrZPpdS == true && BuyLots > 0 && SellLots > 0) driveline ("_Уровень Общего Безубытка + " + d$ + " $ (" + PPF + " пп)", UrZPfdS, Color_OZP, Style_ZPdP, Width_ZPdP);
  if (_UrZPVlt == true && BuyLots > 0 && SellLots > 0) driveline ("_Уровень Общего Безубытка + волатильность = " + DoubleToStr(Pribylvolf,2) + " $", UrZPfVlt, Color_OZP, Style_ZPdP, Width_ZPdP);
  if (_uUrOZP == true && BuyLots > 0 && SellLots > 0) driveline ("_Уровень Общего Безубытка", UrOZP, Color_OZP, Style_OZP, Width_OZP);
 }
 
 if (_uUrZP == true) driveline ("_Уровень Безубытка BUY", UrZPb, Color_ZP, Style_ZP, Width_ZP);
 if (_uUrZP == true) driveline ("_Уровень Безубытка SELL", UrZPs, Color_ZP, Style_ZP, Width_ZP);

 if (_UrZPpTP == true) driveline ("_Уровень Безубытка BUY + (TP = " + bTP + " пп) = " + DoubleToStr(PribylTPb,2) + " $", UrZPbTP, Color_ZPdP, Style_ZPdP, Width_ZPdP);
 if (_UrZPpTP == true) driveline ("_Уровень Безубытка SELL + (TP = " + sTP + " пп) = " + DoubleToStr(PribylTPs,2) + " $", UrZPsTP, Color_ZPdP, Style_ZPdP, Width_ZPdP);

 if (_UrZPpdS == true) driveline ("_Уровень Безубытка BUY + " + d$ + " $ (" + PPB + " пп)", UrZPbdS, Color_ZPdP, Style_ZPdP, Width_ZPdP);
 if (_UrZPpdS == true) driveline ("_Уровень Безубытка SELL + " + d$ + " $ (" + PPS + " пп)", UrZPsdS, Color_ZPdP, Style_ZPdP, Width_ZPdP);
 
 if (_UrZPVlt == true) driveline ("_Уровень Безубытка BUY + волатильность = " + DoubleToStr(Pribylvolb,2) + " $", UrZPbVlt, Color_ZPdP, Style_ZPdP, Width_ZPdP); 
 if (_UrZPVlt == true) driveline ("_Уровень Безубытка SELL + волатильность = " + DoubleToStr(Pribylvols,2) + " $", UrZPsVlt, Color_ZPdP, Style_ZPdP, Width_ZPdP);
 
 if (_uUr_Fr == true  && freeze > 0) driveline ("Не ниже для BuyStop,SellLimit,StopLoss,TakeProfit", UrTP_frz, Color_Fr, Style_Fr, Width_Fr);
 if (_uUr_Fr == true  && freeze > 0) driveline ("Не выше для BuyLimit,SellStop,StopLoss,TakeProfit", UrSL_frz, Color_Fr, Style_Fr, Width_Fr);

 if (_UrCT == true && BuyLots > 0 && SellLots > 0) driveline ("_Уровень Центра Тяжести Объемов", UrCT, Color_UrCT, Style_UrCT, Width_UrCT);
//---------------------------------------------------------------------------------------------//
avatar

Syte

  • 26 июля 2022, 12:01
0
Что то нашел, не посмотришь?



//=============================================================================================//
//расчеты уровней:
//---------------------------------------------------------------------------------------------// 
 double dZM, UrZM, dZF, UrZF, dDZ, dPZM, UrPZM, dSO, UrSO, UrZPb, UrZPs, UrOZP, bd$, sd$, fd$, UrCT, UrOZPZ, UrCTZ, idCT, UrZPbVlt, UrZPsVlt, UrZPfVlt,
        idZP, UrRL, UrZPbTP, UrZPsTP, UrZPfTP, UrZPbdS, UrZPsdS, UrZPfdS,dUrRL, UrAut, UrTP_frz, UrSL_frz, idZM, dUrZP;

 if(dlots != 0)
 { 
  dZM = freemargin / (tickvalue * dlots);       //расстояние от цены до уровня нулевой маржи
  dZF = equity / (tickvalue * dlots);           //расстояние от цены до полного слива
  dDZ = dZF - dZM;                              //размер "мертвой" зоны
  dPZM = dZF - dDZ * PZM / 100;                 //расстояние от цены до указанного % от уровня полного слива - сигнального уровня
  dSO = dZF - dDZ * stop_out / 100;             //расстояние от цены до уровня принудительного закрытия ордеров
  
  if (dlots > 0) UrSO = Bid - dSO * Point;      //значение уровня принудительного закрытия ордеров - StopOut
  if (dlots < 0) UrSO = Ask - dSO * Point;      //значение уровня принудительного закрытия ордеров - StopOut
  if (dlots > 0) UrZM = Bid - dZM * Point;      //значение уровня нулевой маржи
  if (dlots < 0) UrZM = Ask - dZM * Point;      //значение уровня нулевой маржи
  if (dlots > 0) UrZF = Bid - dZF * Point;      //значение уровня полного слива
  if (dlots < 0) UrZF = Ask - dZF * Point;      //значение уровня полного слива
  if (dlots > 0) UrPZM = Bid - dPZM * Point;    //значение % сигнального уровня
  if (dlots < 0) UrPZM = Ask - dPZM * Point;    //значение % сигнального уровня
  
  if (dlots > 0) dUrRL = (dlots * lot_cena - freemargin) / (tickvalue * dlots);              //расстояние до уровня Равного Лока
  if (dlots < 0) dUrRL = (dlots * lot_cena + freemargin) / (tickvalue * dlots);              //расстояние до уровня Равного Лока
  if (dlots > 0) UrRL = Bid + dUrRL * Point;    //уровень равного лока
  if (dlots < 0) UrRL = Ask - dUrRL * Point;    //уровень равного лока
  if (dlots > 0) UrAut = UrRL + dSig * Point;   //значение автоматического сигнального уровня для установки равного лока
  if (dlots < 0) UrAut = UrRL - dSig * Point;   //значение автоматического сигнального уровня для установки равного лока

  if (BuyLots > 0 && SellLots > 0 && dlots > 0) UrOZP = Bid - ((BuyProfit + SellProfit) / (tickvalue * (dlots)) * Point);   //уровень общего безубытка для открытых ордеров
  if (BuyLots > 0 && SellLots > 0 && dlots < 0) UrOZP = Ask - ((BuyProfit + SellProfit) / (tickvalue * (dlots)) * Point);   //уровень общего безубытка для открытых ордеров
 }
 
 if (BuyLots > 0)    bd$ = d$/(BuyLots * tickvalue);
 if (SellLots > 0)   sd$ = d$/(SellLots * tickvalue);
 if (dLots != 0)     fd$ = d$/(dLots * tickvalue);

 UrTP_frz = Ask + freeze * Point;      //уровень зоны заморозки - для выставления отложеников и TP
 UrSL_frz = Bid - freeze * Point;      //уровень зоны заморозки - для выставления отложеников и SL
 
 if (BuyLots > 0)    UrZPb = Bid - (BuyProfit / (tickvalue * BuyLots) * Point);     //уровень безубытка для BUY ордеров
 if (SellLots > 0)   UrZPs = Ask + (SellProfit / (tickvalue * SellLots) * Point);   //уровень безубытка для SELL ордеров
 
 if (BuyLots > 0)    UrZPbTP = UrZPb + bTP * Point;            //уровень безубытка + TP для BUY ордеров
 if (SellLots > 0)   UrZPsTP = UrZPs - sTP * Point;            //уровень безубытка + TP для SELL ордеров
 
 if (BuyLots > 0)    UrZPbVlt = UrZPb + vlt * Point;            //уровень безубытка + волатильность для BUY ордеров
 if (SellLots > 0)   UrZPsVlt = UrZPs - vlt * Point;            //уровень безубытка + волатильность для SELL ордеров

 if (BuyLots > 0)    UrZPbdS = UrZPb + bd$ * Point;            //уровень безубытка + $ для BUY ордеров
 if (SellLots > 0)   UrZPsdS = UrZPs - sd$ * Point;            //уровень безубытка + $ для SELL ордеров
 
 if (BuyLots > SellLots)   UrZPfTP = UrOZP + fTP * Point;      //уровень общего безубытка + TP для всех ордеров
 if (SellLots > BuyLots)   UrZPfTP = UrOZP - fTP * Point;      //уровень общего безубытка + TP для всех ордеров
 
 if (BuyLots > SellLots)   UrZPfVlt = UrOZP + vlt * Point;      //уровень общего безубытка + волатильность
 if (SellLots > BuyLots)   UrZPfVlt = UrOZP - vlt * Point;      //уровень общего безубытка + волатильность
 
 if (dLots != 0)   UrZPfdS = UrOZP + fd$ * Point;              //уровень общего безубытка + $ для всех ордеров
 
 idZM = -dZM;                          //расстояния от текущей цены до уровня нулевой маржи (со знаком "-" - ниже текущей цены)
 
 if (UrZPb > 0 && UrZPs > 0)   dUrZP = (UrZPb - UrZPs)/Point;  //расстояние между безубытками Buy и Sell 

 if (dlots != 0) UrCT = UrZPs + BuyLots * Point * dUrZP/(BuyLots + SellLots);  //уровень "центра тяжести"
 
 if (BuyLots == 0 && SellLots > 0) { UrCTZ = UrZPs; UrOZPZ = UrZPs; }
 if (BuyLots > 0 && SellLots == 0) { UrCTZ = UrZPb; UrOZPZ = UrZPb; }
 if (BuyLots > 0 && SellLots > 0)  { UrCTZ = UrCT;  UrOZPZ= UrOZP;  }
 
 if (dlots > 0) idZP = (UrOZPZ - Bid) * (znakov);              //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)
 if (dlots < 0) idZP = (UrOZPZ - Ask) * (znakov);              //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)
 
 if (dlots > 0) idCT = (UrCTZ - Bid) * (znakov);               //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)
 if (dlots < 0) idCT = (UrCTZ - Ask) * (znakov);               //расстояние от текущей цены до уровня общего безубытка для открытых ордеров (со знаком "-" - ниже текущей цены)

//---------------------------------------------------------------------------------------------//
avatar

Syte

  • 26 июля 2022, 11:59
0
ну тут я не особо силен. Нужно подумать. Ладно, пока так оставим, главное уже есть.
avatar

Syte

  • 23 июля 2022, 09:43
0
Сравниваем количество ордеров buy и sell.
Если равное количество, ни чего не делаем.
Если перевес в какую либо сторону, считаем, где точка, которая будет являться нулевой.
avatar

Syte

  • 22 июля 2022, 21:29
0
Отлично.
Я думаю общий «знаменатель», можно вывести таким образом.

Считаем сколько ордеров, в какую сторону!?!
Скажем у нас 5 ордеров вверх, а вниз 4 ордера.
Значит ищем, где будет без убыток для всех ордеров если пойдем вверх.
Если равное количество ордеров, то ни чего не считаем. (нужен перевес ордеров хотя бы на один в любую сторону. Туда и считаем, где сможем закрыть в нуле.)

Скажем взяли в sell по цене 100, 1 ордер.
А в buy взяли 2 ордера по той же цене 100. Значит, пойдем вверх, минус от sell будет увеличиваться, а от двух баев, будет уменьшаться.

По какой цене, будет ноль убыток, если пойдем вверх?!?!?!
avatar

Syte

  • 22 июля 2022, 21:21
0
При компиляции, ошибку выдает.

Разобрался. :) ;) )) Ошибки теперь нету.

//+------------------------------------------------------------------+
//|                                                       temles.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
input string FileName = "temp";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   if(!ChartSaveTemplate(0,FileName))
   Print(__FUNCTION__," Couldnot Save template : " + "Error = " + string(GetLastError()));
  }
//+------------------------------------------------------------------+


А по поводу индикатора, будет время сделать?
avatar

Syte

  • 22 июля 2022, 18:19
0
Андрей, а ты не делал индикатор, который показывает два уровня, при достижении которых группой ордеров Sell или Buy достигается порог нулевого профита. Так же индикатор показывает суммарный уровень безубытка.

В общем три линии.
buy (1 линия безубытка всех ордеров)
sell (2 линия безубытка всех ордеров)
совокупный безубыток всех ордеров, третья линия.
Индикатор под мт5.

PS
Не могу найти, где то видел.
Под мт4 такой нашел, а под пятый уже не знаю где искать.

Если у кого то есть поделитесь.
avatar

Syte

  • 22 июля 2022, 12:18
0
ураааа :)  Работает. СПАСИБО :) ;) )))
avatar

Syte

  • 21 июля 2022, 22:31
0
Андрей, сделай, в рабочую папку терминала. Я лично не против. Идея мне нравиться, я как то просил тебя о подобной идеи. :) 
avatar

Syte

  • 21 июля 2022, 21:16
0
Скорее всего это, или советник, или скрипт.
avatar

Syte

  • 21 июля 2022, 15:50
0
Ладно, говори, какого брокера по хвалить нужно? за 1000 баксов.
avatar

Syte

  • 29 мая 2022, 08:46
0
Спасибо
avatar

Syte

  • 26 мая 2022, 08:53
0
вот этот хочу под мт5 что бы был.
avatar

Syte

  • 25 мая 2022, 10:42
0
Андрей, а индикатор под мт4 (чужой), такое не переделываешь под другой терминал мт5?
avatar

Syte

  • 24 мая 2022, 09:08
0
Спасибо :) 
avatar

Syte

  • 23 мая 2022, 18:32
0
Ну тогда один вариант, сделать, пары крипты те, которые в терминале есть. Сделай на выбор, те которые в терминале есть. Я поищу брокера, который нужные пары котирует. Потом в коде просто заменю, на необходимые. Или если, есть возможность в глобальную переменную выведи, что бы из глобальных переменных, можно было прописать нужные пары.
avatar

Syte

  • 4 апреля 2022, 21:18
0
Ну это нормально :)  Я не тороплюсь. :) 
avatar

Syte

  • 2 апреля 2022, 08:51
0
Андрей, получается написать, или проблемы все таки есть?
avatar

Syte

  • 1 апреля 2022, 08:39