MultiCharts | PowerLanguage語法教學 | CH10:日期和時間(Date and Time)

日期和時間

PowerLanguage有兩個日期時間,一個是k棒的日期時間,另一個是現在電腦的日期時間(現在的日期時間)
而日期時間又有兩種格式可以表示: DateTimeELDate/ELTime
但是DateTimeELDate/ELTime格式在閱讀上並不直覺,因此PowerLanguage提供格式互相轉換的函數,讓DateTimeELDate/ELTime字串數值之間能互相轉換。

格式

日期和時間有兩種格式表示: DateTimeELDate/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

格式的互相轉換

DateTimeELDate/ELTime格式在閱讀上並不直覺,因此PowerLanguage還提供格式互相轉換的函數,讓DateTimeELDate/ELTimeDateTime字串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")
or
StringToDate("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")
or
StringToDateTime("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) 意義 將數字yyMMdd轉成DateTime回傳。
yy – 年份最後兩位數字。
MM – 月份數字。
dd – 日期數字。
Example EncodeDate(08, 01, 01)
將 January 1st, 2008 轉成 39448.00000000 回傳。
EncodeTime(HH, mm, ss, mmm) 意義 將數字HHmmssmmm轉成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

發佈留言