OnInit I have
ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
Creating an object on millisecond timer
uint Span=1000;
uint Next=GetTickCount()-Span;
int counter;
void OnTimer()
{
if(Next<=(GetTickCount()+Span))
{
counter++;
string name="TestObj_"+(string)counter;
Print(__FUNCTION__+": Creating "+name+" ...");
if(!ObjectCreate(0, name,OBJ_HLINE,0,TimeCurrent(),1.0))
Print(__FUNCTION__+": Error "+(string)_LastError);
Next+=Span;
}
if(_LastError!=0)
{
Print(__FUNCTION__+": Error="+(string)_LastError);
ResetLastError();
}
}
Observations:
-
Object create events usually do not fire when created On Timer. I’ve seen this happen earlier though, but the code wasn’t the same (failing to repropduce).
-
No errors. I guess this is within whats documented (“In this case, true only means that the command has been successfully enqueued”). However this is true also if the line already exists, which is something to keep in mind.
-
I have observed this behavior also when creating an object manully, thats what got me to investigate it, but this is another thing I’m failing to reproduce.
-
Works as expected on MT4.
Snippet from logs, as you can see it happens sometimes:
2018.03.04 09:21:29.397 ObjectCreateTest (GBPUSD,M5) OnTimer: Creating TestObj_29 ...
2018.03.04 09:21:29.930 ObjectCreateTest (GBPUSD,M5) OnDeinit
2018.03.04 09:21:29.933 ObjectCreateTest (GBPUSD,M1) OnInit
2018.03.04 09:21:30.941 ObjectCreateTest (GBPUSD,M1) OnTimer: Creating TestObj_30 ...
2018.03.04 09:21:30.941 ObjectCreateTest (GBPUSD,M1) OnDeinit
2018.03.04 09:21:30.944 ObjectCreateTest (GBPUSD,H4) OnInit
2018.03.04 09:21:31.952 ObjectCreateTest (GBPUSD,H4) OnChartEvent: TestObj_30 created
2018.03.04 09:21:31.952 ObjectCreateTest (GBPUSD,H4) OnTimer: Creating TestObj_31 ...
2018.03.04 09:21:31.952 ObjectCreateTest (GBPUSD,H4) OnDeinit
2018.03.04 09:21:31.953 ObjectCreateTest (GBPUSD,W1) OnInit
Complete code attached.
EDIT: Added screenshot
Files:
ObjectCreateTest.mq5 3 kb
no_create_event.png 54 kb