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

Рейтинг 2156



РЕКОМЕНДУЮ



АТР

Здравствуйте, прождал целый почти месяц чтобы заного сделать заказ( прошу использовать мой заказ, как заказ на новый месяц)
Что нужно:
Сократить код можно больше, без повторяющих элементов.

//+------------------------------------------------------------------+
//|                                                       ATRGod.mq4 |
//|                                              Copyright 2018, AM2 |
//|                                      http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link      "http://www.forexsyatems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

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

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string nm,string text,int x,int y)
 
{
   
ObjectDelete(0,nm);
//--- создадим текстовую метку
   
ObjectCreate(0,nm,OBJ_LABEL,0,0,0);
//--- установим координаты метки
   
ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,x);
   
ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,nm,OBJPROP_CORNER,1);
//--- установим текст
   
ObjectSetString(0,nm,OBJPROP_TEXT,text);
//--- установим шрифт текста
   
ObjectSetString(0,nm,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   
ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,12);
//--- установим цвет
   
ObjectSetInteger(0,nm,OBJPROP_COLOR,Red);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double atr(int year)
 
{
   
int at=0;
   
int shift=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-1))));

   
for(int i=shift;i<12;i++)
     
{
      at
+=(int)((iHigh(NULL,PERIOD_MN1,i)-iLow(NULL,PERIOD_MN1,i))/_Point);
     
}
   
return(at/12*year);
 
}
//+------------------------------------------------------------------+
//| 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[])
 
{
//---
   
int shift1=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-1))));
   
int shift2=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-2))));
   
int shift3=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-3))));
   
int shift4=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-4))));
   
int shift5=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-5))));
   
int shift6=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-6))));
   
int shift7=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-7))));
   
int shift8=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-8))));
   
int shift9=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-9))));
   
int shift10=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-10))));
   
   
double lo1=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift1));
   
double lo2=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift2));
   
double lo3=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift3));
   
double lo4=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift4));
   
double lo5=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift5));
   
double lo6=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift6));
   
double lo7=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift7));
   
double lo8=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift8));
   
double lo9=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift9));
   
double lo10=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift10));

   
double hi1=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift1));
   
double hi2=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift2));
   
double hi3=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift3));
   
double hi4=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift4));
   
double hi5=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift5));
   
double hi6=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift6));
   
double hi7=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift7));
   
double hi8=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift8));
   
double hi9=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift9));
   
double hi10=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift10));
   
//Это не нужно просто вывел чтобы посмотреть точные ли данные, Андрей удалите
   
PutLabel("L31","LOW LAST YEAR: "+(string)(lo1),450,50);
   
PutLabel("L32","LOW LAST YEAR: "+(string)(lo2),450,70);
   
PutLabel("L33","LOW LAST YEAR: "+(string)(lo3),450,90);
   
PutLabel("L34","LOW LAST YEAR: "+(string)(lo4),450,110);
   
PutLabel("L35","LOW LAST YEAR: "+(string)(lo5),450,130);
   
PutLabel("L36","LOW LAST YEAR: "+(string)(lo6),450,150);
   
PutLabel("L37","LOW LAST YEAR: "+(string)(lo7),450,170);
   
PutLabel("L38","LOW LAST YEAR: "+(string)(lo8),450,190);
   
PutLabel("L39","LOW LAST YEAR: "+(string)(lo9),450,210);
   
PutLabel("L30","LOW LAST YEAR: "+(string)(lo10),450,230);

   
PutLabel("L41","HIGH LAST YEAR: "+(string)(hi1),200,70);
   
PutLabel("L42","HIGH LAST YEAR: "+(string)(hi2),200,90);
   
PutLabel("L43","HIGH LAST YEAR: "+(string)(hi3),200,110);
   
PutLabel("L44","HIGH LAST YEAR: "+(string)(hi4),200,130);
   
