Download MetaTrader 5

Problem solving in programming

To add comments, please log in or register
niloufar mohamadi
1664
niloufar mohamadi 2013.12.20 06:03 

Hi Can someone please solve the following problem for me? :)

      string delay="00:10";
       datetime    time=(datetime)PositionGetInteger(POSITION_TIME)+StringToTime(delay);
       printf(" open order Position  "+(datetime)PositionGetInteger(POSITION_TIME));
       printf(" time : "+time );



output :

2013.12.28 08:27:52    Core 1    2013.09.04 13:58:40    time : 2057.05.08 13:10:00

2013.12.28 08:27:52    Core 1    2013.09.04 13:58:40    open order Position  2013.09.04 13:00:00

Jian Chen
Moderator
3646
Jian Chen 2013.12.20 07:30  

It looks like that the StringToTime() function doesn't accept the format of "00:10", you may check out the function's reference in the Documentation section.

If the "00:10" means 10 seconds, you may simply write the code as:

datetime time = (datetime)PositionGetInteger(POSITION_TIME)+(datetime)10;
niloufar mohamadi
1664
niloufar mohamadi 2013.12.20 09:26  
forex2start:

It looks like that the StringToTime() function doesn't accept the format of "00:10", you may check out the function's reference in the Documentation section.

If the "00:10" means 10 seconds, you may simply write the code as:

thnx for relpay

but i want used delay 

string delay="00:10";
Alain Verleyen
Moderator
31085
Alain Verleyen 2013.12.20 10:27  
niloufar:

Hi Can someone please solve the following problem for me? :)



output :

2013.12.28 08:27:52    Core 1    2013.09.04 13:58:40    time : 2057.05.08 13:10:00

2013.12.28 08:27:52    Core 1    2013.09.04 13:58:40    open order Position  2013.09.04 13:00:00

It's because 

   string delay="00:10";

when converted to a datetime gives you :

2013.12.20 10:21:59.930    SomeTests (EURUSD,H1)    delay = 2013.12.20 00:10:00

Please read the documentation about StringToTime():

The function converts a string containing time or date in "yyyy.mm.dd [hh:mi]" format into datetime type.

So if you want absolutely to proceed this way, you have to use :

   string delay="1970.01.01 00:10";
Michele Lazzarini
487
Michele Lazzarini 2013.12.22 06:06  

"Time" can have 2 different meanings: position and duration.

StringToTime() accept a string that represent a position in time (a particular moment) and not a duration/delay.

datetime data-type store seconds, so if you want to add your delay to a date, first you need to have its value in seconds.

If you want to represent a delay with the format HH:MM (hours : minutes), you need to extract from it the minutes substring with StringSubstr()

then convert it to integer with StringToInteger(), convert to seconds and add this value to your POSITION_TIME.

Something like this: (simplified)

StringToInteger(StringSubstr("00:10",3,2))*60

see: https://www.mql5.com/en/articles/599#convert_add_substract

MQL5 Programming Basics: Time
MQL5 Programming Basics: Time
  • 2013.04.26
  • Dmitry Fedoseev
  • www.mql5.com
Introduction MQL5 offers a number of simple functions for working with time and you should not find it difficult getting familiar with them. The range of tasks that require use of date and time is quite small. The main tasks are: To perform certain actions at a given point of time (Fig. 1). These may be actions performed at the same time...
To add comments, please log in or register