インジケータを無償で作成します - ページ 104

 
ALEXEY NIKOLAEV:

尊敬するコミュニティの皆様、よろしくお願いします。

どなたか、設定で指定した一定期間の現在のバー番号の情報をチャートに表示するインジケーターを書いて いただけませんか?例えば、指標は日単位で実行され、報告期間は設定で指定された月です。これは、口座によると、カレンダー月の初めからゼロバーである数字をチャート上に表示することを意味します。MT4で、お願いします)

ハッピーホリデー(Happy Holidays to all)

ハッピーハンティング)

日中だけです。

機能

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

日中だけです。

機能

もちろん、ありがとうございます。

しかし、イントラデイではうまくいきません。いいえ、そんなことはありません。

 
お手伝いに良い日。私は、Awesome Oscillatorというインジケータを持って いますが、これは、期間5と34の中央値で単純移動平均の差を表示するものです。誰か新しいインジケータを書くか、インジケータが次の式を使用してヒストグラムの形でダイナミクスを表示するようにAOを変更する方法を提案してください。[期間 3 の中央値単純移動平均× 期間 3 のティック数単純移動平均]から[期間 21 の中央値単純移動平均× 期間 21 のティック数単純移動平均] を差し引いたもの?
 
volizordlo:
こんにちは、助けてください。期間5と34の中央値で単純移動平均の差を表示する指標Awesome Oscillatorが あります。どなたか新しいインジケーターを書いていただくか、AOを変更して以下の式に従ってインジケーターのダイナミクスをヒストグラムで表示する方法を提案していただけませんか?[中央値の単純移動平均に期間3を乗じた もの。

期間3日の単純ティックボリューム移動平均です。

から[期間21の中央値の単純移動平均に期間21の出来高の単純移動平均を乗じた もの]を引いたものですか?]

は、ティックボリュームの平均化ですか?

 
Iurii Tokman:

ティックボリュームの平均化ということでしょうか?

 
volizordlo:

そうですね。

OK, I will try to multiply
I wonder what the result is
but do you have the picture of what the result should be ?

 
Iurii Tokman:

OK, I will try to multiply
I wonder what the result is
but do you have the picture of what the result should be ?

同じ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:
はい、ありがとうございました。