Скачать MetaTrader 5

Как нанести на младший таймфрейм цены закрытия в виде гор-ых уровней (HLC) предыдущего бара старших тайфреймов, например: D1,W1,M1?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Svinauh
80
Svinauh  

Например нанести на M15 цены закрытия предыдущего дня, недели, месяца? Это возможно реализовать? Как пример эта задача уже реализована на сервисе tradingview

Alexey Viktorov
8022
Alexey Viktorov  
Как максимум за час пишется индикатор и всё показывает.
Bakhytzhan Abzalbekov
1659
Bakhytzhan Abzalbekov  

Вот держите, удалил все лишнее из советника, оставил только отображение уровней. Переменная TimeFrame задает период графика, откуда тянутся уровни. Не идеально, но как работающий пример пойдет

#property copyright "Copyright 2016, x.ru."
#property link      "https://www..ru"
#property version   "1.00"
#property strict

input int      TimeFrame=60;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double Dmax,Dmin;
   static datetime ObjT=0;
   datetime TempT;
   Dmax=iHigh(Symbol(),0,1);
   Dmin=iLow(Symbol(),0,1);
   TempT=iTime(NULL,0,1);
   if(ObjT!=TempT && ObjT!=0)
      {ObjectDelete("LevelUp");
       ObjectDelete("LevelDown");}
   if(ObjT!=TempT)
      {
       ObjectCreate("LevelUp", OBJ_HLINE, 0, 0, Dmax);
       ObjectSet("LevelUp", OBJPROP_PRICE1, Dmax);
       ObjectSet("LevelUp", OBJPROP_COLOR, clrOrchid);
       ObjectSet("LevelUp", OBJPROP_STYLE, 2);
       ObjectSet("LevelUp", OBJPROP_WIDTH, 1);
       ObjectCreate("LevelDown", OBJ_HLINE, 0, 0, Dmin);
       ObjectSet("LevelDown", OBJPROP_PRICE1, Dmin);
       ObjectSet("LevelDown", OBJPROP_COLOR, clrOrchid);
       ObjectSet("LevelDown", OBJPROP_STYLE, 2);
       ObjectSet("LevelDown", OBJPROP_WIDTH, 1);
       WindowRedraw();
       ObjT=TempT;
      }
  }
Bakhytzhan Abzalbekov
1659
Bakhytzhan Abzalbekov  

Упс, вот эти строки нужно вставить вместо, аналогичных но неправильных)))

 

   Dmax=iHigh(Symbol(),TimeFrame,1);
   Dmin=iLow(Symbol(),TimeFrame,1);
Svinauh
80
Svinauh  
Bakhytzhan Abzalbekov:

Упс, вот эти строки нужно вставить вместо, аналогичных но неправильных)))

 

А куда всё это вставлять? Я наживаю F4 появляется Metaeditor, а что дальше делать? У меня круглые глаза я вообще ничего понять не могу. Помогите пожалуйста. 
Svinauh
80
Svinauh  
Bakhytzhan Abzalbekov:

Упс, вот эти строки нужно вставить вместо, аналогичных но неправильных)))

 

Выдает 17 ошибок компиляции.
Bakhytzhan Abzalbekov
1659
Bakhytzhan Abzalbekov  

Это код MQL4 для MetaTrader 4. Ошибок компиляции не должно быть.

Приложенный файл нужно сохранить в каталог советников терминала (у меня вот так K:\******\MQL4\Experts). И скомпилировать в MetaEditor. Затем в терминале MetaTrader открыть нужный Вам график и прикрепить к нему советника с этим именем. В параметрах советника указать в минутах переменную TimeFrame, например для дневки это будет 1440.

Файлы:
Level.mq4 2 kb
Vladimir Zubov
4440
Vladimir Zubov  
Svinauh:
Выдает 17 ошибок компиляции.

Откуда у вас ошибки ?

 

 

Файлы:
levels.mq4 2 kb
Alexey Viktorov
8022
Alexey Viktorov  

Зачем-же такое делать советником? А если надо будет на один график нанести 2-3 старших ТФ?

Вот индикатор.

/********************************************************************\
                                               LevelSeniorPeriod.mq4 |
                                            Copyright 2016, Viktorov |
                                                      v4forex@qip.ru |
\********************************************************************/
#property copyright "Copyright 2016, Viktorov"
#property link      "v4forex@qip.ru"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1  clrGreen
#property indicator_color2  clrRed

string tfr(int p)
{
 switch(p)
  {
   case PERIOD_CURRENT: return("PERIOD_CURRENT");
   case PERIOD_M1: return("PERIOD_M1");
   case PERIOD_M15: return("PERIOD_M15");
   case PERIOD_M30: return("PERIOD_M30");
   case PERIOD_H1: return("PERIOD_H1");
   case PERIOD_H4: return("PERIOD_H4");
   case PERIOD_D1: return("PERIOD_D1");
   case PERIOD_W1: return("PERIOD_W1");
   case PERIOD_MN1: return("PERIOD_MN1");
  }
 return("PERIOD_CURRENT");
}

input ENUM_TIMEFRAMES period = PERIOD_D1;  // Выбери период
ENUM_TIMEFRAMES per;
double   levelHigh[];
double   levelLow[];
/**************Custom indicator initialization function**************/
int OnInit()
{
 per = period <= PERIOD_CURRENT ? PERIOD_CURRENT : period;
   SetIndexBuffer(0, levelHigh);
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0, 115);
   SetIndexLabel(0, tfr(per)+" High");
   SetIndexBuffer(1, levelLow);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexArrow(1, 115);
   SetIndexLabel(1, tfr(per)+" Low");
   IndicatorDigits(_Digits);
   return(INIT_SUCCEEDED);
}/*******************************************************************/

/****************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[])
{
 MqlRates arr0[1], arrT[1];
  int s = 0, copied, limit = prev_calculated == 0 ? rates_total-prev_calculated-2 : rates_total-prev_calculated;
   for(int i = limit; i >= 0; i--)
    {
     copied = CopyRates(_Symbol, PERIOD_CURRENT, i, 1, arrT);
      copied = CopyRates(_Symbol, per, arrT[0].time, 1, arr0);
       levelHigh[i] = arr0[0].high;
        levelLow[i] = arr0[0].low;
        
       if(levelHigh[i] != levelHigh[i+1] || levelLow[i] != levelLow[i+1])
        {
         s = int(arrT[0].time/PeriodSeconds() - arr0[0].time/PeriodSeconds());
          for(int j = s; j >= 0; j--)
           {
            copied = CopyRates(_Symbol, PERIOD_CURRENT, j, 0, arrT);
             copied = CopyRates(_Symbol, per, arrT[0].time, 1, arr0);
              levelHigh[j] = arr0[0].high;
             levelLow[j] = arr0[0].low;
           }
        }
    }

   return(rates_total);
}/*******************************************************************/


На этом скрине 2 индикатора PERIOD_H4 и PERIOD_D1



Файлы:
NightTrader
101
NightTrader  

Может вы знаете как  бы еще сделать выбор таймфреймов в самом индикаторе, чтобы можно было выбрать какие уровни каких периудов выводить ?

Хотя так удобно получилось,  вполне юзабельно  !!!

Alexey Viktorov
8022
Alexey Viktorov  
Это в смысле "Мы не ищем простых, лёгких путей"?
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий