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

sl&tp values.mq4

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

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

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

О программе

Программа представляет собой пользовательский индикатор для MetaTrader 4, который отслеживает открытые торговые ордера по текущему символу и отображает на графике текстовые объекты с информацией о значениях стоп-лосса и тейк-профита. Для каждого активного ордера с установленными SL/TP рассчитывается расстояние в пунктах и стоимость в валюте счёта, после чего эти данные выводятся рядом с соответствующими ценовыми уровнями на графике.

Индикатор работает на основе таймера с интервалом 250 миллисекунд, периодически обновляя текстовые метки при изменении цен или времени. При закрытии ордеров программа автоматически удаляет соответствующие текстовые объекты с графика. Доступны настройки цвета отображения (красный/зелёный или цвет переднего плана графика) и смещения текстовых меток относительно ценовых уровней.

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

НастройкаОписание
Colors (Colors) Colors — Определяет цвет отображения текстовых объектов SL и TP. При значении COLOR_RED_GREEN стоп-лосс отображается красным цветом, а тейк-профит — зелёным. При значении COLOR_FOREGROUND используется цвет переднего плана графика.
Offset (Offset) Offset — Целочисленный параметр, задающий смещение текстовых меток SL и TP в пунктах относительно ценовых уровней стоп-лосса и тейк-профита на графике.
Получить полный код

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

#property version    "1.01"
#property strict
#property indicator_chart_window

enum ColorSelect
  {
   COLOR_RED_GREEN,//Red/Green
   COLOR_FOREGROUND,//Foreground
  };

input ColorSelect Colors=COLOR_RED_GREEN;//Colors
input int Offset=25;//Offset

color COLOR_SL=clrNONE;
color COLOR_TP=clrNONE;

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

void OnDeinit(const int reason)
  {

   EventKillTimer();

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {

            if(ObjectFind(0,"#"+IntegerToString(OrderTicket(),0,0)+" sl")==0)ObjectDelete(0,"#"+IntegerToString(OrderTicket(),0,0)+" sl");
            if(ObjectFind(0,"#"+IntegerToString(OrderTicket(),0,0)+" tp")==0)ObjectDelete(0,"#"+IntegerToString(OrderTicket(),0,0)+" tp");

           }
        }
     }

  }

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[])
  {
      // код доступен только после оплаты
   }

void OnTimer()
  {

   double sl_dist=0,sl_val=0,tp_dist=0,tp_val=0,tick_val=0;
   string sl_name="", tp_name="", sl_pn="";
   ENUM_ANCHOR_POINT anchor=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {

            tick_val=MarketInfo(_Symbol,MODE_TICKVALUE);//GetTickValue

            if(ChartGetInteger(0,CHART_SHIFT,0))anchor=ANCHOR_LEFT;else anchor=ANCHOR_RIGHT;//SetAnchor

            if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
              {

               sl_name="#"+IntegerToString(OrderTicket(),0,0)+" sl";//SetName
               if(OrderStopLoss()>0)//StopLoss is active
                 {
                  if(OrderStopLoss()<=OrderOpenPrice())sl_pn="   +";else sl_pn="   -";//SetPos/Negative
                  sl_dist=(OrderStopLoss()-OrderOpenPrice())/_Point;//CalcDistance
                  sl_val=(sl_dist*tick_val)*OrderLots();//CalcValue
                  TextCreate(0,sl_name,0,Time[0],OrderStopLoss()+Offset*_Point,sl_pn+DoubleToString(MathAbs(sl_val),2)+_AccountCurrency()+" / "+DoubleToString(MathAbs(sl_dist),0)+"p","Tahoma",8,COLOR_SL,0,anchor,false,false,true,0);//ObjectCreate

                  if(ObjectFind(0,sl_name)==0)//Object is present
                    {
                     if((ObjectGetDouble(0,sl_name,OBJPROP_PRICE,0)-(OrderStopLoss()+Offset*_Point))!=0 || ObjectGetInteger(0,sl_name,OBJPROP_TIME,0)!=Time[0])//Price or Time has changed
                       {
                        ObjectSetDouble(0,sl_name,OBJPROP_PRICE,OrderStopLoss()+Offset*_Point);//SetPrice
                        ObjectSetString(0,sl_name,OBJPROP_TEXT,0,sl_pn+DoubleToString(MathAbs(sl_val),2)+_AccountCurrency()+" / "+DoubleToString(MathAbs(sl_dist),0)+"p");//SetText
                        ObjectSetInteger(0,sl_name,OBJPROP_TIME,Time[0]);//SetTime
                       }
                    }

                 }

               else if(ObjectFind(0,sl_name)==0)ObjectDelete(0,sl_name);//Canceled

               tp_name="#"+IntegerToString(OrderTicket(),0,0)+" tp";//SetName
               if(OrderTakeProfit()>0)//TakeProfit is active
                 {
                  tp_dist=(OrderOpenPrice()-OrderTakeProfit())/_Point;//CalcDistance
                  tp_val=(tp_dist*tick_val)*OrderLots();//CalcValue
                  TextCreate(0,tp_name,0,Time[0],OrderTakeProfit()-Offset*_Point,"   +"+DoubleToString(tp_val,2)+_AccountCurrency()+" / "+DoubleToString(tp_dist,0)+"p","Tahoma",8,COLOR_TP,0,anchor,false,false,true,0);//ObjectCreate

                  if(ObjectFind(0,tp_name)==0)//Object is present
                    {
                     if((ObjectGetDouble(0,tp_name,OBJPROP_PRICE,0)-(OrderTakeProfit()-Offset*_Point))!=0 || ObjectGetInteger(0,tp_name,OBJPROP_TIME,0)!=Time[0])//Price or Time has changed
                       {
                        ObjectSetDouble(0,tp_name,OBJPROP_PRICE,OrderTakeProfit()-Offset*_Point);//SetPrice
                        ObjectSetString(0,tp_name,OBJPROP_TEXT,0,"   +"+DoubleToString(tp_val,2)+_AccountCurrency()+" / "+DoubleToString(tp_dist,0)+"p");//SetText
                        ObjectSetInteger(0,tp_name,OBJPROP_TIME,Time[0]);//SetTime
                       }
                    }
                 }

               else if(ObjectFind(0,tp_name)==0)ObjectDelete(0,tp_name);//Canceled

              }

            if(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP)
              {

               sl_name="#"+IntegerToString(OrderTicket(),0,0)+" sl";//SetName
               if(OrderStopLoss()>0)//StopLoss is active
                 {
                  if(OrderStopLoss()>=OrderOpenPrice())sl_pn="   +";else sl_pn="   -";//SetPos/Negative
                  sl_dist=(OrderOpenPrice()-OrderStopLoss())/_Point;//CalcDistance
                  sl_val=(sl_dist*tick_val)*OrderLots();//CalcValue
                  TextCreate(0,sl_name,0,Time[0],OrderStopLoss()-Offset*_Point,sl_pn+DoubleToString(MathAbs(sl_val),2)+_AccountCurrency()+" / "+DoubleToString(MathAbs(sl_dist),0)+"p","Tah

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

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

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

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

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

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

Стоимость полного кода
799,70₽ ≈ $9.77