MetaTrader 4. Build 173

 
MetaTrader 4. Build 173

1. Исправлена отрисовка графических объектов при переключении таймфреймов;
2. Исправлен экспорт котировок по DDE.
3. Добавлена вкладка Publish - теперь легко можно в рилтайме публиковать свой стейтмент
4. В распечатке чартов добавлено текущее время
 
Я ,как обычно, с оформительскими пожеланиями. Хорошо бы сделать, чтобы при открытии , графики автоматически становились бы в положение "смещение графика" т.е. ,чтобы сразу был виден конец графика .
Думаю это несложно. Особенно это было бы удобно, когда на экран выводится группа графиков.
 
Как насчет неточной отрисовки гистограммы "наложенной" на бары, иногда барывыглядывают на 1 пиксел из под гистограммы, раньше (до 170) было все ок.
//+------------------------------------------------------------------+
//|                                             SM Bars With MFI.mq4 |
//|                             Copyright © 2005, smazovec developer |
//|                                                 smazovec@mail.ru |
//+------------------------------------------------------------------+
//| For SM Bars With MFI we recommend next chart settings ( press F8 |
//|  or select on menu 'Charts'->'Properties...'):                   |
//|  - On 'Common' Tab disable 'Chart on Foreground' checkbox        |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, smazovec developer"
#property link      "smazovec@mail.ru"

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];

double tmpMFIBuffer[];
double tmpVolumeBuffer[];

// 1. Custom indicator initialization function

int init()
  {

// Indicators style
   SetIndexStyle(0, DRAW_HISTOGRAM, 0, 1, Lime);
   SetIndexStyle(1, DRAW_HISTOGRAM, 0, 1, Pink);
   SetIndexStyle(2, DRAW_HISTOGRAM, 0, 1, Blue);
   SetIndexStyle(3, DRAW_HISTOGRAM, 0, 1, SaddleBrown);

// Indicator buffers mapping
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexBuffer(1, ExtMapBuffer2);
   SetIndexBuffer(2, ExtMapBuffer3);
   SetIndexBuffer(3, ExtMapBuffer4);

   return(0);

  }

// 2. Custom indicator iteration function

int start()
  {
   double curVolume, prvVolume, curMFI, prvMFI;

   // Рассчитаем индикатор
   for(int i = 0; i < Bars; i++)
     {
      
      curVolume = Volume[i];
      prvVolume = Volume[i+1];

      curMFI = iBWMFI(NULL, 0, i);
      prvMFI = iBWMFI(NULL, 0, i+1);
   
      if((curVolume > prvVolume) && (curMFI > prvMFI))
        {
          ExtMapBuffer1[i] = High[i];
          ExtMapBuffer2[i] = Low[i];         
          ExtMapBuffer3[i] = 0;
          ExtMapBuffer4[i] = 0;
        }
      else if((curVolume > prvVolume) && (curMFI < prvMFI))
        {
          ExtMapBuffer2[i] = High[i];
          ExtMapBuffer1[i] = Low[i];
          ExtMapBuffer3[i] = 0;
          ExtMapBuffer4[i] = 0;
        }      
      else if((curVolume < prvVolume) && (curMFI > prvMFI))
        {
          ExtMapBuffer3[i] = High[i];
          ExtMapBuffer4[i] = Low[i];
          ExtMapBuffer1[i] = 0;
          ExtMapBuffer2[i] = 0;
        }      
      else if((curVolume < prvVolume) && (curMFI < prvMFI))

        {
          ExtMapBuffer4[i] = High[i];
          ExtMapBuffer3[i] = Low[i];
          ExtMapBuffer1[i] = 0;
          ExtMapBuffer2[i] = 0;
        }
     }

   return(0);

  }

// End. Thank you for nothing!
 
Если переключаться между счетами в момент просмотра и модификации ордеров (у меня вероятность попадания 99%, поскольку таймауты стоят между командами), то AccountNumber() возвращает номер предыдущего счета (с которого переключились).

В результате происходит попытка на новом аккаунте модифицировать ордера старого аккаунта. Ну что, после каждой строчки в скрипте рефреши вызывать?
   int Acc    = AccountNumber();
.............................
   for(int i = 0; i < count; i++)
   {
.......................      
      if (ot == OP_BUY)
      {
........................
         if (MathAbs(osl - nsl) > 2*(Ask-Bid))
         {
            WaitOrderTimeOut();
            if (Acc == AccountNumber())   <=== не помогает
               OrderModify(OrderTicket(),Ask,nsl,OrderTakeProfit(),0);
         }
      }
...............................
   }


И если для модификации ордеров наверное можно выкрутиться с помощью тикетов, то с открытием позиции сложнее. У меня было несколько случаев, когда сигнал эксперта на одном счете при переключении срабатывал на другом счете.

И еще напоминаю про невозможность определить разрешена ли торговля на сервере.

 
Установил ... посмотрел.
А вот эту штуку не нашел :

3. Добавлена вкладка Publish - теперь легко можно в рилтайме публиковать свой стетмент


Где смотреть и как использовать ?
 
Установил ... посмотрел.
А вот эту штуку не нашел :

3. Добавлена вкладка Publish - теперь легко можно в рилтайме публиковать свой стетмент


Где смотреть и как использовать ?

Вызываешь окно "Настройки" - там увидишь закладку "Публикации" ("Publish").
 
Установил ... посмотрел.
А вот эту штуку не нашел :

3. Добавлена вкладка Publish - теперь легко можно в рилтайме публиковать свой стетмент


Где смотреть и как использовать ?

Вызываешь окно "Настройки" - там увидишь закладку "Публикации" ("Publish").


Круто !
Спасибо что направили по адресу ...
 
Заметил удивительную вещь (для меня) - оказывается формируются не все бары. На минутках во всяком случае.
Так и должно быть или это бага версии 173?
У бара стоит время 1:28, а у следующего 1:32
 
Заметил удивительную вещь (для меня) - оказывается формируются не все бары. На минутках во всяком случае.
Так и должно быть или это бага версии 173?
У бара стоит время 1:28, а у следующего 1:32

тики приходят не обязательно каждую минуту - отсюда и пропуски
 
Заметил удивительную вещь (для меня) - оказывается формируются не все бары. На минутках во всяком случае.
Так и должно быть или это бага версии 173?
У бара стоит время 1:28, а у следующего 1:32

Ночью котировки очень редкие - поэтому в это время бывают пропуски.
 
значения АДХ на графике и в вызовах функций отличаются.
интересно, как с другими индикаторами?

   for (shift=limit;shift>=0;shift--,limit--) {

      adx1=iADX(NULL,0,adx,MODE_CLOSE,MODE_MAIN,shift+sh);
      adx2=iADX(NULL,0,adx,MODE_CLOSE,MODE_MAIN,shift+sh+1);
      adxp1=iADX(NULL,0,adx,MODE_CLOSE,MODE_PLUSDI,shift+sh);
      adxp2=iADX(NULL,0,adx,MODE_CLOSE,MODE_PLUSDI,shift+sh+1);
      adxm1=iADX(NULL,0,adx,MODE_CLOSE,MODE_MINUSDI,shift+sh);
      adxm2=iADX(NULL,0,adx,MODE_CLOSE,MODE_MINUSDI,shift+sh+1);
      
      Print(adx1," ",adx2," ",adxp1," ",adxp2," ",adxm1," ",adxm2);
Причина обращения: