Je vais écrire l'indicateur gratuitement - page 104

 
ALEXEY NIKOLAEV:

Mes salutations à l'estimée communauté !

Quelqu'un peut-il écrire un indicateur qui affiche sur le graphique l'information sur le numéro de la barre actuelle dans une certaine période, qui est spécifiée dans les paramètres. Par exemple, l'indicateur est exécuté sur les jours, la période de rapport est un mois spécifié dans les paramètres. Cela signifie que l'indicateur affiche sur le graphique le nombre qui, selon le compte, est la barre zéro du début du mois calendaire. Sur MT4, s'il vous plaît)

Joyeuses fêtes à tous)

Bonne chasse)

Intraday uniquement :

fonction

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 26.02.2008                                                     |
//|  Описание : Возвращает расчётный номер бара от начала суток.               |
//|           : Нумерация баров начинается с 1 (единица).                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    tf - таймфрейм                       (0 - текущий таймфрейм)            |
//|    dt - дата и время открытия бара      (0 - текущее время)                |
//+----------------------------------------------------------------------------+
int iBarOfDayCalc(int tf=0, datetime dt=0) {
  if (tf<=0) tf=Period();
  if (dt<=0) dt=TimeCurrent();
  if (tf>PERIOD_D1) {
    Print("iBarOfDayCalc(): Таймфрейм должен быть меньше или равен D1");
    return(0);
  }
  double ms=MathMod(dt/60, 1440);      // количество минут от начала суток
  int    bd=MathFloor(ms/tf)+1;        // номер бара от начала суток

  return(bd);
}
 
Alekseu Fedotov:

Intraday uniquement :

fonction

Merci, bien sûr.

Mais l'intraday ne fonctionnera pas. Non, ça ne l'est pas.

 
Bonne journée pour aider. J'ai un indicateur Awesome Oscillator qui montre la différence entre les moyennes mobiles simples avec des périodes de 5 et 34 prix médians. Quelqu'un peut-il écrire un nouvel indicateur ou suggérer comment modifier l'AO pour que l'indicateur sous forme d'histogramme montre la dynamique selon la formule suivante : [moyenne mobile simple des prix médians avec période 3 fois la moyenne mobile simple du volume en ticks avec période 3] moins [moyenne mobile simple des prix médians avec période 21 fois la moyenne mobile simple du volume en ticks avec période 21] ?
 
volizordlo:
Bonjour, aidez-moi. Il existe un indicateur Awesome Oscillator qui montre la différence entre les moyennes mobiles simples avec des périodes de 5 et 34 prix médians. Quelqu'un peut-il écrire un nouvel indicateur ou suggérer comment modifier l'AO pour afficher la dynamique de l'indicateur sous forme d'histogramme selon la formule suivante : [moyenne mobile simple des prix médians avec la période 3 multipliée par

une moyenne mobile de volume en tic-tac simple avec une période de 3 ans.

] moins [moyenne mobile simple des prix médians pour la période 21 multipliée par une moyenne mobile simple du volume en ticks pour la période 21] ?

Existe-t-il une moyenne du volume des ticks ?

 
Iurii Tokman:

vous voulez dire le calcul de la moyenne du volume des tics ?

oui

 
volizordlo:

Oui.

ok, je vais essayer de multiplier
je me demande quel sera le résultat
mais avez-vous une image de ce que devrait être le résultat ?

 
Iurii Tokman:

ok, je vais essayer de multiplier
je me demande quel sera le résultat
mais avez-vous une image de ce que devrait être le résultat ?

Cela devrait ressembler au même ao ou macd. mais c'est juste une idée. merci !
 
volizordlo:
C'est censé ressembler au même ao ou macd. mais c'est juste une idée. merci !

ok

 
volizordlo:
C'est censé ressembler au même ao ou macd. mais c'est juste une idée. merci !
//+------------------------------------------------------------------+
//|                                                      Awesome.mq4 |
//|                                               Yuriy Tokman (YTG) |
//|                       https://www.mql5.com/ru/users/satop/seller |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman (YTG)"
#property link      "https://www.mql5.com/ru/users/satop/seller"
#property version   "1.00"
#property description "Awesome Oscillator"
#property strict

//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 4
#property  indicator_color1  Black
#property  indicator_color2  Black
#property  indicator_color3  Green
#property  indicator_color4  Red
//--- buffers
double B1[];
double     ExtAOBuffer[];
double     ExtUpBuffer[];
double     ExtDnBuffer[];
//---
#define  PERIOD_FAST  3
#define  PERIOD_SLOW 21
//--- bars minimum for calculation
#define  DATA_LIMIT  34
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit(void)
  {
//--- drawing settings
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_NONE);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   SetIndexStyle(3, DRAW_HISTOGRAM);
   IndicatorDigits(Digits + 1);
   SetIndexDrawBegin(0, DATA_LIMIT);
   SetIndexDrawBegin(1, DATA_LIMIT);
   SetIndexDrawBegin(2, DATA_LIMIT);
   SetIndexDrawBegin(3, DATA_LIMIT);
//--- 3 indicator buffers mapping
   SetIndexBuffer(0, B1);
   SetIndexBuffer(1, ExtAOBuffer);
   SetIndexBuffer(2, ExtUpBuffer);
   SetIndexBuffer(3, ExtDnBuffer);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("AO");
   SetIndexLabel(2, NULL);
   SetIndexLabel(3, NULL);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
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 = rates_total - prev_calculated;
   double prev = 0.0, current;
//--- check for rates total
   if(rates_total <= DATA_LIMIT)
      return(0);
//--- last counted bar will be recounted
   if(prev_calculated > 0)
     {
      limit++;
      prev = ExtAOBuffer[limit];
     }
   /*
   Доброго времени суток! Помогите. Есть индикатор Awesome Oscillator,
   который показывает разность простых скользящих средних с периодами 5 и 34 медианных цен.
   Может ли кто написать новый индикатор или подсказать, как изменить AO,
   чтобы индикатор в виде гистограммы показывал динамику по следующей формуле:

   [простая скользящая средняя медианных цен с периодом 3
   умножить
   на простую скользящую среднюю тикового объема с периодом 3]

   минус

   [простая скользящая средняя медианных цен с периодом 21
   умножить
   на простую скользящую среднюю тикового объема с периодом 21]?
   */
   for(i = 0; i < limit; i++)
      B1[i] = (double)iVolume(Symbol(), 0, i);
   for(i = 0; i < limit; i++)
      ExtAOBuffer[i] =
         iMA(NULL, 0, PERIOD_FAST, 0, MODE_SMA, PRICE_MEDIAN, i)
         *
         iMAOnArray(B1, 0, PERIOD_FAST, 0, MODE_SMA, i)
         -
         iMA(NULL, 0, PERIOD_SLOW, 0, MODE_SMA, PRICE_MEDIAN, i)
         *
         iMAOnArray(B1, 0, PERIOD_SLOW, 0, MODE_SMA, i)
         ;
//--- dispatch values between 2 buffers
   bool up = true;
   for(i = limit - 1; i >= 0; i--)
     {
      current = ExtAOBuffer[i];
      if(current > prev)
         up = true;
      if(current < prev)
         up = false;
      if(!up)
        {
         ExtDnBuffer[i] = current;
         ExtUpBuffer[i] = 0.0;
        }
      else
        {
         ExtUpBuffer[i] = current;
         ExtDnBuffer[i] = 0.0;
        }
      prev = current;
     }
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Iurii Tokman:
Oui, merci beaucoup !