← К каталогу
Исходный код · ID 3738

profit-loss-info-indicator@lifeindreamsworld_6255515370069694574.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Это пользовательский индикатор для MetaTrader 4, который отображает информацию о прибыли и убытках прямо на графике. Индикатор создаёт текстовые метки (OBJ_LABEL) в заданном углу экрана, показывая данные по открытым позициям и итоговые значения.

Основная функциональность включает четыре режима отображения: прибыль/убыток по каждой позиции, процент плавающей прибыли/убытки, дневной процент прибыли/убытки и процент прибыли/убытки за заданный период. Каждый режим может быть включён или отключён отдельно через соответствующие переключатели.

Расчёт процентов выполняется на основе баланса счёта и исторических данных ордеров. Для ежедневного и периодического расчёта доступна настройка начала отсчёта по времени брокера или локальному времени. Период может заканчиваться текущим моментом времени или заданной конечной датой.

Внешний вид настраивается через параметры шрифта, цвета для положительных и отрицательных значений, а также смещение по горизонтали и вертикали от выбранного угла графика.

Настройки программы

НастройкаОписание
showPLPerPosition Показать П/У по позициям — Переключатель отображения прибыли/убытки по каждой отдельной позиции.
showFloatPLPercentage Показать % плавающей П/У — Переключатель отображения процента плавающей прибыли/убытки по текущим позициям.
showDailyPLPercentage Показать дневной % П/У — Переключатель отображения дневного процента прибыли/убытки.
showPeriodePLPercentage Показать % П/У за период — Переключатель отображения процента прибыли/убытки за заданный период.
notes1 Подсказка 1 — Текстовая подсказка о том, что startDayAccordingTo определяет начало дня относительно баланса и зависит от часового пояса брокера или локального времени.
startDayAccordingTo Начало дня по — Определяет начало дня для расчётов: 0 — время брокера, 1 — локальное время.
notes3 Подсказка 3 — Текстовая подсказка о формате периода: yyyy.mm.dd hh:mm.
periodeStartTime Время начала периода — Начальная дата и время периода для расчёта процентной прибыли/убытки.
useTodayAsEndTime Использовать текущее время как конец периода — Переключатель, при активации текущий момент времени используется как конец периода вместо periodeEndTime.
periodeEndTime Время окончания периода — Конечная дата и время периода для расчёта процентной прибыли/убытки.
myfont Размер шрифта — Размер шрифта для текстовых меток на графике.
positifColor Цель прибыли — Цвет отображения положительных значений прибыли/убытки.
negatifColor Цвет убытка — Цвет отображения отрицательных значений прибыли/убытки.
Corner Угол размещения — Угол графика, в котором размещаются текстовые метки (аналог ENUM_BASE_CORNER).
X_plus Смещение по X — Горизонтальное смещение текстовых меток от выбранного угла в пикселях.
Y_plus Смещение по Y — Вертикальное смещение текстовых меток от выбранного угла в пикселях.
Получить полный код

Поиск по коду файла

#property description "edited by eevviill"
#property description "view settings"

#property indicator_chart_window

extern bool showPLPerPosition = true;
extern bool showFloatPLPercentage = false;
extern bool showDailyPLPercentage = false;
extern bool showPeriodePLPercentage = false;

extern string notes1 = "startDayAccordingTo indicates the start-of-day reference (in relation to balance) following broker / localtime";
extern string notes2 = "0= broker time; 1= localtime";
extern int startDayAccordingTo = 1;
extern string notes3 = "periode format : yyyy.mm.dd hh:mm";
extern datetime periodeStartTime = D'2009.11.01 00:00';
extern bool useTodayAsEndTime = true;
extern datetime periodeEndTime = D'2009.11.04 00:00';

extern int myfont = 10; // This extern variable was added by Agoenk of Forexindo. Thanks for the contibution :)

extern color positifColor = Chartreuse;
extern color negatifColor = Magenta;

extern string emp1 = "//////////View settings";
extern ENUM_BASE_CORNER Corner = CORNER_LEFT_UPPER;
extern int X_plus = 0;
extern int Y_plus = 0;

