Новая версия MetaTrader 4 Client Terminal build 402

 

MetaTrader 4 Client Terminal build 402

  1. Terminal: Исправлена коррекция таймзон при закачке истории в History Center (клавиша F2).
  2. Terminal: Исправлено отображение графиков в масштабе 1-1 для символов с 5 знаками.
  3. Исправления по сообщениям на форуме и крешлогам.
Автоматическое обновление будет доступно через систему LiveUpdate
 

Проблема вторая.

вот функция:

void MonitorTick()
{   
   string s;
   
   datetime dt=TimeCurrent();
   int y1=TimeYear(dt);
   int m1=TimeMonth(dt);
   int d1=TimeDay(dt);
   string fn=y1+"_"+m1+"_"+d1+"_Monitor_Tick_"+Symbol()+".mon";
         
   {
      handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
      if (handleM<0) 
      {
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
      }
      else
      {
         s="Time;;Shift "+Symbol()+"\n";
         FileWriteString(handleM,s,StringLen(s));
      }
   }

   s=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+";;";
   
   s=s+DoubleToStr((Bid-iOpen(NULL,PERIOD_D1,0))/Point,0)+"\n";
   
   {      
      FileSeek(handleM,0,SEEK_END);
      FileWriteString(handleM,s,StringLen(s));
   
      FileClose(handleM);
   }
      
}

НА словах - при каждом тике пишет в файл разницу между текущей ценой и ценой открытия дня.

в один прекрасный момент начинает писать в файл мусор. Содержимое ниже:

2011.05.12 15:40:50;;2
2011.05.12 15:40:50;;1
2011.05.12 15:40:51;;0
2011.05.12 15:40:51;;1
2011.05.12 15:40:52;;2
2011.05.12 15:40:53;;2
2011.05.12 15:40:55;;3
2011.05.12 15:53:54;;15692
2011.05.12 15:53:54;;15688
2011.05.12 15:54:05;;15692
2011.05.12 15:54:28;;15696
2011.05.12 15:54:42;;15694
2011.05.12 15:54:56;;15698
2011.05.12 15:55:40;;15697
2011.05.12 15:56:40;;15698
2011.05.12 15:56:47;;15696
2011.05.12 15:57:17;;15696
2011.05.12 15:57:34;;15699 

Как это объяснить????

Эксперт с этой функцией не делает больше ничего, кода три строчки. стоит на 10 инструментах, и периодически по 5-7 из них выдает это. Помогает только перезагрузка терминала. К слову, индикаторы (мультивалютные) тоже начинают показывать бред.

 
dimonsky:

Проблема вторая.

Как это объяснить????


Когда используется конструкция, типа

Bid-iOpen(NULL,PERIOD_D1,0))

необходимо убедиться в наличие бара на истории D1 и в соответствии его ожидаемому.

Т.е., если вы используете цену открытия текущего дневного бара, необходимо убедиться в том, что Вы используете цену открытия именно текущего дневного бара.

P.S.

Подозреваю, что в кодах Ваших мультивалютников тоже самое.

 

то есть того что эти данные видны на экране - не достаточно?

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

в мультивалютниках то же самое. бред показывается даже на нулевом баре, когда история по всем парам есть - они специально открыты в других окнах чтобы 100% иметь историю.

 
PapaYozh:


Т.е., если вы используете цену открытия текущего дневного бара, необходимо убедиться в том, что Вы используете цену открытия именно текущего дневного бара.

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

и какой это должен быть день, чтобы разница составляла 15000 пунктов.... ?

 
dimonsky:
странная ситуация. открыт график, который естественно показывает текущий день. секунду назад цена открытия была, и исчезла?


Я не разработчик терминала и о связях баров в открытых окнах с доступной программно историей могу только догадываться.

Я Вам написал как правильно программировать, что бы избежать неоднозначностей.

 
PapaYozh:


Я не разработчик терминала и о связях баров в открытых окнах с доступной программно историей могу только догадываться.

Я Вам написал как правильно программировать, что бы избежать неоднозначностей.


какая может быть неоднозначность при обращении к цене открытия текущего дня? какие еще проверки нужны?

Для пары GBPCAD 15000 пунктов означают что пропала вся история по дням включая сегодняшний. причем пропала вдруг, ведь была только что?

 
для пары GBPCAD 15000 пунктов обозначает то цена Бида = 0 потому что вы не удосужились обновить котировки командой RefreachRates(), или не воспользовались MarketInfo(Symbol(),MODE_BID)
 
xrust:
для пары GBPCAD 15000 пунктов обозначает то цена Бида = 0 потому что вы не удосужились обновить котировки командой RefreachRates(), или не воспользовались MarketInfo(Symbol(),MODE_BID)


нет. потому что в этом случае полученное значение было бы отрицательным (см формулу рассчета).

проблема именно в том, что БИД был, а истории не было. и я выясняю причину ее недоступности для программного кода, при том что за секунду до этого эта история была.

 

- А у меня, на сегодняшний день, (13-05-2011), никакого обновления не было. Это что, мой ДЦ игнорирует новый build ?

Во всяком случае, не было ни предупреждения обновления, ни обычной перезагрузки.

 
brici:

- А у меня, на сегодняшний день, (13-05-2011), никакого обновления не было. Это что, мой ДЦ игнорирует новый build ?

Во всяком случае, не было ни предупреждения обновления, ни обычной перезагрузки.

Обновление должно пройти завтра. Это предварительное объявление.
Причина обращения: