Есть вопрос разработчикам MetaTrader4 - страница 5

 
AlexeyVik:

Не получится. По-любому координата привязана ко времени бара по которому строится гистограмма самого бара.

ps; Тот индикатор, о котором речь я решил опубликовать в Code Base, а он написан достаточно давно, ещё до 6** билда. Соответственно его надо привести к соответствующему виду перед тем как... Чуть позже дам на него ссылку.



Алексей, Вы про меня не забыли?)))
 
FAQ:

Здравствуйте коллеги! не  знаю кто тут за главного, да и вопрос мой не стоит новой темы, но ответьте пожалуйста кто может:

1. в терминале мт4 при применении шаблона всегда включается "автоматический  масштаб"  можно ли сделать, чтобы этого не случалось? мне нравится фиксированный.

2. было бы здорово в терминале иметь кнопку "фиксировать масштаб"

наверняка эти вопросы уже 100 раз задавали, но как-то я быстро не нашел ответа.

 

Vladimir-05:

Алексей, Вы про меня не забыли?)))

Нет, не забыл. Оказалось что опубликовать код в Code Base так-же муторно как и в маркете. От маркета я уже отказался, придётся и от этого сервиса тоже отказываться. Им оказывается не нравятся звёздочки в коде и цвет графика который я использую по умолчанию. Но примеров с нарушениями этих правил достаточно много...

Вот весь код.

/********************************************************************\
|                                                    TicksVolume.mq4 |
|                                           Copyright 2013, Viktorov |
|                                                     v4forex@qip.ru |
\********************************************************************/
#property copyright "Copyright 2013, Viktorov"
#property link      "v4forex@qip.ru"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Navy
#property indicator_color2 LawnGreen
#property indicator_color3 FireBrick
#property indicator_color4 Yellow
#property indicator_width1 4
#property indicator_width2 2
#property indicator_width3 4
#property indicator_width4 2
#property indicator_level1 0
#property indicator_levelcolor Olive
#property indicator_levelstyle STYLE_DOT

double   UpBuffer[];
double   DnBuffer[];
double   UpTick[];
double   DnTick[];
double   _Bid, _Ask, PriceUp, PriceDn, TickUp, TickDn;

/**************Custom indicator initialization function**************/
int OnInit()
{
   IndicatorShortName("Тиковые объёмы");
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   SetIndexStyle(3, DRAW_HISTOGRAM);
   SetIndexBuffer(0, UpBuffer);
   SetIndexBuffer(1, UpTick);
   SetIndexBuffer(2, DnBuffer);
   SetIndexBuffer(3, DnTick);
   SetIndexLabel(0, "Pips вверх");
   SetIndexLabel(1, "Tick вверх");
   SetIndexLabel(2, "Pips вниз");
   SetIndexLabel(3, "Tick вниз");
   IndicatorDigits(Digits);
   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[])
{
   static datetime LastBar = 0;
    datetime CurBar = time[0];
  // При появлении нового бара обнуляем переменные
   if(LastBar != CurBar)
    {
     TickUp = 0;
      TickDn = 0;
       PriceUp = 0;
      PriceDn = 0;
     LastBar = CurBar;
    }
   if(_Bid == 0) _Bid = Bid;  // При появлении нового бара или при первом запуске присваиваем переменным соответствующие значения Bid
   if(_Ask == 0) _Ask = Ask;  // и Ask
     // 
      if(Bid > _Bid || (_Bid == Bid && _Ask > Ask))   // Если произошло увеличение цены 
       {
        PriceUp += Bid - _Bid;                        // Увеличим количество пунктов вверх
        UpBuffer[0] = PriceUp/_Point;                 // заполним буфер соответствующим значением пунктов
        TickUp++;                                     // Увеличим значение Volume вверх
        UpTick[0] = TickUp;                           // заполним буфер соответствующим значением Volume
       }
      if(Bid < _Bid || (_Bid == Bid && _Ask < Ask))   // Если произошло уменьшение цены 
       {
        PriceDn += Bid - _Bid;                        // Увеличим количество пунктов вниз
        DnBuffer[0] = PriceDn/_Point;                 // заполним буфер соответствующим значением пунктов
        TickDn--;                                     // Увеличим значение Volume вниз
        DnTick[0] = TickDn;                           // заполним буфер соответствующим значением Volume
       }
    _Bid = Bid;
    _Ask = Ask;
   return(rates_total);
}/*******************************************************************/

 
AlexeyVik:

Нет, не забыл. Оказалось что опубликовать код в Code Base так-же муторно как и в маркете. От маркета я уже отказался, придётся и от этого сервиса тоже отказываться. Им оказывается не нравятся звёздочки в коде и цвет графика который я использую по умолчанию. Но примеров с нарушениями этих правил достаточно много...

Вот весь код.


Алексей, спасибо, что не забыли)))

Например, примерно, тоже самое. Только, почему-то не работает.

Посмотрите, пож-та, если не сложно))) 

Файлы:
versia21.mq4  3 kb
 
Vladimir-05:

Алексей, спасибо, что не забыли)))

Например, примерно, тоже самое. Только, почему-то не работает.

Посмотрите, пож-та, если не сложно))) 

Кое-что поправил, в роди бы считает)))
Файлы:
 
Vladimir-05:

Алексей, спасибо, что не забыли)))

Например, примерно, тоже самое. Только, почему-то не работает.

Посмотрите, пож-та, если не сложно))) 

Алексей, добрый день,

Посмотрите, пожалуйста код.

Считает минусовые и плюсовые тики. Но почему-то их сумма не совпадает с Volume?

Файлы:
 
Vladimir-05:

Алексей, добрый день,

Посмотрите, пожалуйста код.

Считает минусовые и плюсовые тики. Но почему-то их сумма не совпадает с Volume?

 

Владимир, ну не обессудь, лениво мне копать чужой код. Обрати внимание на условие

if(Bid > _Bid || (_Bid == Bid && _Ask > Ask))

Если бид увеличился или бид остался неизменным, а аск увеличился.

Но и это не гарантирует полного соответствия. В некоторых случаях и в моём индикаторе на единичку отстаёт.

Глянул код беглым взглядом и сразу вопрос: Если новый бар ... else ... Что получается? Поступил новый тик, новый бар, а этот тик не учтён, поскольку else не выполняется. Ну и с условиями не разбирался, но что-то мне не понравилось.

 
AlexeyVik:

Владимир, ну не обессудь, лениво мне копать чужой код. Обрати внимание на условие

Если бид увеличился или бид остался неизменным, а аск увеличился.

Но и это не гарантирует полного соответствия. В некоторых случаях и в моём индикаторе на единичку отстаёт.

Глянул код беглым взглядом и сразу вопрос: Если новый бар ... else ... Что получается? Поступил новый тик, новый бар, а этот тик не учтён, поскольку else не выполняется. Ну и с условиями не разбирался, но что-то мне не понравилось.



Алексей, спасибо) Подумаю...
 

Vladimir-05:
Алексей, спасибо) Подумаю...
  Алексей, а разве не может быть: Bid > _Bid и  Ask > _Ask)???
 
Vladimir-05:
  Алексей, а разве не может быть: Bid > _Bid и  Ask > _Ask)???
Давай перейдём для дальнейшего обсуждения сюда, код опубликовали в код базе.
Причина обращения: