Проблема с записью в файл

 
Задача следующая.

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

Ниже две программы Save2.mq4 и Save1.mq4.

Save2 - Использует iTime()
Save1 - Использует Time[]

Ниже результаты . Поясните, непойму.
//+------------------------------------------------------------------+
//| Save2.mq4|
//| Copyright © 2007, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

datetime lasttime;


#define FileName "somehistory.s2"

int filehandle;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{


filehandle =FileOpen(FileName,FILE_BIN|FILE_WRITE);

//----
return(0);
}

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

FileClose(filehandle);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
string errstr;
int errcode;
errstr="";

//CalculateGameTicStatus(errstr);
if (lasttime==iTime(Symbol(),PERIOD_D1,1)) return;
else lasttime=iTime(Symbol(),PERIOD_D1,1);



if (filehandle>0)
{
// Все предыдущие дни вносим в состояние
string tmpstr=TimeToStr(iTime(Symbol(),PERIOD_D1,1));//+" "+TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,1));
FileWriteString(filehandle, tmpstr+CharToStr(10), StringLen(tmpstr)+1);

}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Save1.mq4 |
//| Copyright © 2007 |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007"
#property link "https://www.metaquotes.net/"


datetime lasttime=0;
#define FileName "somehistory.s1"

int filehandle;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

filehandle =FileOpen(FileName,FILE_BIN|FILE_WRITE);

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
FileClose(filehandle);
return(0);
}

int start()
{
if (lasttime==Time[1]) return;
else lasttime=Time[1];

if(filehandle>0)
{
string tmpstr=TimeToStr(Time[1]);
FileWriteString(filehandle, tmpstr+CharToStr(13), StringLen(tmpstr)+1);
}

return(0);
}
//+------------------------------------------------------------------+

 
Программы тестировались на периоде 2002.01.01 - 2003.01.01

Программа Save1 работает при тестировании на Daily.
Необходимо реализовать программу для любого TF.

Каким-то образом программа save2 пишет 11.11.2002 раньше чем 09.11.2002 ??????? см.выше
 
Надо субботы исключить. Они тебе все равно не нужны. в данном случае например 09.11.2002 - это суббота
 
Спасибо за ответ.
Но дело не в этом. 
Я уже поразному менял программу.
Вот вариант без выходных.

Используется функция
// Выходные?
bool IsItHolyday(datetime T)
{
if (TimeDayOfWeek(T)==0) return(true);
if (TimeDayOfWeek(T)==6) return(true);
else return(false);

}


//+------------------------------------------------------------------+
//| Save2.mq4 |
//| Copyright © 2007, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

datetime lasttime;

#include <us_expert\Time_Fun.mq4>



#define FileName "somehistory.s2"

int filehandle;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{


filehandle =FileOpen(FileName,FILE_BIN|FILE_WRITE);

//----
return(0);
}

//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

FileClose(filehandle);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
string errstr;
int errcode;
errstr="";

//CalculateGameTicStatus(errstr);
if (lasttime==iTime(Symbol(),PERIOD_D1,1)) return;
else lasttime=iTime(Symbol(),PERIOD_D1,1);
if (IsItHolyday(iTime(Symbol(),PERIOD_D1,1))==true) return;



if (filehandle>0)
{
// Все предыдущие дни вносим в состояние
string tmpstr=TimeToStr(iTime(Symbol(),PERIOD_D1,1));
FileWriteString(filehandle, tmpstr+CharToStr(10), StringLen(tmpstr)+1);

}
return(0);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Save1.mq4 |
//| Copyright © 2007 |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007"
#property link "https://www.metaquotes.net/"


datetime lasttime=0;
#define FileName "somehistory.s1"

#include <us_expert\Time_Fun.mq4>

int filehandle;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

filehandle =FileOpen(FileName,FILE_BIN|FILE_WRITE);

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
FileClose(filehandle);
return(0);
}

int start()
{
if (lasttime==Time[1]) return;
else lasttime=Time[1];

if (IsItHolyday(Time[1])==true) return;


if(filehandle>0)
{
string tmpstr=TimeToStr(Time[1]);
FileWriteString(filehandle, tmpstr+CharToStr(13), StringLen(tmpstr)+1);
}

return(0);
}
//+------------------------------------------------------------------+

