Напишу индикатор бесплатно - страница 137

 
Yurij Izyumov:

Напишу бесплатно индикатор на MQL4 на условиях свободного распространения - размещение в виде - бесплатный продукт на Маркет или код в CodeBase.

можно и на MQL5 , но предпочтение 4-ке - зависит от логики, желательно конечно хоть что то осмысленное. В теории можно и советник.

Естественно что задания типа  - хочу индикатор по волновой теории Эллиота - не рассматриваются =) , т.к. оцените объем работ и сами подумайте.

Если есть желание - пишите задание открыто.

Заранее продумывайте возможности - алерты, звуковые сигналы, уведомления на почту/телефон, стрелки , новости и т.п.

Здравствуйте, Юрий! Есть запрос на написание бесплатного индикатора на MQL4 для мт4. Ваше предложение ещё актуально ?
 
kif7 #:
Здравствуйте, Юрий! Есть запрос на написание бесплатного индикатора на MQL4 для мт4. Ваше предложение ещё актуально ?

Никто ничего тут бесплатно не пишет. Редкое исключение - это когда идея заинтересует потенциального разработчика.
Но как правило, у того кто способен что-то написать, идей на порядок больше чем у заказчиков.

Чтобы попытаться кого-то заинтересовать, нужно изложить концепцию.

 
kif7 #:
Здравствуйте, Юрий! Есть запрос на написание бесплатного индикатора на MQL4 для мт4. Ваше предложение ещё актуально ?

Мне писал индикаторы  чатжпт , или ИИ , бесплатно . Нормально работает .

 
Кому нужно написание бесплатного индикатора , используйте чатжпт , у меня все бесплатные .
 
kif7 #:
Здравствуйте, Юрий! Есть запрос на написание бесплатного индикатора на MQL4 для мт4. Ваше предложение ещё актуально ?
да, всё по предложению как написано - задание пишите открыто или личку сразу , я вас потом искать не буду , публикация индикатора в итоге в открытом доступе и по возможности что то осмысленное
 
Yurij Izyumov #:
да, всё по предложению как написано - задание пишите открыто или личку сразу , я вас потом искать не буду , публикация индикатора в итоге в открытом доступе и по возможности что то осмысленное

индикатор "period_overlay":

рисует оверлейный график по верх текущего графика в текущем таймфрейме,

от обычного оверлейного графика отличается тем что у него есть два параметра:

- период нулевой точки zero_point : день, неделя, месяц;

- кол-во периодов на которые нужно отрисовывать.


пример:

то есть я хочу чтоб был оверлейный грвфик который бы синхронизировался с текущим графиком в точках начала периода(zero_pint) например начало дня, тоесть начало дня и текущего и оверлейного графика должны совпадать и я отслеживаю расхождения графиков внутри дня,

и он строится на заданное кол-во периодов, к примеру 5 последнх дней.

---

чтоб не заморачиваться с разными периодами можно сделать просто индикатор "day_overlay" который будет рисоваться только на таймфреймах меньше дня

 и работать только с одним периодом синхронизации - день(начало каждого дня).

 
Sergei Kiriakov #:
рисует оверлейный график по верх текущего графика в текущем таймфрейме,

показалось небесполезным, набросал с "период нулевой точки = D1"

размеры свечей относительные, поэтому доп.масштаб не нужен

для "боевого применения" надо ещё добавлять трах с подгрузкой данных в таймсериях, но там много кода и есть ощущение что от билда к билду по разному. Кому надо добавят

//+------------------------------------------------------------------+
//|                                                      Overlay.mq5 |
//|                                                  Maxim Kuznetsov |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Maxim Kuznetsov"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   1
//--- plot Overlay
#property indicator_label1  "Overlay"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrRed,clrChartreuse,clrBlue,clrDarkViolet
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input string   other="XAUUSD";
input bool     inverse=false;
//--- indicator buffers
double         OverlayOpen[];
double         OverlayHigh[];
double         OverlayLow[];
double         OverlayClose[];
double         OverlayColor[];

int maxDepth=0;
int OnInit()
{
   maxDepth=(int)SeriesInfoInteger(other,_Period,SERIES_BARS_COUNT);
   SetIndexBuffer(0,OverlayOpen,INDICATOR_DATA);
   SetIndexBuffer(1,OverlayHigh,INDICATOR_DATA);
   SetIndexBuffer(2,OverlayLow,INDICATOR_DATA);
   SetIndexBuffer(3,OverlayClose,INDICATOR_DATA);
   SetIndexBuffer(4,OverlayColor,INDICATOR_COLOR_INDEX);
   ArraySetAsSeries(OverlayOpen,true);
   ArraySetAsSeries(OverlayHigh,true);
   ArraySetAsSeries(OverlayLow,true);
   ArraySetAsSeries(OverlayClose,true);
   ArraySetAsSeries(OverlayColor,true);
   EventSetTimer(5);
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int32_t rates_total,
                const int32_t 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 int32_t &spread[])
{
   ArraySetAsSeries(time,true);
   if (prev_calculated<=0 || maxDepth==0) {
      maxDepth=(int)SeriesInfoInteger(other,_Period,SERIES_BARS_COUNT);
   }
   for(int bar = prev_calculated >1? prev_calculated-2:0 ; bar<rates_total ; bar++) {
      int index=rates_total - bar - 1;
      if (_Period>=PERIOD_D1 || index>maxDepth || bar<2) {
         OverlayOpen[index]=EMPTY_VALUE;
         OverlayHigh[index]=EMPTY_VALUE;
         OverlayLow[index]=EMPTY_VALUE;
         OverlayClose[index]=EMPTY_VALUE;
         OverlayColor[index]=0;
         continue;
      }
      int otherDayShift=iBarShift(other,PERIOD_D1,time[index]);
      datetime otherDayTime=iTime(other,PERIOD_D1,otherDayShift);
      double otherDayOpenPrice=iOpen(other,PERIOD_D1,otherDayShift);
      
      int otherShift=iBarShift(other,PERIOD_CURRENT,time[index]);
      datetime otherTime=iTime(other,PERIOD_CURRENT,otherShift);
      if (otherTime<otherDayTime) {
         otherShift--;
         otherTime=iTime(other,PERIOD_CURRENT,otherShift);
      }
      MqlRates rates[1];
      if (otherDayOpenPrice<=0 || otherShift<0 || CopyRates(other,PERIOD_CURRENT,otherShift,1,rates)!=1) {
         OverlayOpen[index]=OverlayOpen[index+1];
         OverlayHigh[index]=OverlayHigh[index+1];
         OverlayLow[index]=OverlayLow[index+1];
         OverlayClose[index]=OverlayClose[index+1];
         OverlayColor[index]=OverlayColor[index+1];
         continue;
      }
      
      int thisDayShift=iBarShift(_Symbol,PERIOD_D1,time[index]);
      double thisDayOpenPrice=iOpen(_Symbol,PERIOD_D1,thisDayShift);

      if (!inverse) {
         OverlayOpen[index]=thisDayOpenPrice*(rates[0].open/otherDayOpenPrice);
         OverlayHigh[index]=thisDayOpenPrice*(rates[0].high/otherDayOpenPrice);
         OverlayLow[index]=thisDayOpenPrice*(rates[0].low/otherDayOpenPrice);
         OverlayClose[index]=thisDayOpenPrice*(rates[0].close/otherDayOpenPrice);
      } else {
         OverlayOpen[index]=thisDayOpenPrice/(rates[0].open/otherDayOpenPrice);
         OverlayHigh[index]=thisDayOpenPrice/(rates[0].high/otherDayOpenPrice);
         OverlayLow[index]=thisDayOpenPrice/(rates[0].low/otherDayOpenPrice);
         OverlayClose[index]=thisDayOpenPrice/(rates[0].close/otherDayOpenPrice);
      }
      
      if (OverlayOpen[index]==OverlayClose[index]) OverlayColor[index]=0;
      else if (OverlayOpen[index]<OverlayClose[index]) OverlayColor[index]=1;
      else OverlayColor[index]=2;
   }
   
   if (prev_calculated!=rates_total && SeriesInfoInteger(other,_Period,SERIES_BARS_COUNT)!=maxDepth) {
      return 0;
   }
   return(rates_total);
}

void OnTimer()
{
   if (SeriesInfoInteger(other,_Period,SERIES_BARS_COUNT)!=maxDepth) {
      maxDepth=0;
   }
}
Файлы:
Overlay.mq5  5 kb