int x = NULL;

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {

   int idx;

   if(x != NULL) {
      for(idx = 0; idx<x; idx++) {
         ObjectDelete("O"+idx);
         ObjectDelete("PL"+idx);
      }

      ObjectDelete("h");      
      ObjectDelete("Total1");
      ObjectDelete("Total2");
      ObjectDelete("PercentageDailyLabel");
      ObjectDelete("PercentageDaily");
      ObjectDelete("PercentagePeriodeLabel");
      ObjectDelete("PercentagePeriode");
      ObjectDelete("PeriodeLabel");
      ObjectDelete("PercentageFloatLabel");
      ObjectDelete("PercentageFloat");
   }

   return(0);
  }

void DisplayText(string objname, string text, int fontsize, color clr, double C, double X, double Y, string font)
{
   ObjectDelete(objname);
   ObjectCreate(objname, OBJ_LABEL, 0, 0, 0);
   ObjectSetText(objname, text, fontsize, font, clr);
   ObjectSet(objname, OBJPROP_CORNER, Corner);
   ObjectSet(objname, OBJPROP_XDISTANCE, X+X_plus);
   ObjectSet(objname, OBJPROP_YDISTANCE, Y+Y_plus);
}

double percentageValue(datetime start, datetime end){
   int i;
   double startTime = 86400 * (start / 86400);
   double endTime;
   if (startDayAccordingTo == 1) startTime = startTime + ((TimeCurrent() - TimeLocal()) / 100) * 100;

   endTime = 86400 * (end / 86400) + 86400;
   if (startDayAccordingTo == 1) endTime = endTime + ((TimeCurrent() - TimeLocal()) / 100) * 100;

   double startBalance;
   double histPL = 0;
   double bruteHistPL = 0;

   for(i=1; i <= OrdersHistoryTotal(); i++){
      if(OrderSelect(OrdersHistoryTotal() - i, SELECT_BY_POS , MODE_HISTORY)==true)  {
         if(OrderCloseTime() >= startTime) {
            bruteHistPL = bruteHistPL + OrderProfit();
            if(OrderCloseTime() < endTime) histPL = histPL + OrderProfit();
         }
      }   
   }

   startBalance = AccountBalance() - bruteHistPL;

   if(TimeCurrent() >= startTime && TimeCurrent() < endTime){
      for(i=OrdersTotal()-1; i >=0 ; i--){
         if(OrderSelect(i, SELECT_BY_POS , MODE_TRADES)==true)  {

               histPL = histPL + OrderProfit();

         }   
      }
   }   

   return(NormalizeDouble(histPL / startBalance * 100, 4));

}

int start()
  {
      // код доступен только после оплаты
   }
   int    counted_bars=IndicatorCounted();
   int    j;
   int    idx;
   string text;
   double PL;
   double total;
   int strLen;
   double xPos;

         if(x != NULL) {
            for(idx = 0; idx<x; idx++) {
               ObjectDelete("O"+idx);
               ObjectDelete("PL"+idx);
            }

            ObjectDelete("Total1");
            ObjectDelete("Total2");
         }

         text = "";
         j=1;
         total = 0;

         DisplayText("h", "Profit/Loss Info ", myfont, Gold, 0, 5, 15 , "Arial Bold"); 

         if(showPLPerPosition) {
            for (int i = OrdersTotal()-1 ; i >= 0; i--) 
            { 
               if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
               { 
                  text = OrderSymbol() + " (" + OrderTicket() + ")" + " : ";
                  strLen = StringLen(text);
                  xPos = NormalizeDouble(strLen * 0.65 * myfont,0) + 18;

                  if(OrderType() == OP_BUY)  {
                     DisplayText("O"+j, OrderSymbol() + " (" + OrderTicket() + ")" + " : ", myfont, Chartreuse, 0, 5, (2 + j * 1.5) * myfont, "Arial bold"); 

                     PL = (OrderClosePrice()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
                     total = total + PL;
                     if(PL<0) DisplayText("PL"+j, DoubleToStr(PL, 0), myfont, negatifColor, 0, xPos, (2 + j * 1.5) * myfont, "Arial"); 
                     else if(PL>0) DisplayText("PL"+j, "+"+DoubleToStr(PL, 0), myfont, positifColor, 0, xPos, (2 + j * 1.5) * myfont, "Arial"); 
                     else DisplayText("PL"+j, DoubleToStr(PL, 0), myfont, positifColor, 0, xPos, (2 + j * 1.5) * myfont, "Arial"); 
                  }
                  else if(OrderType() == OP_SELL)  {
                     DisplayText("O"+j, OrderSymbol() + " (" + OrderTicket() + ")" + " : ", myfont, M

Показано первые 50% кода (символов: 7623)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
762,30₽ ≈ $9.32