njdftgh
Shoom

 
Уровень 11

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2093



РЕКОМЕНДУЮ



Графический индикатор

Добрый день Андрей, добрый день коллеги! Андрей прошу помочь с созданием графического индикатора следующего описания:
На выбранном инструменте, на часовом графике выделяются участки продолжительностью 12 часов. И строятся четырёх угольные фигуры, на последних трёх днях. 1 точка фигуры будет являться точкой закрытия свечи в 00:00; 2 точка будет являться самым низким(лоем) значением цены в данном участке времени; 3 точка будет являться самым высоким(хаем) значением цены в данном участке времени; 4 точка будет являться точкой закрытия свечи в 12:00. Все четыре точки соединяются отрезками. Следующая фигура строится по такому же принципу. 1 точка фигуры будет являться точкой закрытия свечи в 12:00; 2 точка будет являться самым низким(лоем) значением цены в данном участке времени; 3 точка будет являться самым высоким(хаем) значением цены в данном участке времени; 4 точка будет являться точкой закрытия свечи в 24:00. Все четыре точки соединяются отрезками. И т.д. То есть за один день у нас должно построится две четырёхугольные фигуры. Рисунок-пояснение прилагаю.

Есть подобный индикатор:
VR---FIGURA Button.ex4 (0 Kb)
VR---FIGURA Button.mq4 (0 Kb)
Но он строит одну фигуру на весь день. Нужно как в тех задании: две фигуры на один день в интервалах по 12 часов.
Андрей пожалуйста прошу помочь в создании индикатора!
  • 0
  • Просмотров: 1537
  • 15 сентября 2023, 17:48
  • njdftgh
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
Следующая запись в группе  
Робот- закрывашка
13 сентября 2023
16 сентября 2023

Комментарии (15)

+
0
//+------------------------------------------------------------------+
//|                            VR---FIGURA                           |
//|                                                                  |
//|                  http://www.trading-go.ru                        |
//+------------------------------------------------------------------+

#property copyright " Trading-go "
#property link      " www.trading-go.ru "
#property indicator_chart_window

#include <Controls\Button.mqh>
CButton TLButton;


extern int   Days  = 20  ;               
extern int   WIDTH =  3  ; 

extern int ButtonX = 25;
extern int ButtonY = 25;
extern string  Button_text        = "VRbtn"; 

bool TL_Ind=false;

int init()
{

   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
   int x1 = ButtonX;
   int y1 = ButtonY;
   int x2 = x1+70;  //button width
   int y2 = y1+30;   //button height

   TLButton.Create(0,Button_text,0,x1,y1,x2,y2);//Create TLButton
   TLButton.Text(Button_text);                         //Label

}

              
int deinit ()
{ 

for(int x=0;x<=Days;x++)  
 {
ObjectDelete("opma"+x);
ObjectDelete("opmu"+x);                
ObjectDelete("opmq"+x);
ObjectDelete("opms"+x);
 }
}


//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---Observes cursor position, Highlight button and detect Click event



   if(TLButton.Contains(lparam, dparam))
      TLButton.Pressed(true);   //Dtect cursor on the button
   else
      TLButton.Pressed(false);
      
     if(id == CHARTEVENT_OBJECT_CLICK && sparam == Button_text)
     {
      //on/off  
      if(TL_Ind==false)          TL_Ind=true;
      else                       TL_Ind=false;
      

      switch(TL_Ind)
        {
         case(true):
        
            start();
	
       
         break;
         
         case(false):
            deleteObjects();
            
            break;
        }
     }
     
     

}

void deleteObjects()
{


for(int P=0;P<=Days;P++)  
             {
               ObjectDelete("opma"+P);
               ObjectDelete("opmu"+P);                       
               ObjectDelete("opmq"+P);
               ObjectDelete("opms"+P);
          }
}


int start()
  {

int timup=0;
int timdw=0;
if (Period()!=60)
{
   Comment("SET THE TIME PERIOD 1H ");
   for(int P=0;P<=Days;P++)  
    {
      ObjectDelete("opma"+P);
      ObjectDelete("opmu"+P);                       
      ObjectDelete("opmq"+P);
      ObjectDelete("opms"+P);
       }
      return(0);
}

double opp,cl;
int timcl, timop;

          
 for(int x=0;x<=Days;x++)  
 {
      
      if ( x == 0 )
      {
         //open
         opp = NormalizeDouble(iOpen (Symbol(),PERIOD_D1,0),Digits);
         cl = NormalizeDouble(iClose (Symbol(),PERIOD_D1,0),Digits);
         
         timcl = iTime(Symbol(),PERIOD_M1,0);
         timop = iTime(Symbol(),PERIOD_D1,0);
      
      
      }
      else
      {
      
         opp = NormalizeDouble(iOpen (Symbol(),1440,x-1),Digits);
         cl  = NormalizeDouble(iOpen (Symbol(),1440,x  ),Digits); 
         
         timcl = iTime(Symbol(),1440,x);  
         timop = timcl+86400;             
      
      }
      
      double max=0;
      double min=0;
       int t =24*x;
       
       for(int i=t-24+Hour();i<=t+Hour();i++)  
       {
          if (High[i]>max)
          {
             max  =High[i];    
             timup=Time[i];   
          }
          
         if (min==0||Low[i]<min)
         {
             min=Low[i];    
             timdw=Time[i];   
      
         }
      }
      
      
     
          
         if (Period()==60 && TL_Ind == true){ 
               ObjectCreate("opma"+x,OBJ_TREND,0,timop,opp,timup,max); 
               ObjectSet   ("opma"+x,OBJPROP_RAY,false);
               ObjectSet   ("opma"+x,OBJPROP_COLOR,Blue);
               ObjectSet   ("opma"+x,OBJPROP_WIDTH,WIDTH);
               
               ObjectCreate("opmu"+x,OBJ_TREND,0,timup,max,timcl,cl);
               ObjectSet   ("opmu"+x,OBJPROP_RAY,false);
               ObjectSet   ("opmu"+x,OBJPROP_COLOR,Red);
               ObjectSet   ("opmu"+x,OBJPROP_WIDTH,WIDTH);
               
               ObjectCreate("opmq"+x,OBJ_TREND,0,timop,opp,timdw,min);
               ObjectSet   ("opmq"+x,OBJPROP_RAY,false);
               ObjectSet   ("opmq"+x,OBJPROP_COLOR,LawnGreen);
               ObjectSet   ("opmq"+x,OBJPROP_WIDTH,WIDTH);
               
               ObjectCreate("opms"+x,OBJ_TREND,0,timdw,min,timcl,cl);
               ObjectSet   ("opms"+x,OBJPROP_RAY,false);
               ObjectSet   ("opms"+x,OBJPROP_COLOR,Blue);
               ObjectSet   ("opms"+x,OBJPROP_WIDTH,WIDTH);
               }
      
       
      
       
        
   }

  

}
avatar

  11  njdftgh Автор Сообщений: 219 - Shoom

  • 15 сентября 2023, 17:59
+
0
Выложил код подобного индикатора, т.к. не пойму загрузился ли индикатор в заказе или нет.
avatar

  11  njdftgh Автор Сообщений: 219 - Shoom

  • 15 сентября 2023, 18:00
+
0
Рисунок-пояснение прилагаю.


у вас на скрине только одна фигура
avatar

  34  AM2 Сообщений: 15912 - Андрей

  • 16 сентября 2023, 12:43
+
0
У меня на скрине, по два четырёхугольника в день. Индикатор, тот что в коде выложил, строит один четырехугольник в день.
Редактирован: 16 сентября 2023, 13:45
avatar

  11  njdftgh Автор Сообщений: 219 - Shoom

  • 16 сентября 2023, 13:43
+
0
больно уж все это мудрено, сходу не решишь
avatar

  34  AM2 Сообщений: 15912 - Андрей

  • 16 сентября 2023, 14:09
+
+2
я часа 4 делал закодил только 2 линии и то на одном дне. если кто то хочет продолжить, пожалуйста:


//+------------------------------------------------------------------+
//|                                                   DoubleRect.mq4 |
//|                                              Copyright 2023, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

input int days=5;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   double p1=iOpen(NULL,PERIOD_D1,1);
   double p2=low[iLowest(NULL,0,MODE_LOW,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
   datetime t1=iTime(NULL,PERIOD_D1,1);
   datetime t2=time[iLowest(NULL,0,MODE_LOW,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];

   PutTrendLine("day"+"12",t1,p1,t2,p2,Gold);

   double p13=iOpen(NULL,PERIOD_D1,1);
   double p23=high[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
   datetime t13=iTime(NULL,PERIOD_D1,1);
   datetime t23=time[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];

   PutTrendLine("day"+"13",t13,p13,t23,p23,Gold);

   double p14=iOpen(NULL,PERIOD_D1,1);
   double p24=high[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];
   datetime t14=iTime(NULL,PERIOD_D1,1);
   datetime t24=time[iHighest(NULL,0,MODE_HIGH,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))];

   PutTrendLine("day"+"14",t13,p13,t23,p23,Gold);

   Comment("\n T1: ",iTime(NULL,PERIOD_D1,0),
           "\n T2: ",t2,
           "\n T3: ",iTime(NULL,PERIOD_D1,1)+60*60*12,
           "\n low: ",low[iLowest(NULL,0,MODE_LOW,6,iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)))],
           "\n bar: ",iBarShift(NULL,0,(iTime(NULL,PERIOD_D1,1)+60*60*12)));

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15912 - Андрей

  • 17 сентября 2023, 15:32
+
0

//+------------------------------------------------------------------+
//|                            VR---FIGURA                           |
//|                                                                  |
//|                  http://www.trading-go.ru                        |
//+------------------------------------------------------------------+

#property copyright " Trading-go "
#property link      " www.trading-go.ru "
#property indicator_chart_window

#include <Controls\Button.mqh>
CButton TLButton;

extern int   Days  = 2;               
extern int   WIDTH =  1; 
extern int ButtonX = 25;
extern int ButtonY = 25;
extern string  Button_text  = "VRbtn"; 
bool TL_Ind=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0,CHART_SHOW_GRID,false);
   ChartSetInteger(0,CHART_SHOW_PERIOD_SEP,true);
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
   int x1 = ButtonX;
   int y1 = ButtonY;
   int x2 = x1+70;  //button width
   int y2 = y1+30;   //button height

   TLButton.Create(0,Button_text,0,x1,y1,x2,y2);//Create TLButton
   TLButton.Text(Button_text);                         //Label
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+            
void OnDeinit(const int reason)
  { 
   for(int x=0;x<=Days*2;x++)  
    {
     ObjectDelete("opma"+x);
     ObjectDelete("opmu"+x);                
     ObjectDelete("opmq"+x);
     ObjectDelete("opms"+x);
    }
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(TLButton.Contains(lparam, dparam))
      TLButton.Pressed(true);   //Dtect cursor on the button
   else
      TLButton.Pressed(false); 
   if(id == CHARTEVENT_OBJECT_CLICK && sparam == Button_text)
     {
      //on/off  
      if(TL_Ind==false) TL_Ind=true;
      else TL_Ind=false;
      switch(TL_Ind)
        {
         case(true) : start();break;
         case(false) : deleteObjects();break;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void deleteObjects()
  {
   for(int P=0;P<=Days*24;P++)  
      {
       ObjectDelete("opma"+P);
       ObjectDelete("opmu"+P);                       
       ObjectDelete("opmq"+P);
       ObjectDelete("opms"+P);
      }
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void start()
  {
   int timup=0;
   int timdw=0;
   if(Period()!=60)
     {
      Comment("SET THE TIME PERIOD 1H ");
      for(int P=0;P<=Days*2;P++)  
       {
        ObjectDelete("opma"+P);
        ObjectDelete("opmu"+P);                       
        ObjectDelete("opmq"+P);
        ObjectDelete("opms"+P);
       }
      }

  double opp,cl;
  int timcl, timop;
  int start_hour=Hour();

  if(start_hour>12)
    start_hour=(start_hour%12)+Days*24;
  if(start_hour<12)
    start_hour=start_hour+Days*24;

  for(int x=start_hour; x>=12; x=x-12) 
    {
     opp=NormalizeDouble(iClose(Symbol(),PERIOD_H1,x),Digits);
     cl=NormalizeDouble(iClose(Symbol(),PERIOD_H1,x-12),Digits);     
     timop=iTime(Symbol(),PERIOD_H1,x);
     timcl=iTime(Symbol(),PERIOD_H1,x-12);    
           
     double max=0;
     double min=0;
     int t=x; 
     
     for(int i=t;i>=t-12;i--)  
       {
        if(High[i]>max)
          {
           max  =High[i];    
           timup=Time[i];   
          } 
        if(min==0||Low[i]<min)
          {
           min=Low[i];    
           timdw=Time[i];   
          }
        }
      if(Period()==60 && TL_Ind==true)
        { 
         ObjectCreate("opma"+x,OBJ_TREND,0,timop,opp,timup,max); 
         ObjectSet("opma"+x,OBJPROP_RAY,false);
         ObjectSet("opma"+x,OBJPROP_COLOR,Blue);
         ObjectSet("opma"+x,OBJPROP_WIDTH,WIDTH);
               
         ObjectCreate("opmu"+x,OBJ_TREND,0,timup,max,timcl,cl);
         ObjectSet("opmu"+x,OBJPROP_RAY,false);
         ObjectSet("opmu"+x,OBJPROP_COLOR,Red);
         ObjectSet("opmu"+x,OBJPROP_WIDTH,WIDTH);
               
         ObjectCreate("opmq"+x,OBJ_TREND,0,timcl,cl,timdw,min);
         ObjectSet("opmq"+x,OBJPROP_RAY,false);
         ObjectSet("opmq"+x,OBJPROP_COLOR,LawnGreen);
         ObjectSet("opmq"+x,OBJPROP_WIDTH,WIDTH);
               
         ObjectCreate("opms"+x,OBJ_TREND,0,timdw,min,timop,opp);
         ObjectSet("opms"+x,OBJPROP_RAY,false);
         ObjectSet("opms"+x,OBJPROP_COLOR,clrYellow);
         ObjectSet("opms"+x,OBJPROP_WIDTH,WIDTH);
        }     
     }
  }
avatar

  13  verta81 Сообщений: 357

  • 19 сентября 2023, 23:02
+
0
Ухты! От души благодарю!!!!!*hi* 
avatar

  11  njdftgh Автор Сообщений: 219 - Shoom

  • 19 сентября 2023, 23:35
+
0
А какое применение у этого индикатора? визуализация информации за сутки?
avatar

  5  dreigzon Сообщений: 41

  • 24 сентября 2023, 08:17
+
0
фигура предыдущего дня показывает нам какое движение нас ждёт в следующем дне.
avatar

  11  njdftgh Автор Сообщений: 219 - Shoom

  • 24 сентября 2023, 09:09
+
0
Методика где-то выложена или хау -ноу?
avatar

  17  Boris54 Сообщений: 768 - ПенSионер

  • 24 сентября 2023, 10:41
+
0
avatar

  11  njdftgh Автор Сообщений: 219 - Shoom

  • 24 сентября 2023, 12:30
+
0
Благодарю
avatar

  17  Boris54 Сообщений: 768 - ПенSионер

  • 24 сентября 2023, 14:35
+
0
Забиваем в поиске гугл название индюшки VR---FIGURA, который я выложил и читаем самые первые найденные варианты. ))))
avatar

  11  njdftgh Автор Сообщений: 219 - Shoom

  • 24 сентября 2023, 12:35
+
0
спасибо за разьяснение)
Редактирован: 28 сентября 2023, 18:13
avatar

  5  dreigzon Сообщений: 41

  • 28 сентября 2023, 18:12

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари