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

Рейтинг 2089



РЕКОМЕНДУЮ



Доработка индюка спустя 3 года

Добрый ночи, Андрей, прошу вас доработать ваш же индикатор, который вы делали почти 3года назад ТЫК, ибо я запутался и мне не хватает опыта его доделать

На основе вашего индикатора я вывел зоны — АТР текущего квартала(средний ход квартала, на основе исторических данных)

пример постройки верхней зоны текущего квартала:
Находим среднее арифметическое значение -> LOW за 10(например) кварталов
Находим средний ATR -> (HIGH — LOW)/10
Далее, от лоу + Атр = наша верхняя зона текущего квартала

и так:
1) при попытке поставить код в из Oninit в Oncalculator(дабы значения атр, хай и лоу менялись) — при каждом вызове(нажатии на кнопку) меняется расположение зоны
2) Прошу вас добавить историю зон(пример снизу)
Чтобы для каждого предыдущего квартала были данные соответствовавшие предыдущим данным

3) Убрать лишнее(если есть) или упростить
4) Прощу по возможности прокомментировать сложные(непонятные участки кода)
MMB_1.ex4 (13 Kb)
MMB_1.mq4 (12 Kb)

P.S Если я правильно понимаю, данные те что в Oninit должны быть в OnChartEvent(для первой постройки) и в Oncalculator(дабы данные менялись).
Прошу вас помочь мне — выполнив заказ.
Спасибо

Если не загрузится, код ниже

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

extern int     ATR     = 10;              //  Кол-во кварталов для расчета
int sum=0;
datetime t1kv2=0,t2kv2=0;
double hi=0,lo=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
      PutButton("BUTON",33,33,"BUTON");
      
      
//---------------------------Код должен быть в OnCalculator дабы постоянно обновлялся при смене месяца(например)
   t1kv2=iTime(NULL,PERIOD_MN1,Shift(Month())-1);
   t2kv2=t1kv2+60*60*24*91.25; // тут изначально было:   60*60*24*90(правильно ли? прошу перепроверить)

   lo=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,Shift(Month()),0));
   hi=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,Shift(Month()),0));

   for(int ikv=0;ikv<ATR;ikv++)
     {
      double lokv=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,3,Shift(Month())+ikv*3));
      double hikv=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,3,Shift(Month())+ikv*3));
      int pokv=(int)((hikv-lokv)/_Point);

      datetime t1kv=iTime(NULL,PERIOD_MN1,Shift(Month())-1+3*ikv);
      datetime t2kv=iTime(NULL,PERIOD_MN1,Shift(Month())-1+3*(ikv+1));

      sum+=pokv;
     }
//---------------------------Код должен быть в OnCalculator дабы постоянно обновлялся при смене месяца(например)
      
//---
   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[])
  {
//---


//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {
  
   if (id == CHARTEVENT_OBJECT_CLICK) {
         if (sparam == "BUTON") {
            if(ObjectGetInteger(0,"BUTON",OBJPROP_STATE)==true) {
                  PutRect("h",t1kv2,lo+(sum/ATR)*_Point,t2kv2,lo+(sum/ATR)*0.9*_Point,Green);
                  PutRect("l",t1kv2,hi-(sum/ATR)*_Point,t2kv2,hi-(sum/ATR)*0.9*_Point,Green);
               }
               else
               {
                  ObjectDelete("h");
                  ObjectDelete("l");
   
               }
            }   
        }

  }

int Kvart(int month)
  {
   int kv=0;
   if(month<4) kv=1; // 1 2 3
   if(month>3 && month<7) kv=2; // 4 5 6
   if(month>6 && month<10) kv=3; // 7 8 9
   if(month>9) kv=4; // 10 11 12
   return(kv);
  }

   
int Shift(int month) // 1-rv = 1 2 3
  {
   int shift=0;

   if(Kvart(Month())==1 && Month()==1) shift=1;
   if(Kvart(Month())==1 && Month()==2) shift=2;
   if(Kvart(Month())==1 && Month()==3) shift=3;

   if(Kvart(Month())==2 && Month()==4) shift=1;
   if(Kvart(Month())==2 && Month()==5) shift=2;
   if(Kvart(Month())==2 && Month()==6) shift=3;

   if(Kvart(Month())==3 && Month()==7) shift=1;
   if(Kvart(Month())==3 && Month()==8) shift=2;
   if(Kvart(Month())==3 && Month()==9) shift=3;

   if(Kvart(Month())==4 && Month()==10) shift=1;
   if(Kvart(Month())==4 && Month()==11) shift=2;
   if(Kvart(Month())==4 && Month()==12) shift=3;
   return(shift);
  }
  

void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr)
  {
   ObjectDelete(0,name);
//--- создадим прямоугольник по заданным координатам
   ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2);
//--- установим цвет прямоугольника
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
       //--- установим стиль линий прямоугольника 
ObjectSetInteger(0,name,OBJPROP_STYLE,1); 
       //--- установим толщину линий прямоугольника 
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
       //--- включим (true) или отключим (false) режим заливки прямоугольника 
ObjectSetInteger(0,name,OBJPROP_BACK,true);  
         //--- включим asdad
ObjectSetInteger(0,name, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0,name, OBJPROP_HIDDEN, true);
  }
  
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,0);
  }
  • 0
  • Просмотров: 1819
  • 5 июля 2022, 00:44
  • lafler356
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Заменить индикатор в рабочем советнике.
Следующая запись в группе  
Переделать индикатор MT4 на MT5
05 июля 2022
06 июля 2022

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

+
0
Интересно!
avatar

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

  • 5 июля 2022, 04:05
+
0
не берусь
avatar

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

  • 5 июля 2022, 20:20
+
0
Андрей могли бы вы пояснить почему не беретесь? может мне стоит как то упростить или четче написать ТЗ? Что нужно чтобы вы выполнили заказ?
Спасибо
avatar

  9  lafler356 Автор Сообщений: 305

  • 6 июля 2022, 08:42
+
0
А что не устраивает в текущей версии? Хай/Лоу поквартально отрисовывает, диапазон численно обозначает.
Что еще нужно?
avatar

  16  ssg Сообщений: 817

  • 6 июля 2022, 10:17
+
0
АТР, дело в нём! Тут рассчитано только сумма(её если разделить на Count как в примере, тогда получится ТЕКУЩИЙ. А то что полосками это просто хай-лоу

А нужуно чтобы расчет был постоянно за 5 месяцев, т.е хай(последних 5 кверталов) — лоу(последних 5 кверталов) / 5(последних 5 кверталов)
Редактирован: 6 июля 2022, 11:20
avatar

  9  lafler356 Автор Сообщений: 305

  • 6 июля 2022, 11:18
+
0
Да, умеете вы изъясняться и тз. составлять.Поэтому так-же и пытаетесь их решать.Такого нагородили…
Правда похвально, что что-то пытаетесь сделать.Это конечно хорошо.
У в индикаторе Андрея, что он писал для вас, уже все есть.
Всего надо добавить одну маленькую строчку.
У вас есть атр каждого квартала.Да, да атр квартала это расстояние между полосками хай-лоу.Вот и складывайте их и затем делите на кол-во кварталов.
И все…

//+------------------------------------------------------------------+
//|                                                      Kvartal.mq4 |
//|                                              Copyright 2019, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
/*
http://zakaz.opentraders.ru/49318.html

готово: www.opentraders.ru/downloads/2203/
*/
#property copyright "Copyright 2019, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

input int count=5;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ObjectsDeleteAll();
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kvart(int month)
  {
   int kv=0;
   if(month<4) kv=1; // 1 2 3
   if(month>3 && month<7) kv=2; // 4 5 6
   if(month>6 && month<10) kv=3; // 7 8 9
   if(month>9) kv=4; // 10 11 12
   return(kv);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Shift(int month) // 1-rv = 1 2 3
  {
   int shift=0;

   if(Kvart(Month())==1 && Month()==1) shift=1;
   if(Kvart(Month())==1 && Month()==2) shift=2;
   if(Kvart(Month())==1 && Month()==3) shift=3;

   if(Kvart(Month())==2 && Month()==4) shift=1;
   if(Kvart(Month())==2 && Month()==5) shift=2;
   if(Kvart(Month())==2 && Month()==6) shift=3;

   if(Kvart(Month())==3 && Month()==7) shift=1;
   if(Kvart(Month())==3 && Month()==8) shift=2;
   if(Kvart(Month())==3 && Month()==8) shift=3;

   if(Kvart(Month())==4 && Month()==10) shift=1;
   if(Kvart(Month())==4 && Month()==11) shift=2;
   if(Kvart(Month())==4 && Month()==12) shift=3;

   return(shift);
  }
//+------------------------------------------------------------------+
//| Put Text Function                                                |
//+------------------------------------------------------------------+
void Text(string name,const string text,double price,datetime time,const color clr)
  {
   ObjectDelete(0,name);
//--- create a "Text" object 
   ObjectCreate(0,name,OBJ_TEXT,0,time,price);
//--- set the text
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- set the font of the text
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- set the font size
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,14);
//--- set the method binding
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_UPPER);
//--- set the color
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,2);
//--- включим (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[])
  {
//---
   int sum=0;
   double hi=0,lo=0;
   datetime t1=0,t2=0;

   for(int i=0;i<count;i++)
     {
      lo=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,3,Shift(Month())+i*3));
      hi=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,3,Shift(Month())+i*3));
      int po=(int)((hi-lo)/_Point);

      t1=iTime(NULL,PERIOD_MN1,Shift(Month())-1+3*i);
      t2=iTime(NULL,PERIOD_MN1,Shift(Month())-1+3*(i+1));

      PutTrendLine((string)i+"lo",t1,lo,t2,lo,Aqua);
      PutTrendLine((string)i+"hi",t1,hi,t2,hi,Aqua);
      Text(string(i),(string)po,lo,(t1+t2)/2,Red);
      sum+=po;
     }

   t1=iTime(NULL,PERIOD_MN1,Shift(Month())-1);
   t2=t1+60*60*24*90;

   lo=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,Shift(Month()),0));
   hi=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,Shift(Month()),0));

   PutTrendLine("lo",t1,lo,t2,lo,Aqua);
   PutTrendLine("hi",t1,hi,t2,hi,Aqua);

   Comment("\n Kvartal: ",Kvart(Month()),
           "\n Month: ",Month(),
           "\n Summ: ",sum,
           "\n ATR за   " +count+ " квартолов: ",sum/count,
           "\n Shift: ",Shift(Month()));

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


Для интереса проверьте значение индикатора потом с калькулятором.
avatar

  16  ssg Сообщений: 817

  • 6 июля 2022, 13:54
+
0
Спасибо конечно но что вы сделали?*???

это все было в индикаторе изначально, вы просто сумму всех поделали на кол-во периудов!!! и всё

тобишь сейчас известно только атр текущего кварталоа, а предыдущих нет!
avatar

  9  lafler356 Автор Сообщений: 305

  • 6 июля 2022, 19:18
+
0
атр в вашем понимании это сколько пройдёт расстояние от хая до лоу ?))))

атр = (хай(предыдущих 5) -лоу(предыдущих 5)) / 5
avatar

  9  lafler356 Автор Сообщений: 305

  • 6 июля 2022, 19:20
+
0
атр2=((хай2-лоу2)+(хай1-лоу1))/2;
avatar

  16  ssg Сообщений: 817

  • 6 июля 2022, 21:02
+
0
А по вашему это нечто иное?
www.mql5.com/ru/code/7807
Технический индикатор Средний Истинный Диапазон (Average True Range, ATR) — это показатель волатильности рынка. Его ввел Уэллс Уайлдер в книге «Новые концепции технических торговых систем» и с тех пор индикатор применяется как составляющая многих других индикаторов и торговых систем.
Индикатор Average True Range часто достигает высоких значений в основаниях рынка после стремительного падения цен, вызванного паническими продажами. Низкие значения индикатора часто соответствуют продолжительным периодам горизонтального движения, которые наблюдаются на вершинах рынка и во время консолидации. Его можно интерпретировать по тем же правилам, что и другие индикаторы волатильности. Принцип прогнозирования с помощью Average True Range формулируется так: чем выше значение индикатора, тем выше вероятность смены тренда; чем ниже его значение, тем слабее направленность тренда.

Расчет
Истинный диапазон (True Range) есть наибольшая из следующих трех величин:

разность между текущими максимумом и минимумом;

разность между предыдущей ценой закрытия и текущим максимумом;

разность между предыдущей ценой закрытия и текущим минимумом.

Индикатор Среднего Истинного Диапазона (Average True Range, ATR) представляет собой скользящее среднее значений истинного диапазона.

Ну, если у Вас есть свои любимые авторы...?
avatar

  16  ssg Сообщений: 817

  • 6 июля 2022, 20:57
+
0

//+------------------------------------------------------------------+
//|                                                          ATR.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property description "Average True Range"
#property strict

//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1  DodgerBlue
//--- input parameter
input int InpAtrPeriod=14; // ATR Period
//--- buffers
double ExtATRBuffer[];
double ExtTRBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   string short_name;
//--- 1 additional buffer used for counting.
   IndicatorBuffers(2);
   IndicatorDigits(Digits);
//--- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtATRBuffer);
   SetIndexBuffer(1,ExtTRBuffer);
//--- name for DataWindow and indicator subwindow label
   short_name="ATR("+IntegerToString(InpAtrPeriod)+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- check for input parameter
   if(InpAtrPeriod<=0)
     {
      Print("Wrong input parameter ATR Period=",InpAtrPeriod);
      return(INIT_FAILED);
     }
//---
   SetIndexDrawBegin(0,InpAtrPeriod);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Average True Range                                               |
//+------------------------------------------------------------------+
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 i,limit;
//--- check for bars count and input parameter
   if(rates_total<=InpAtrPeriod || InpAtrPeriod<=0)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtATRBuffer,false);
   ArraySetAsSeries(ExtTRBuffer,false);
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
//--- preliminary calculations
   if(prev_calculated==0)
     {
      ExtTRBuffer[0]=0.0;
      ExtATRBuffer[0]=0.0;
      //--- filling out the array of True Range values for each period
      for(i=1; i<rates_total; i++)
         ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      //--- first AtrPeriod values of the indicator are not calculated
      double firstValue=0.0;
      for(i=1; i<=InpAtrPeriod; i++)
        {
         ExtATRBuffer[i]=0.0;
         firstValue+=ExtTRBuffer[i];
        }
      //--- calculating the first value of the indicator
      firstValue/=InpAtrPeriod;
      ExtATRBuffer[InpAtrPeriod]=firstValue;
      limit=InpAtrPeriod+1;
     }
   else
      limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit; i<rates_total; i++)
     {
      ExtTRBuffer[i]=MathMax(high[i],close[i-1])-MathMin(low[i],close[i-1]);
      ExtATRBuffer[i]=ExtATRBuffer[i-1]+(ExtTRBuffer[i]-ExtTRBuffer[i-InpAtrPeriod])/InpAtrPeriod;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
avatar

  16  ssg Сообщений: 817

  • 6 июля 2022, 20:57
+
0
Простите меня, наверное я не правильно выразился, мне нужно чтобы постоянно было известно атр за 5 кварталов, а не хай-лоу за текущий
Я создал новую ветку, и упростил ТЗ
ТЫК
Редактирован: 6 июля 2022, 21:15
avatar

  9  lafler356 Автор Сообщений: 305

  • 6 июля 2022, 21:14
+
0
Проехали. Просто многие проблемы возникают от неправильной или вольной трактовки терминов, и как следствие недопонимание друг друга.
При периоде атр = 1, это как раз и будет разница между хай и лоу текущего периода.
Та строка которую я добавил в советнике в комментариях и показывает атр за последние 5 (input int count=5;)  кварталов.Закроется текущий квартал, индикатор пересчитает значения.Отбросит значение самого старого квартала и добавит значение только что закончившегося квартала.Текущий, нулевой квартал не учитывается.
avatar

  16  ssg Сообщений: 817

  • 6 июля 2022, 21:34
+
0
да, как я и писал ранее, известно только текущий атр за последние 5 кварталов, как я и сделав это в индикаторе выше,
Теперь же прошу Андрея, дописать его, дабы было известно и последних 5 кварталов
avatar

  9  lafler356 Автор Сообщений: 305

  • 6 июля 2022, 21:43
+
0
известно только текущий атр за последние 5 кварталов


Теперь же прошу Андрея, дописать его, дабы было известно и последних 5 кварталов

Переведите.
avatar

  16  ssg Сообщений: 817

  • 7 июля 2022, 04:27
+
0
мне нужно знать среднее значение, среднее значение выводится за 5(например) последних кварталов) потом делится на 5 и получается для последнего квартала среднее значение.
ЧТобы посчитать предпоследнее значение нужно сделать тоже самое только со сдвигом. Как вы писали выше

Среднее значение — значение за N кварталов
avatar

  9  lafler356 Автор Сообщений: 305

  • 7 июля 2022, 07:54
+
0
мне нужно знать среднее значение, среднее значение выводится за 5(например) последних кварталов) потом делится на 5 и получается для последнего квартала среднее значение.



"\n ATR за   " +count+ " кварталов: ",sum/count,
"\n ATR lafler356 : ",(sum/count)/count,

avatar

  16  ssg Сообщений: 817

  • 7 июля 2022, 08:00
+
0
avatar

  9  lafler356 Автор Сообщений: 305

  • 7 июля 2022, 10:14
+
0
Да… Попробуйте привести пример в числах и ценах.Пока я ничего не понимаю, а значит не смогу ничем помочь.
avatar

  16  ssg Сообщений: 817

  • 7 июля 2022, 12:40
+
0
Смотрите, мы знаем хай и лоу последних 5 кварталов! от них будет либо + либо — атр и получится зона верхняя либо нижняя, тут думаю всё понятно.

далее, самая проблема это узнать АТР, чтобы узнать средний атр для текущего квартала(для текущего потому что в расчете будут 5 последних ((хай5-лоу5)+(хай4-лоу4)+(хай3-лоу3)+(хай2-лоу2)+(хай1-лоу1))(/5(так как мы складывали 5 (хай-лоу)) )
далее, как только мы узнали это, это как раз сумма (та что в индикаторе) её если поделить на Count тогда получится Средний АТр НО!!! Средний АТР ТЕКУЩЕГО квартала (почему текущего? потому что мы ближайшие 5хаи и 5лоу складывали

Проблема возникаем у меня в том что я не знаю как сделать цикл в цикле что ли))))
Смотрите, вот (если я правильно смог донести смысл) тогда мы знаем Средний атр квартала для текущего квартала, но нужно найти так же и остальные Средние атр кварталов для предыдущих кварталов(ПРОСТИТ ЗА ТАФТОЛОГИЮ) короче… Для предыдущего квартала так же нужно в рассчете использовать 5 предыдущих кварталов, но так как мы сместились, нам нужно использовать не:
((хай5-лоу5)+(хай4-лоу4)+(хай3-лоу3)+(хай2-лоу2)+(хай1-лоу1))/5

а уже:
((хай6-лоу6)+(хай5-лоу5)+(хай4-лоу4)+(хай3-лоу3)+(хай2-лоу2))(/5
Редактирован: 7 июля 2022, 16:09
avatar

  7  divelse Сообщений: 152

  • 7 июля 2022, 16:02
+
0
а теперь на примере штатного атр, ставим период 5, и смотрим значение каждого (в примере) месяца


В этом примере не видно, но если присмотреться тут на 6 месяц и за 7 месяц
т.е разинца в месяце
Редактирован: 7 июля 2022, 16:10
avatar

  7  divelse Сообщений: 152

  • 7 июля 2022, 16:05
+
0
Вот пример по коду для месяца:

   for(int ip=1;ip<=5;ip++)
     {
      datetime t1=iTime(NULL,PERIOD_MN1,ip-1);
      datetime t2=iTime(NULL,PERIOD_MN1,ip);
      double HiMN1=iHigh(NULL,PERIOD_MN1,ip);
      double LoMN1=iLow(NULL,PERIOD_MN1,ip);
      double ATRMN1=(NormalizeDouble(iATR(NULL,PERIOD_MN1,5,ip)/_Point,0));

         if (sparam == "Button") {
               PutRect("MN1H"+(string)ip,t1,LoMN1+ATRMN1*_Point,t2,LoMN1+(ATRMN1*_Point)/100*90,Green);
               PutRect("MN1L"+(string)ip,t1,HiMN1-ATRMN1*_Point,t2,HiMN1-(ATRMN1*_Point)/100*90,Green);
            }
            else
            {
               DeleteByPrefix("MN1H");
               DeleteByPrefix("MN1L");
            }
     }
avatar

  7  divelse Сообщений: 152

  • 7 июля 2022, 16:58
+
0
Я вот тоже не могу никак понять эту математическую казуистику.
В крайнем случае напишите индикатор где через iCustom или просто через iATR берите данные на месячном периоде и их обрабатывайте.
Вот набросал вам вариант получения нужных вам данных:
<code>
//+------------------------------------------------------------------+
//|                            MTF_Average True Range  lafler356.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                          http://www.mункцql5.com |
//+------------------------------------------------------------------+

/*
  полный вызов индикатора нулевого (единственного) буфера на нулевом баре:
  double ind_ATR = iCustom(NULL,PERIOD_MN1,"MTF_Average True Range  lafler356",TimeFrame,per,MAType,0,0);
*/
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mункцql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 clrLime

extern ENUM_TIMEFRAMES TimeFrame= PERIOD_MN1;
extern int per=10;
extern int MAType=0;

double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1);
   SetIndexBuffer(0, ExtMapBuffer1);
//---
   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[])
  {
//---
    datetime TimeArray[];
   int    i,limit,y=0,counted_bars=IndicatorCounted();
   double PeriodHigh, PeriodLow;

   ArrayCopySeries(TimeArray,MODE_TIME,NULL,TimeFrame); 
   
   limit=Bars-counted_bars;
   for(i=0,i<limit;i++)
   {
      PeriodHigh = iMA(NULL,TimeFrame,per,0,MAType,PRICE_HIGH,i);
      PeriodLow = iMA(NULL,TimeFrame,per,0,MAType,PRICE_LOW,i);
      ExtMapBuffer1[i]= (PeriodHigh - PeriodLow)/_Point;
   } 
   return(rates_total);
  }
//+------------------------------------------------------------------+

</code>

<code>
значение атр текущего месяца:
double ind_ATR = iCustom(NULL,PERIOD_MN1,"MTF_Average True Range  lafler356",TimeFrame,1,MAType,0,0);
значение атр текущего квартала:
double ind_ATR = iCustom(NULL,PERIOD_MN1,"MTF_Average True Range  lafler356",TimeFrame,3,MAType,0,0);

</code>

Если опять что-то не так, или не сможете использовать, тогда я «умываю руки».


Редактирован: 7 июля 2022, 17:22
avatar

  16  ssg Сообщений: 817

  • 7 июля 2022, 17:15
+
0
avatar

  7  divelse Сообщений: 152

  • 7 июля 2022, 17:30
+
0
Переведите.;) 
avatar

  16  ssg Сообщений: 817

  • 7 июля 2022, 17:38
+
0
Спасибо что потратили на меня время, но… видимо слишком мало опыта, не смог разобрать, да и вообще не точно что нужно было. Но Всё равно Спасибо вам за потраченное на меня время!
avatar

  9  lafler356 Автор Сообщений: 305

  • 7 июля 2022, 17:31
+
0
Если бы вы огласили конечную цель использования, то возможно можно было бы найти иное решение. А так....*hi* 
avatar

  16  ssg Сообщений: 817

  • 7 июля 2022, 17:38
+
0
конечная цель? Зона поддержки и сопротивления на дальняк
avatar

  7  divelse Сообщений: 152

  • 7 июля 2022, 20:11
+
0
Вы серьёзно.....? Тем более при нынешней ситуации?:D 
avatar

  16  ssg Сообщений: 817

  • 8 июля 2022, 06:27
+
0
ну при таком подходе в форекс тогда не стоит вообще лесть)))
avatar

  9  lafler356 Автор Сообщений: 305

  • 8 июля 2022, 07:27
+
0
Каждый выбирает сам и способ торговли, и стратегию, и риски… И имеет на это полное право.
Но неужели вам нужно знать квартальный АТР для торговли на самом деле?
Вы собираетесь открыть позицию, терпеть убытки и ждать пока цена не пройдет все значение АТР за квартал?
Я понимаю это работает на бирже, с акциями.Там нет такой волотильности и возможен более менее долгосрочный прогноз.Типа:«Зимой мазут и газ подорожают».
Но на форексе…
На мой взгляд намного продуктивнее и прибыльнее торговать используя текущую тенденцию на рынке.Только представьте какие колебания цены внутри месяца или квартала.Да даже дня.А вы открыли позицию, ждали целый квартал, глядели как у вас растет и падает прибыль и в итоге закрылись с убытком.
Но выбор конечно за вами.Деньги же ваши.
avatar

  16  ssg Сообщений: 817

  • 8 июля 2022, 08:43
+
0
Согласен с вами, но эта часть стратегии на дальняк, и мне нужны это зоны, надеюсь Андрей или ктото))))) поможет всё же

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

напишите пожалуйста вы понимаете что мне нужно или всё же я не смог донести и до вас ТЗ?
Редактирован: 8 июля 2022, 20:20
avatar

  9  lafler356 Автор Сообщений: 305

  • 8 июля 2022, 19:49
+
0
Нет, я так и не понимаю что вам нужно.
Я написал вам индикатор, который показывает в виде баров в подокне графика АТР за любое кол-во баров на любом таймфрейме.
Вы всегда можете взять эти данные для работы или для советника.Вам этого для торговли не хватает.
Сейчас какая то новая «узкая» задач. Мне не интересно и не нужно решать кому-то такие вещи.
Всю стратегию вы не озвучиваете ни здесь ни в привате. Наверное очень ей дорожите и поэтому храните в секрете. И это ваше законное право.
Но это вы обратились сюда за помощью.
А отвлекаться на написание каких то кусочков я не хочу и не буду.
Если хотите что-бы я попытался вам помощь озвучьте всю задачу (или здесь или в привате).
Ну, а нет, тогда я искренне желаю вам успехов и удачи.
avatar

  16  ssg Сообщений: 817

  • 9 июля 2022, 11:21
+
0
да с чего вы взяли что я скрываю полностью ТЗ? моя9хотя она не моя) стратегия это торговля от уровней атр, Hi — atr = зона нижняя, lo + atr = верхняя зона, и таким образом по D1 две зоны, по W1 2 зоны и по mn1 2 зоны соответственно. А квартальные зоны я попросил ибо на дальняк видеть черезх сколько и где примерно приостановить продажу либо покупку, ибо квартальный такой уровень достоверней чем месячный. Вот и вся торговля))) в примере что я выложил, строятся 2 зоны квартальные, мне же не хватает еще истории
avatar

  9  lafler356 Автор Сообщений: 305

  • 10 июля 2022, 00:33
+
0
У нас с вами разное восприятие ситуации.Спорить с вами я не собираюсь, и не хочу, и не вижу темы спора, да и лень.Считайте, что я не верно выразился, если конечно так удобнее.Ещё раз повторяю: выше я для вас написал и дал код индикатора. Он полностью подходит по ваши задачи.Подумайте как вам его лучше использовать.Немного доработайте и он будет рисовать линии.Возьмите с него данные и в крайнем случае вручную нанесите зоны.Один раз в месяц это не трудно.
Или пусть советник их рисует.
К стати о восприятии: не знаю как до Урала, но у нас за Уралом в быту, однозначно, значение жаргонизма «дальняк» определяется как «отхожее место», «туалет», «сортир».
Видите сами какие мы разные.
Я использую в разговоре термины — долгосрочная торговля, долгосрочный прогноз.
Ну это так лирика.
Удачи.
avatar

  16  ssg Сообщений: 817

  • 10 июля 2022, 04:33
+
0
И еще, по секрету:
стратегия это торговля от уровней атр, Hi — atr = зона нижняя, lo + atr = верхняя зона


Hi — atr = зона нижняя = lo
а
lo + atr = верхняя зона = Hi

avatar

  16  ssg Сообщений: 817

  • 10 июля 2022, 04:36
+
0
Да как вы понять не можете что я использую не просто АТР(хай и лоу) а СРЕДНИЙ атр!!! вы так и не поняли о чем я))))
avatar

  9  lafler356 Автор Сообщений: 305

  • 12 июля 2022, 13:53
+
0
Средний атр ( это значит предыдущие (ХАЙ4-лоу4 + хай3 -лоу3 + хай2 -лоу2 + хай1 -лоу1) / кол-во, в данном случае это 4

теперь то понятно?))) я ведь помоему уже писал, а вы опять мне что:
Hi — atr = зона нижняя = lo, нет он не будет равняться LO
Редактирован: 12 июля 2022, 14:09
avatar

  9  lafler356 Автор Сообщений: 305

  • 12 июля 2022, 14:08
+
0
Хотелось бы понять: насколько сильно отклоняется текущее ATR от его среднего значения за год.
avatar

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

  • 13 июля 2022, 06:13

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