PutLabel("L45","HIGH LAST YEAR: "+(string)(hi5),200,150);
   
PutLabel("L46","HIGH LAST YEAR: "+(string)(hi6),200,170);
   
PutLabel("L47","HIGH LAST YEAR: "+(string)(hi7),200,190);
   
PutLabel("L48","HIGH LAST YEAR: "+(string)(hi8),200,210);
   
PutLabel("L49","HIGH LAST YEAR: "+(string)(hi9),200,230);
   
PutLabel("L40","HIGH LAST YEAR: "+(string)(hi10),200,250);
//Это не нужно просто вывел чтобы посмотреть точные ли данные, Андрей удалите
   
//PutLabel("ATR YEAR to 10YEARS:","ATR YEAR"+(string)(((hi1-lo1)+(hi2-lo2)+(hi3-lo3)+(hi4-lo4)+(hi5-lo5)+(hi6-lo6)+(hi7-lo7)+(hi8-lo8)+(hi9-lo9)+(hi10-lo10)/10)),650,250);
   
double ATR_YEARSS=(((hi1-lo1)+(hi2-lo2)+(hi3-lo3)+(hi4-lo4)+(hi5-lo5)+(hi6-lo6)+(hi7-lo7)+(hi8-lo8)+(hi9-lo9)+(hi10-lo10)/10));

   
//Тут не умноженное число
   
//PutLabel("ATR YEAR to 10YEARS1:","ATR YEAR "+(string)ATR_YEARSS,750,200);
   
//не знаю как написать правильно, хочу получить не 1.8.... а чтобы было без точки целое число, но мне кажется это глупо так умножать...
PutLabel("ATR YEAR to 10YEARS:","ATR YEAR "+(string)(ATR_YEARSS*100000),650,250);
 
//--- return value of prev_calculated for next call
   
return(rates_total);
 
}
//+------------------------------------------------------------------+
  • 0
  • Просмотров: 1743
  • 29 мая 2018, 14:55
  • vebster
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
индикатор линий фибоначи
29 мая 2018
30 мая 2018

Брокер для ваших роботов, 15 лет на рынке

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

0
посмотрю в четверг
avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 29 мая 2018, 17:53
0
благодарю, буду ждать!
avatar

  6  vebster Автор Сообщений: 205

  • 29 мая 2018, 18:33
0

//не знаю как написать правильно, хочу получить не 1.8.... а чтобы было без точки целое число, но мне кажется это глупо так умножать...
   
PutLabel("ATR YEAR to 10YEARS:","ATR YEAR "+(string)((int)ATR_YEARSS),650,250);



а это:


   
int shift1=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-1))));
   
int shift2=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-2))));
   
int shift3=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-3))));
   
int shift4=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-4))));
   
int shift5=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-5))));
   
int shift6=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-6))));
   
int shift7=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-7))));
   
int shift8=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-8))));
   
int shift9=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-9))));
   
int shift10=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-10))));

   
double lo1=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift1));
   
double lo2=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift2));
   
double lo3=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift3));
   
double lo4=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift4));
   
double lo5=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift5));
   
double lo6=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift6));
   
double lo7=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift7));
   
double lo8=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift8));
   
double lo9=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift9));
   
double lo10=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift10));

   
double hi1=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift1));
   
double hi2=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift2));
   
double hi3=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift3));
   
double hi4=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift4));
   
double hi5=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift5));
   
double hi6=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift6));
   
double hi7=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift7));
   
double hi8=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift8));
   
double hi9=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift9));
   
double hi10=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift10));

   
double ATR_YEARSS=(((hi1-lo1)+(hi2-lo2)+(hi3-lo3)+(hi4-lo4)+(hi5-lo5)+(hi6-lo6)+(hi7-lo7)+(hi8-lo8)+(hi9-lo9)+(hi10-lo10)/10));


можно так примерно записать:


   
for(int i=1;i<11;i++)
     
