我将免费编写指标 - 页 104

 
ALEXEY NIKOLAEV:

我向尊敬的社区表示问候!

谁能写一个指标,在图表上显示在设置中指定的某一时期的当前条数的信息。例如,指标是按天运行的,报告期是设置中指定的一个月。这意味着,该指标在图表上显示的数字,根据账户,是从日历月开始的零条。在MT4上,请)

祝大家节日快乐)

狩猎快乐)

仅限日内。

功能

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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:

仅限日内。

功能

当然,谢谢你。

但日内就不行了。不,它没有。

 
帮忙的好日子。我有一个令人敬畏的震荡指标,它显示了周期为5和34的中间价格的简单移动平均线的差异。谁能写一个新的指标,或者建议如何改变AO,使指标以柱状图的形式显示动态,使用以下公式。[周期为3的中位价格的简单移动平均数乘以 周期为3的滴答量的简单移动平均数]减去[周期为21的中位价格的简单移动平均数乘以 周期为21的滴答量的简单移动平均数]?
 
volizordlo:
你好,请帮我一下。有一个指标Awesome Oscillator 显示了简单移动平均线与5期和34期中间价格的差异。谁能写一个新的指标,或者建议如何改变AO,按照以下公式将指标的动态显示为柱状图。[中位数价格的简单移动平均数,周期为3,乘以

一个简单的滴答量移动平均线,周期为3

]减去[第21期中值价格的简单移动平均数乘以 第21期Tick量的简单移动平均数]?

是否有一个平均的tick量?

 
Iurii Tokman:

你指的是平均的tick volume?

 
volizordlo:

是的。

好的,我将尝试乘以
,我想知道结果是什么
,但你有图片吗,结果应该是什么?

 
Iurii Tokman:

好的,我将尝试乘以
,我想知道结果是什么
,但你有图片吗,结果应该是什么?

它应该看起来像相同的AO或MACD。但这只是一个想法。谢谢!
 
volizordlo:
它应该看起来像相同的AO或MACD。但这只是一个想法。谢谢!

好的

 
volizordlo:
它应该看起来像相同的AO或MACD。但这只是一个想法。谢谢你!
//+------------------------------------------------------------------+
//|                                                      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:
是的,非常感谢你!