Сравнение
 
Эта ошибка происходит не так часто.
Иногда 4месяца результаты одинаковы, иногда подряд 5 несовпадений.

Что тут не так????
 
Попробуй поменять тип datetine на int, я обычно так делаю.
 
Проверел на всей истории EURUSD. Оказалось, что есть некоторые на мой взгляд ГЮЧКИ в программе MT!!!.

Еще раз, что необходимо было сделать.

На момент нового дня пн-птн. сохранять значение свечи предыдущего дня. для ПН это ПТН для ПТН это ПН и т.д

Запускаем на Daily и смотрим файл.

1. Если запускаем Save1.mp4 , то мы получаем, ту историю которая нужна
  Иногда запись предыдущих дня например птн, производится в воскр или сбб. При этом на графике нет сбб вскр.


2. Если запускаем Save2.mp4 на меньшем TF, например 1H, то история несовпадает во многих местах.
   Например, строки дублируются см.выше. а вместо птн, пон. непонятно почему?

 Оказалось, что большинстве случаев если текущий день пон, то и предыдущий пон.  абсурд.
 а пятница находится под индексом 4.

Вставлена следующая бредовая  проверка =). Если текущий день пон и предыдущий пон,  то пятница под инексом 4. 
if ((TimeDayOfWeek(Time[0])==1)&&(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,1))==1))
{
tmpstr= "TimeH= "+TimeToStr(iTime(Symbol(),PERIOD_D1,4))+" "+
TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,4))+
" Low=" +DoubleToStr(iLow(Symbol(),PERIOD_D1,4),5)+
" Open="+DoubleToStr(iOpen(Symbol(),PERIOD_D1,4),5)+
" Close="+ DoubleToStr(iClose(Symbol(),PERIOD_D1,4),5)+
" High="+ DoubleToStr(iHigh(Symbol(),PERIOD_D1,4),5);
}
Далее. есть еще несколько несовпадений. которые встречаются реже.  В результате поставлены еще некоторые проверки. Код ниже.

if ((TimeDayOfWeek(Time[0])==1)&&(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,3))==5)) // 
{

tmpstr="TimeH= "+TimeToStr(iTime(Symbol(),PERIOD_D1,3))+" "+
TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,3))+
" Low=" +DoubleToStr(iLow(Symbol(),PERIOD_D1,3),5)+
" Open="+DoubleToStr(iOpen(Symbol(),PERIOD_D1,3),5)+
" Close="+ DoubleToStr(iClose(Symbol(),PERIOD_D1,3),5)+
" High="+ DoubleToStr(iHigh(Symbol(),PERIOD_D1,3),5);

}
else
{

if ((TimeDayOfWeek(Time[0])==1)&&(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,1))==1))
{
tmpstr= "TimeH= "+TimeToStr(iTime(Symbol(),PERIOD_D1,4))+" "+
TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,4))+
" Low=" +DoubleToStr(iLow(Symbol(),PERIOD_D1,4),5)+
" Open="+DoubleToStr(iOpen(Symbol(),PERIOD_D1,4),5)+
" Close="+ DoubleToStr(iClose(Symbol(),PERIOD_D1,4),5)+
" High="+ DoubleToStr(iHigh(Symbol(),PERIOD_D1,4),5);
}
else
{
tmpstr= "TimeH= "+TimeToStr(iTime(Symbol(),PERIOD_D1,1))+" "+
TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,1))+
" Low=" +DoubleToStr(iLow(Symbol(),PERIOD_D1,1),5)+
" Open="+DoubleToStr(iOpen(Symbol(),PERIOD_D1,1),5)+
" Close="+ DoubleToStr(iClose(Symbol(),PERIOD_D1,1),5)+
" High="+ DoubleToStr(iHigh(Symbol(),PERIOD_D1,1),5);
}
}

Теперь вся история  идентична, без пропусков и дублирований дней. =)

Ктонибудь поясните. плз. Желательно разработчики.