請問在1分K中,如何計算指定日期是往前第幾根K棒?

  •   415 
  • 最後發表   努力中  2025 二月 14
努力中 發文於   2025/02/11

例如當天是2月11日,而2月5日的日K高=getField("high","D")[4],

請問[]當中的4要如何計算呢?

DateDiff會包含假日,而且過晚上12點會跳日,但日K還沒變,所以不能用

謝謝

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/02/11

value1=getbaroffset(20250205);

value2=getField("high","D")[value1];

努力中 發文於   2025/02/13

教授好,實測還是不行,是要在1分K當中計算日K棒喔

虎科大許教授 發文於   2025/02/13

if barFreq<>"Min" or barinterval<>1 then raiseRunTimeError("限用1分鐘");

//抓20250210日K最高價

value1=DateDiff(currentDate,20250210);

value2=GetField("最高價", "D")[value1];

print(value2);

XS小編 發文於   2025/02/14

Hello 努力中,

 

如果日期距離不會很遠的話,您可以考慮使用迴圈來尋找對應的日期。

舉例來說:

if date > 20250210 then begin

    value1 = DateDiff(Date,20250210);

    value2 = 0;

    for value3 = value1 downto 0 begin

        if getfield("Date", "D")[value3] = 20250210 then value2 = value3;

        end;

    end;

 

這樣 value2 就會是所需的相對距離。

虎科大許教授 發文於   2025/02/14

我這裡更正一個錯誤。DateDiff函數傳回的是兩個日期的差距天數(包含週末及假日),在這個地方使用它會造成邏輯錯誤。

解決方法:準備足夠的分K資料筆數,然後在跑歷史K棒記錄K棒數。

setTotalBar(1890); //270*7=1890
if barfreq<>"Min" or barinterval<>1 then raiseRunTimeError("限用1分鐘"); 
var: Count(0);
//計算20250206到今天20250214差異天數,並計算20250206的最高價
if Date<=20250206 and time=090000 then count=0;
if Date>20250206 and time=090000 then count+=1;
if Date=currentDate then value1=GetField("最高價", "D")[count];
print(date,time,value1);

虎科大許教授 發文於   2025/02/14

考慮到效率問題,跑迴圈永遠是最後選項。這裡再提供另外一種解決方法:

setTotalBar(1890); //270*7=1890
if barfreq<>"Min" or barinterval<>1 then raiseRunTimeError("限用1分鐘"); 
//計算20250206到今天20250214差異天數,並計算20250206的最高價
if getInfo("IsRealTime")=0 then //跑歷史K棒
    begin
        value1=getBarOffset(20250206,090000);
        value2=value1/270;
        value3=GetField("最高價", "D")[value2];
    end;
print(date,time,value3);

努力中 發文於   2025/02/14

感謝小編、教授的回覆,好人一生平安

發表回覆
Close