{
     
double atr=0;
     
int shift=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-i))));
     
double lo=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift));
     
double hi=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift));
      atr
+=(hi-lo);
     
}
avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 30 мая 2018, 18:45
+
0
Спасибо Андрей, могли бы вы написать как вывести это всё:
PutLabel("L1","ATR 10 YEARS: "+(string)atr,200,10);
не получается(
avatar

  6  vebster Автор Сообщений: 205

  • 31 мая 2018, 18:11
0
что конкретно не получается?
avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 31 мая 2018, 19:13
+
0



//+------------------------------------------------------------------+
//|                                                       ATRGod.mq4 |
//|                                              Copyright 2018, AM2 |
//|                                      http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link      "http://www.forexsyatems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

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

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string nm,string text,int x,int y)
 
{
   
ObjectDelete(0,nm);
//--- создадим текстовую метку
   
ObjectCreate(0,nm,OBJ_LABEL,0,0,0);
//--- установим координаты метки
   
ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,x);
   
ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,nm,OBJPROP_CORNER,0);
//--- установим текст
   
ObjectSetString(0,nm,OBJPROP_TEXT,text);
//--- установим шрифт текста
   
ObjectSetString(0,nm,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   
ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,12);
//--- установим цвет
   
ObjectSetInteger(0,nm,OBJPROP_COLOR,Red);
 
}
//+------------------------------------------------------------------+
//| 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 atr=0;

   
for(int i=1;i<years+1;i++)
     
{
     
int shift=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-i))));
     
double lo=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift));
     
double hi=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift));
      atr
+=(hi-lo)/_Point;
     
}

   
PutLabel("L","ATR: "+(string)(int)(atr/years),20,25);

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

avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 31 мая 2018, 19:26
комментарий был удален 2018-06-01 15:49:10 vebster

+
0
у меня в пунктах посчитано число
avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 1 июня 2018, 15:49
0
Спасибо Андрей, разобрался)))) не зря 2 месяца ждал) так и нужно)
avatar

  6  vebster Автор Сообщений: 205

  • 1 июня 2018, 15:49
0
(hi10-lo10)/10)


вот здесь что вы делите на 10? последний диапазон? когда надо делить сумму
avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 1 июня 2018, 16:18
+
0
Вариант с более простой распринтовкой:




//+------------------------------------------------------------------+
//|                                                       ATRGod.mq4 |
//|                                              Copyright 2018, AM2 |
//|                                      http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link      "http://www.forexsyatems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

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

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string nm,string text,int x,int y)
 
{
   
ObjectDelete(0,nm);
//--- создадим текстовую метку
   
ObjectCreate(0,nm,OBJ_LABEL,0,0,0);
//--- установим координаты метки
   
ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,x);
   
ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,nm,OBJPROP_CORNER,0);
//--- установим текст
   
ObjectSetString(0,nm,OBJPROP_TEXT,text);
//--- установим шрифт текста
   
ObjectSetString(0,nm,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   
ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,12);
//--- установим цвет
   
ObjectSetInteger(0,nm,OBJPROP_COLOR,Red);
 
}
//+------------------------------------------------------------------+
//| 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 atr=0;
   
string s="";

   
for(int i=1;i<years+1;i++)
     
{
     
int shift=iBarShift(NULL,PERIOD_MN1,StringToTime("31"+".12."+(string(Year()-i))));
     
double lo=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,12,shift));
     
double hi=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,12,shift));
      s
+="\n Hi"+(string)i+": "+(string)hi+"\n Lo"+(string)i+": "+(string)lo;
      atr
+=(hi-lo)/_Point;
     
}

   
PutLabel("L","ATR: "+(string)(int)(atr/years),20,25);
   
Comment("\n","\n","\n",s);

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

avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 1 июня 2018, 16:20
0
Спасибо огромнейшее!!! Спасибо!
avatar

  6  vebster Автор Сообщений: 205

  • 10 июня 2018, 09:46

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