日期和時間
PowerLanguage有兩個日期時間,一個是k棒的日期時間,另一個是現在電腦的日期時間(現在的日期時間)。
而日期時間又有兩種格式可以表示: DateTime和ELDate/ELTime。
但是DateTime和ELDate/ELTime格式在閱讀上並不直覺,因此PowerLanguage提供格式互相轉換的函數,讓DateTime、ELDate/ELTime、字串、數值之間能互相轉換。
格式
日期和時間有兩種格式表示: DateTime 和 ELDate/ELTime。
DateTime | |
DateTime | 是一個浮點數,整數代表日期,表示從1900年1月1號起過了多少天,小數代表時間,表示從0:00後過了一天的多少比例。 |
ELDate/ELTime | |
ELDate | 表示日期,YYYMMdd 格式。 YYY -從1900年起過了多少年。 MM – 月份。 dd – 幾號。 |
ELTime | 表示時間,24時制HHmm 或 24時制HHmmss 格式(130000 = 1:00:00 PM),根據呼叫的函數決定使用哪一種格式。 HH – 小時。 mm – 分鐘。 ss – 秒。 |
日期和時間的函數
除了格式有兩種外,PowerLanguage有兩個日期時間,一個是k棒的日期時間,另一個是現在電腦的日期時間(現在的日期時間)。
PowerLanguage提供了各種日期和時間的函數。
K棒的日期時間
函數 | ||
Date |
意義 | 回傳k棒收盤的日期,日期以ELDate:YYYMMdd格式表示。 |
Example | Print(Date); 在日期October 30th, 2007會印出 1071030。在日期April 2th, 1999會印出 990402。 |
|
Time |
意義 | 回傳k棒收盤的時間,時間以ELTime:HHmm表示。 |
Example | Time 在時間10:15 AM會回傳 1015。 在時間3:45 PM會回傳 1545。 |
|
Time_s |
意義 | 回傳k棒收盤的時間,時間以ELTime:HHmmss表示。 |
Example | Time_s 在時間10:15:25 AM會回傳 101525。 在時間3:45:00 PM會回傳 154500。 |
|
DateTime |
意義 | 回傳K棒收盤的日期和時間,日期時間以DateTime格式表示。 |
Example | DateTime 在日期時間 5/28/2013 08:41:11.813 會回傳 41422.74。 |
現在電腦的日期時間
函數 | ||
CurrentDate |
意義 | 回傳現在電腦的日期,日期以ELDate:YYYMMdd表示。 |
Example | Print(CurrentDate); 在日期October 30th, 2008會印出 1081030。 |
|
CurrentTime |
意義 | 回傳現在電腦的時間,時間以ELTime:HHmm表示。 |
Example | CurrentTime 在時間10:15 AM會回傳 1015。 在時間3:45 PM會回傳 1545。 |
|
CurrentTime_s |
意義 | 回傳現在電腦的時間,時間以ELTime:HHmmss表示。 |
Example | CurrentTime_s 在時間10:15:25 AM會回傳 101525。 在時間3:45:00 PM會回傳 154500。 |
|
ComputerDateTime |
意義 | 回傳現在電腦的日期和時間,日期時間以DateTime格式表示。 ComputerDateTime = ELTimeToDateTime(CurrentTime) + ELDateToDateTime(CurrentDate) |
Example | ComputerDateTime 在日期時間 6:00 AM on January 1st, 2008 會回傳39448.25000000。 |
格式的互相轉換
DateTime和ELDate/ELTime格式在閱讀上並不直覺,因此PowerLanguage還提供格式互相轉換的函數,讓DateTime和ELDate/ELTime、DateTime和字串、DateTime和數值能互相轉換。
Destination | |||||
DateTime | ELDate/ELTime | String | Numerical | ||
Source | DateTime | NA | DateTime -> ELTime | DateTime -> String | DateTime -> Numerical |
ELDate/ELTime | ELDate或ELTime -> DateTime | NA | NA | NA | |
String | String -> DateTime | NA | NA | NA | |
Numerical | Numerical -> DateTime | NA | NA | NA |
DateTime -> ELTime
DateTime2ELTime(DateTime) |
意義 | 將DateTime的小數(時間部分)轉成ELTime:HHmm回傳。 |
Example | DateTime2ELTime(39449.65625000) 回傳1545,表示 3:45 PM。 |
|
DateTime2ELTime_s (DateTime) |
意義 | 將DateTime的小數(時間部分)轉成ELTime:HHmmss回傳。 |
Example | DateTime2ELTime_s(39449.646354167) 回傳153045,表示 3:30:45 PM。 |
|
跳回格式的互相轉換 |
ELDate或ELTime -> DateTime
ELDateToDateTime(YYYMMdd) |
意義 | 將ELDate:YYYMMdd轉成DateTime的整數(日期部分)回傳。 |
Example | ELDateToDateTime(1080101) 將January 1st, 2008轉成 39448.00000000 回傳。 ELDateToDateTime(990402) 將April 2nd, 1999轉成 36252.00000000 回傳。 |
|
ELTimeToDateTime(HHmm) |
意義 | 將ELTime:HHmm轉成DateTime的小數(時間部分)回傳。 |
Example | ELTimeToDateTime(1015) 將10:15 AM 轉成 0.42708333 回傳。 ELTimeToDateTime(1545) 將3:45 PM 轉成 0.65625000 回傳。 |
|
ELTimeToDateTime_s(HHmmss) |
意義 | 將ELTime:HHmmss轉成DateTime的小數(時間部分)回傳。 |
Example | ELTimeToDateTime_s(101525) 將10:15:25 AM 轉成 0.427372685 回傳。 ELTimeToDateTime_s(154500) 將3:45:00 PM 轉成 0.656250000 回傳。 |
|
跳回格式的互相轉換 |
DateTime -> String
DateTimeToString(DateTime) |
意義 | 將DateTime的整數(日期部分)和小數(時間部分)轉成字串回傳。 |
Example | DateTimeToString(ComputerDateTime) 回傳現在電腦的日期和時間字串。 |
|
DateTimeToString_ms(DateTime) |
意義 | 將DateTime的整數(日期部分)和小數(時間部分)轉成精準度到毫秒的字串回傳。 |
Example | DateTimeToString_ms(DateTime) 回傳K棒的日期和時間字串。 |
|
DateToString(DateTime) |
意義 | 將DateTime的整數(日期部分)轉成字串回傳。 |
Example | DateToString(39448.25000000) 回傳字串 “1/1/2008″。 |
|
TimeToString(DateTime) |
意義 | 將DateTime的小數(時間部分)轉成字串回傳。 |
Example | TimeToString(39448.75000000) 回傳字串 “6:00 PM” |
|
TimeToString_ms(DateTime) |
意義 | 將DateTime的小數(時間部分)轉成精準度到毫秒的字串回傳。 |
Example | TimeToString_ms(39448.7501) 回傳字串 “18:00:08.640” |
|
FormatDate("FormatString", DateTime) |
意義 | 將DateTime的整數(日期部分)轉成格式化字串(“FormatString”)回傳 FormatString – 格式化字串,指定字串的輸出格式,使用下面字元組成格式化字串: d 每月幾號,小於10的數字前方不補0。 dd 每月幾號,小於10的數字前方補0。 ddd 星期幾的三個字母縮寫。 dddd 星期幾的字母全名。 M 月份數字,小於10的數字前方不補0。 MM 月份數字,小於10的數字前方補0。 MMM 月份的三個字母縮寫。 MMMM 月份的字母全名。 y 年份的最後兩位數字,小於10的數字前方不補0。 yy 年份的最後兩位數字,小於10的數字前方補0。 yyyy 年份的四位數字。 |
Examples | FormatDate("dddd, MMMM dd, yyyy.",39469.250) 回傳字串 “Tuesday, January 22, 2008.” FormatDate("M/d/y",39469.250) 回傳字串 “1/22/8” FormatDate("dd-MM-yy",39469.250) 回傳字串 “22-01-08” FormatDate("Next ddd is: MMM dd",39469.250) 回傳字串 “Next Tue is: Jan 22″ |
|
FormatTime("FormatString", DateTime) |
意義 | 將DateTime的小數(時間部分)轉成格式化字串(“FormatString”)回傳 FormatString – 格式化字串,指定字串的輸出格式,使用下面字元組成格式化字串: h 12-HR AM/PM格式的小時,小於10的數字前方不補0。 hh 12-HR AM/PM格式的小時,小於10的數字前方補0。 H 24-HR格式的小時,小於10的數字前方不補0。 HH 24-HR格式的小時,小於10的數字前方補0。 m 分鐘,小於10的數字前方不補0。 mm 分鐘,小於10的數字前方補0。 s 秒,小於10的數字前方不補0。 ss 秒,小於10的數字前方補0。 t AM或PM的單一字元。 tt AM或PM。 |
Example | FormatTime("hh:mm:ss t",39469.6674) 回傳字串 “04:01:03 P” FormatTime("h tt",39469.6674) 回傳字串 “4 PM” FormatTime("HH:mm",39469.6674) 回傳字串 “16:01” FormatTime("m MIN s SEC",39469.6674) 回傳字串 “1 MIN 3 SEC” |
|
跳回格式的互相轉換 |
String -> DateTime
StringToDate("MM/dd/yy") orStringToDate("MM/dd/yyyy") |
意義 | 將字串“MM/dd/yy”或“MM/dd/yyyy”轉成DateTime的整數(日期部分)回傳。 Where: MM – 月份。 dd – 幾號。 yy – 年份的最後兩位數。 yyyy – 年份的四位數。 |
Example | StringToDate("04/04/99") 將April 4th, 1999 轉成 36254.0000000 回傳。 |
|
StringToTime("hh:mm:ss tt") |
意義 | 將字串“hh:mm:ss tt“轉成DateTime的小數(時間部分)回傳。 Where: hh – 小時,以12-hour AM/PM的格式。 mm – 分鐘。 ss – 秒。 tt – AM或PM。 |
Example | StringToTime ("08:00:00 AM") 將08:00:00 AM 轉成 0.33333333 回傳。 |
|
StringToDateTime("MM/dd/yy hh:mm:ss tt") orStringToDateTime("MM/dd/yyyy hh:mm:ss tt") |
意義 | 將字串“MM/dd/yy”或“MM/dd/yyyy”轉成DateTime的整數(日期部分)和小數(時間部分)回傳。 Where: MM – 月份。 dd – 幾號。 yy – 年份的最後兩位數。 yyyy – 年份的四位數。 hh – 小時,以12-hour AM/PM的格式。 mm – 分鐘。 ss – 秒。 tt – AM或PM。 |
Example | StringToDateTime("04/04/99 04:48:00 PM") 將04:48:00 PM on April 4th, 1999 轉成 36254.70000000 回傳。 |
|
跳回格式的互相轉換 |
DateTime -> Numerical
YearFromDateTime(DateTime) |
意義 | 回傳DateTime的年份數字 |
Example | YearFromDateTime(39449.25000000) 回傳數字2008,表示2008年。 |
|
MonthFromDateTime(DateTime) |
意義 | 回傳DateTime的月份數字。 |
Example | MonthFromDateTime(39600.25000000) 回傳數字6,表示六月。 |
|
HoursFromDateTime(DateTime) |
意義 | 回傳DateTime的24-HR的小時數字。 |
Example | HoursFromDateTime(39449.85000000) 回傳數字20,表示8 PM。 |
|
MinutesFromDateTime(DateTime) |
意義 | 回傳DateTime的分鐘數字。 |
Example | MinutesFromDateTime(39449.35000000) 回傳數字24,表示24分。 |
|
SecondsFromDateTime(DateTime) |
意義 | 回傳DateTime的秒數數字。 |
Example | SecondsFromDateTime (39449.35440000) 回傳數字20,表示20秒。 |
|
MillisecondsFromDateTime(DateTime); |
意義 | 回傳DateTime的毫秒數字。 |
Example | MillisecondsFromDateTime(DateTime) 回傳現在k棒的毫秒數字。 |
|
跳回格式的互相轉換 |
Numerical -> DateTime
EncodeDate(yy, MM, dd) |
意義 | 將數字yy、MM、dd轉成DateTime回傳。 yy – 年份最後兩位數字。 MM – 月份數字。 dd – 日期數字。 |
Example | EncodeDate(08, 01, 01) 將 January 1st, 2008 轉成 39448.00000000 回傳。 |
|
EncodeTime(HH, mm, ss, mmm) |
意義 | 將數字HH、mm、ss、mmm轉成DateTime回傳。 HH – 小時數字,以24-hour 格式。 mm – 分鐘數字。 ss – 秒數字。 mmm – 豪秒數字。 |
Example | EncodeTime(16, 29, 55, 500) 將16:29:55.500 轉成 0.6874479167 回傳。 |
|
跳回格式的互相轉換 |
Example
下面的範例是在指定的日期內: 04/08/2022-04/09/2022,印出debug用的log(open、high、low、close)到檔案。
inputs: startDateOfLog("04/08/2022");
inputs: endDateOfLog("04/09/2022");
var: dateStr(""), timeStr(""), kBarTimeStr(""), kBarDateStr(""), formatStr(""), filePathStr("");
var: isEnableLogOfDate(false);
//* date and time formatting */
dateStr=FormatDate("yyyy-MM-dd", ComputerDateTime);
timeStr=FormatTime("HH:mm:ss", ComputerDateTime);
kBarTimeStr=FormatTime("HH:mm:ss", DateTime);
kBarDateStr=FormatDate("yyyy-MM-dd", DateTime);
formatStr="Computer Date Time: "+dateStr+" "+timeStr+", K-bar Date Time: "+kBarDateStr+" "+kBarTimeStr;
//file path
filePathStr="D:\MCLog\"+getsymbolname+"_"+getstrategyname+".log";
//check the date
isEnableLogOfDate=StringToDate(startDateOfLog)<=DateTime and DateTime<=StringToDate(endDateOfLog);
//print debug log to file within specified date
if isEnableLogOfDate then begin
print(File(filePathStr), formatStr, "** Start Log **");
print(File(filePathStr), ", open: ", open, ", high: ", high, ", low: ", low, ", close: ", close);
end;
Reference
https://www.multicharts.com/trading-software/index.php?title=Category:Date_and_Time_Routines
https://www.multicharts.com/trading-software/index.php?title=Category:Data_Information/General
https://www.multicharts.com/trading-software/index.php?title=Outputting_Dates_in_EasyLanguage
https://www.multicharts.com/trading-software/index.php?title=DateTimeToString_Ms