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

risk-reward-box-totalview-bt.mq4

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

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

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

О программе

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

Индикатор рассчитывает и выводит отношение риск/прибыль (R/R), цены тейк-профита и стоп-лосса, расстояние в пунктах и процент риска от баланса счёта. Результаты отображаются как в виде подписей на графике, так и в виде отдельной метки в углу экрана.

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

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

НастройкаОписание
RiskLotSize Размер лота риска — Размер лота для расчёта процента риска от баланса
Chart timeframe to get H/L (TimeFrame) Таймфрейм — Таймфрейм для получения максимумов и минимумов цен
Delete_When_Chart_Change Удаление при смене графика — Удаление графических объектов при смене символов или таймфрейма
ButtonConfig Настройка текста кнопок — Текстовый заголовок группы настроек кнопок
Button_X_Position Позиция кнопок по X — Горизонтальная позиция кнопок на графике
Button_Y_Position Позиция кнопок по Y — Вертикальная позиция кнопок на графике
Button_Font_Color Цвет шрифта кнопок — Цвет текста на кнопках управления
BoxTextConfig Настройка текста ячеек — Текстовый заголовок группы настроек информационных ячеек
Box_Text_Font_Color Цвет шрифта ячеек — Цвет текста информационных подписей на графике
Box_Text_Font_Size Размер шрифта ячеек — Размер шрифта информационных подписей на графике
Label_Text_Config Настройка текста меток — Текстовый заголовок группы настроек меток
Show_RR_To_Screen Показать R/R на экране — Отображение отношения риск/прибыль в виде метки в углу графика
RR_coner Угол расположения R/R — Угол привязки метки отношения риск/прибыль на графике
RR_Font_Size Размер шрифта R/R — Размер шрифта метки отношения риск/прибыль в углу экрана
Получить полный код

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

???#property copyright "Copy right 2020 ZiWox Group && BlueRain"

#property version   "1.00"

#property strict
#property indicator_chart_window

#property description "Modified by BlueRain 8/20/2022"

input    double      RiskLotSize = 1;
input    ENUM_TIMEFRAMES   TimeFrame      =  PERIOD_H1;  //Chart timeframe to get H/L
input    bool    Delete_When_Chart_Change = false; 

input    string ButtonConfig = "-------Button Location -----";
input    int   Button_X_Position = 20;
input    int   Button_Y_Position = 30;
input    color Button_Font_Color = clrRed;

input    string BoxTextConfig = "------Box Text Config-----";
input    color Box_Text_Font_Color = clrRed;
input    int Box_Text_Font_Size = 8;

input  string Label_Text_Config  = "-------Label Text Config --";
input    bool  Show_RR_To_Screen = true;
input    ENUM_BASE_CORNER RR_coner = CORNER_LEFT_LOWER;
input    int RR_Font_Size = 20;

string   LabelID   =  "RR";

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

void OnDeinit(const int reason)
 {
      if (Delete_When_Chart_Change)
      {
          deleteObjects();
          ObjectDelete("Reset");
          ObjectDelete("Remove");
      }

 }

 void deleteObjects()
{
   string lookFor       = LabelID;
   int    lookForLength = StringLen(lookFor);
   for (int i=ObjectsTotal()-1; i>=0; i--)
   {
      string objectName = ObjectName(i);
         if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
   }
}

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

  if(id==CHARTEVENT_OBJECT_CLICK)
     {
      if(sparam=="Reset") // Pause forwarder
       {
         ChartClean();

         WriteRR();

       }

       if(sparam=="Remove") // P
       {

         RemoveBox();

       }

     }

   if(id==CHARTEVENT_CHART_CHANGE)
  {
       WriteRR();
  }

   if(id==CHARTEVENT_OBJECT_DRAG)
   {
      if(sparam==LabelID+".RR_Green" )
       {
         double   price    =  ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1); // low green
         int      time2    =  (int)ObjectGet(LabelID+".RR_Green",OBJPROP_TIME2);
         int      time1    =  (int)ObjectGet(LabelID+".RR_Green",OBJPROP_TIME1);

         ObjectSet(LabelID+".RR_Pink",OBJPROP_PRICE2,price);    // top pink 
         ObjectSet(LabelID+".RR_Pink",OBJPROP_TIME1,time1);     // mid
         ObjectSet(LabelID+".RR_Pink",OBJPROP_TIME2,time2);     // mid

       }

      if(sparam==LabelID+".RR_Pink" )
       {
         double   price1   =  ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1); // top pink
         double   price2   =  ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2); // top pink
         int      time2    =  (int)ObjectGet(LabelID+".RR_Pink",OBJPROP_TIME2);
         int      time1    =  (int)ObjectGet(LabelID+".RR_Pink",OBJPROP_TIME1);
         ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE1,price2);   // low green
         ObjectSet(LabelID+".RR_Green",OBJPROP_TIME1,time1);
         ObjectSet(LabelID+".RR_Green",OBJPROP_TIME2,time2);

         if( ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1) > ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2) )
          {
               double gapisze   =  MathAbs(ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1)-ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2));
               price1    =  ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1);
               price2    =  ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2); 
            ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE1,price1);
            ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE2,price1-gapisze);

          }

         if( ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1) < ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2) )
          {
               double gapisze   =  MathAbs(ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1)-ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2));
               price1    =  ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1);
               price2    =  ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2); 
            ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE1,price1);
            ObjectSet(LabelID+".RR_Green",OBJPROP_PRICE2,price1+gapisze);

          }
       }

       WriteRR();
       WindowRedraw();

     }
  }

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

 void WriteRR()
 {

    double balance = AccountBalance();
    double riskper = 0;

    double PointValue=(((MarketInfo(Symbol(),MODE_TICKVALUE)*Point)/MarketInfo(Symbol(),MODE_TICKSIZE))*RiskLotSize);
   double PipValue=PointValue*10;

      double point = MarketInfo(Symbol(), MODE_POINT);

  double RewardBaseprice    =  ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE1); // low green
       double RewaredTPprice     =  ObjectGet(LabelID+".RR_Green",OBJPROP_PRICE2); // low green

       double RiskBaseprice    =  ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE1); // low green
       double RiskSLprice    =  ObjectGet(LabelID+".RR_Pink",OBJPROP_PRICE2); // low green
       double RewardH =   MathAbs(RewardBaseprice - RewaredTPprice);
       double RiskH =   MathAbs(RiskBaseprice - RiskSLprice);
       double RRratio = (RewardH/RiskH);

       datetime LocationTime = (datetime) ObjectGet(LabelID+".RR_Green",OBJPROP_TIME1);

       int x,y;

         ChartTimePriceToXY(0, 0, LocationTime, RewaredTPprice, x, y);

         if ( RewaredTPprice < RiskSLprice ) y=y-15;
         double range = MathAbs(RewaredTPprice - RewardBaseprice)/Point/10;
         riskper =  (PipValue*range)/balance*100;
         DrawLabel( "TPPrice",x,y, "TP : " + DoubleToStr(RewaredTPprice,Digits) + " / " + DoubleToString(range,0) + " / " + DoubleToStr(PipValue*range,2) + " / " + DoubleToStr(riskper,2) + "%",Box_Text_Font_Size,"Arial Rounded MT Bold",Box_Text_Font_Color);

         ChartTimePriceToXY(0, 0, LocationTime,RewardBaseprice, x, y);
         y = y - 15;
         DrawLabel( "Ratio",x,y, "R/R  1: " +  DoubleToStr(RRratio,2) + " / " + DoubleToString(RewardBaseprice,Digits) +  " / " + DoubleToStr(RiskLotSize,2) + " / " + DoubleToStr(PipValue,2) ,Box_Text_Font_Size,"Arial Rounded MT Bold",Box_Text_Font_Color);

         ChartTimePriceToXY(0, 0, LocationTime,RiskBaseprice, x, y);
          if ( RewaredTPprice > RiskBaseprice )  y=y-15;
          range = MathAbs(RiskSLprice - RiskBaseprice)/Point/10;
           riskper =  (PipValue*range)/balance*100;
         DrawLabel( "SLPrice",x,y, "SL: " +  DoubleToStr(RiskBaseprice,2)  + " / " + DoubleToString(-range,0) + " / " + DoubleToStr(PipValue*-range,2) + " / " + DoubleToStr(-riskper,2) + "%", Box_Text_Font_Size,"Arial Rounded MT Bold",Box_Text_Font_Color);

          if ( Show_RR_To_Screen )
          {
          string id = LabelID + "RR";

          if (ObjectFind(0,id)<0)     ObjectCreate(id,OBJ_LABEL,0,0,0,0,0);

          ObjectSet(id,OBJPROP_CORNER,RR_coner);
          ObjectSet(id,OBJPROP_XDISTANCE,10);         
          ObjectSet(id,OBJPROP_YDISTANCE,10);     
          ObjectSetText(id, "R/R  1: " +  DoubleToStr(RRratio,2),RR_Font_Size,"TAHOMA",Tomato);
          }
          else
          {
            ObjectDelete(LabelID + "R

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

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

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

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

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

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

Стоимость полного кода
1 126₽ ≈ $13.76