22 lines
951 B
MQL5
// Snippet 3: one day of work per step, driven by a timer (TF_Engine.mqh and Tick_Forge.mq5)
| |||
bool CTFEngine::Step(CTFResult &res)
| |||
{
| |||
if(Done()) { res.ok = true; return true; }
| |||
if((int)(GetTickCount() - m_ready_at) < 0) return true; // symbol still settling
| |||
datetime day = m_job.from + (datetime)m_i * 86400;
| |||
bool ok = (m_job.mode == TF_MODE_TICKS ? WriteTicksDay(day, res) : WriteBarsChunk(day, day + 86400 - 60, res));
| |||
if(!ok) return false;
| |||
if(m_bad > 0) { res.err = "function produced an invalid price"; return false; }
| |||
TF_Status(StringFormat("%s day %d/%d ticks %I64d M1 bars %I64d", TimeToString(day, TIME_DATE), m_i + 1, m_days, res.ticks, res.bars));
| |||
m_i++;
| |||
if(Done()) res.ok = true;
| |||
return true;
| |||
}
| |||
| |||
| |||
void OnTimer()
| |||
{
| |||
if(g_dlg == NULL) return;
| |||
g_dlg.Tick(); // one day / one month of work per call, so the window stays responsive
| |||
if(g_dlg.Closed()) ExpertRemove();
| |||
}
|